• 逻辑回归的实现(LogicalRegression)


    1.背景知识

          在刚刚结束的天猫大数据s1比赛中,逻辑回归是大家都普遍使用且效果不错的一种算法。
     

    (1)回归     

         
        先来说说什么是回归,比如说我们有两类数据,各有50十个点组成,当我门把这些点画出来,会有一条线区分这两组数据,我们拟合出这个曲线(因为很有可能是非线性),就是回归。我们通过大量的数据找出这条线,并拟合出这条线的表达式,再有数据,我们就以这条线为区分来实现分类。下图是我画的一个数据集的两组数据,中间有一条区分两组数据的线。
     

       (2)sigmoid函数

             我们看到了上图中两组数据的划分,那么我们怎么来找出两组数据的边界表达式呢,这里用到sigmoid函数。它的形状大致是(如下),公式
    把数据集的特征值设为x1,x2,x3......。我们要求出它们的回归系数。只要设z=w1*x1+w2*x2.....用sigmoid函数出理是防止数据从0到1发生跳变,因为目标函数是0到1,我们要把带入x1,x2...多项式数据控制在这之间。
     

     (3)梯度上升算法

       梯度上升是指找到函数增长的方向。公式。在具体实现的过程中,不停地迭代运算直到w的值几乎不再变化为止。
     

    2.代码

       数据集在工程中有。
     
    导入数据集,并定义sigmoid函数
    [python] view plain copy
     
     print?
    1. def loadDataSet():  
    2.     dataMat = []; labelMat = []  
    3.     fr = open('/Users/hakuri/Desktop/testSet.txt')  
    4.     for line in fr.readlines():  
    5.         lineArr = line.strip().split()  
    6.         dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])  
    7.         labelMat.append(int(lineArr[2]))  
    8.     return dataMat,labelMat  
    9.   
    10. def sigmoid(inX):  
    11.     return 1.0/(1+exp(-inX))  


    返回回归系数,对应于每个特征值,for循环实现了递归梯度上升算法。
    [python] view plain copy
     
     print?
    1. def gradAscent(dataMatIn, classLabels):  
    2.     dataMatrix = mat(dataMatIn)             #convert to NumPy matrix  
    3.     labelMat = mat(classLabels).transpose() #convert to NumPy matrix  
    4.       
    5.     m,n = shape(dataMatrix)  
    6.     alpha = 0.001  
    7.     maxCycles = 500  
    8.     weights = ones((n,1))  
    9.       
    10.     for k in range(maxCycles):              #heavy on matrix operations  
    11.         h = sigmoid(dataMatrix*weights)     #matrix mult  
    12.         error = (labelMat - h)              #vector subtraction  
    13.         weights = weights + alpha * dataMatrix.transpose()* error #matrix mult  
    14.     return weights  


    结果,返回了特征值的回归系数。我们的数据集有两个特征值分别是x1,x2。我们又增设了了x0变量。得到的结果

    [[ 4.12414349]

     [ 0.48007329]

     [-0.6168482 ]]

    我们得出x1和x2的关系(设x0=1),0=4.12414349+0.48007329*x1-0.6168482*x2
     
     
    画出x1与x2的关系图
     
     

    3.代码

     
     
     

    作者微信公众号:凡人机器学习

    长期分享机器学习实战相关信息,感谢关注!

  • 相关阅读:
    python数据分析008_Matplotlib绘柱图,饼图,散点图
    python数据分析007_使用Matplotlib绘折线图
    python数据分析006_Python 2D绘图库Matplotlib
    python数据分析005_pandas的时间序列
    python数据分析004_多层索引的取值和排序
    python数据分析003_数据的合并筛选排序
    Megacli 简易使用
    k8s ingress 增加 跨域配置
    k8s 1.15 版本生产线上证书时间调整(亲测)
    grafana 展示 k8s prometheus
  • 原文地址:https://www.cnblogs.com/libogarvin/p/7352404.html
Copyright © 2020-2023  润新知