数据挖掘算法-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)

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2015-06-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

3个关键点,把你的TensorFlow代码重构为分布式!

1123
来自专栏大数据挖掘DT机器学习

python实现逻辑logistic回归:预测病马的死亡率

假设现在有一些数据点,我们用一条直线对这些点进行拟合(该线称为最佳拟合直线),这个拟合过程就称为回归。训练分类器就是为了寻找最佳拟合参数,使用的是最优化算法。 ...

3107
来自专栏芋道源码1024

Dubbo 源码解析 —— LoadBalance

前言 终于到了集群容错中的最后一个关键词,也就是 LoadBalance(负载均衡),负载均衡必然会涉及一些算法.但是也不用太担心,算法这个词虽然高大上,但是算...

3714
来自专栏PPV课数据科学社区

使用R语言进行异常检测

本文结合R语言,展示了异常检测的案例,主要内容如下: (1)单变量的异常检测 (2)使用LOF(local outlier factor,局部异常因子)进行异常...

2796
来自专栏杨建荣的学习笔记

关于update语句的性能测试(62天)

今天对表的update进行了性能测试,收获不小。在linux 64位的环境中测试, 数据量是按照40万左右的标准进行的测试。 SQL> select count...

2677
来自专栏杨建荣的学习笔记

物化视图全量刷新的简单测试(63天)

关于物化视图的刷新,如果数据的变化比较大采用了全量刷新的时候,会将现有表里的数据都清空然后放入新的数据,整个过程有点类似delete,insert的感觉,但是...

3225
来自专栏专注数据中心高性能网络技术研发

HERD--位运算

判断一个数是否是2的次方 1 static inline int hrd_is_power_of_2(uint32_t n) 2 { 3 retur...

3439
来自专栏程序生活

TensorFlow教程(十二) 随机数实例

tf.random_uniform([4,4], minval=-10,maxval=10,dtype=tf.float32)))返回4*4的矩阵,产生于-10...

561
来自专栏算法修养

单调队列,单调栈总结

最近几天接触了单调队列,还接触了单调栈,就总结一下。 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减。当...

3268
来自专栏机器学习算法全栈工程师

Logistic回归实战篇之预测病马死亡率(二)

作 者:崔家华 编 辑:李文臣 三、从疝气病症状预测病马的死亡率 1、实战背景 本次实战内容,将使用Logistic回归来预测患疝气病的马的存活问题。原始数据集...

2994

扫描关注云+社区