数据挖掘算法-python实现:Logical回归

时间:2022-05-03
本文章向大家介绍数据挖掘算法-python实现:Logical回归,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

sigmoid函数

我们看到了上图中两组数据的划分,那么我们怎么来找出两组数据的边界表达式呢,这里用到sigmoid函数。它的形状大致是(如下),公式

把数据集的特征值设为x1,x2,x3......。我们要求出它们的回归系数。只要设z=w1*x1+w2*x2.....用sigmoid函数出理是防止数据从0到1发生跳变,因为目标函数是0到1,我们要把带入x1,x2...多项式数据控制在这之间。

梯度上升算法

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

代码

数据集在工程中有。

代码下载地址:https://github.com/X-Brain/MachineLearning

导入数据集,并定义sigmoid函数

[python] view plaincopy

def loadDataSet():  
    dataMat = []; labelMat = []  
    fr = open('/Users/hakuri/Desktop/testSet.txt')  
 for line in fr.readlines():  
        lineArr = line.strip().split()  
        dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])  
        labelMat.append(int(lineArr[2]))  
 return dataMat,labelMat  
def sigmoid(inX):  
 return 1.0/(1+exp(-inX))  

返回回归系数,对应于每个特征值,for循环实现了递归梯度上升算法。

[python] view plaincopy

def gradAscent(dataMatIn, classLabels):  
    dataMatrix = mat(dataMatIn)             #convert to NumPy matrix 
    labelMat = mat(classLabels).transpose() #convert to NumPy matrix 
    m,n = shape(dataMatrix)  
    alpha = 0.001  
    maxCycles = 500  
    weights = ones((n,1))  
 for k in range(maxCycles):              #heavy on matrix operations 
        h = sigmoid(dataMatrix*weights)     #matrix mult 
        error = (labelMat - h)              #vector subtraction 
        weights = weights + alpha * dataMatrix.transpose()* error #matrix mult 
 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的关系图

(本文发布于http://blog.csdn.net/buptgshengod)