数据挖掘算法-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 条评论
登录 后参与评论

相关文章

来自专栏机器学习原理

天池大赛——瑞金医院MMC人工智能辅助构建知识图谱大赛审题解题思路解题训练模型编写预测结果

实体抽取就是自然语言中的命名实体识别,命名实体识别的算法非常多, 比如隐马尔科夫、条件随机场、rnn、lstm等等 用标注好的数据训练模型参数,调优,预测就...

1542
来自专栏生信技能树

比较不同的对单细胞转录组数据寻找差异基因的方法

背景介绍 如果是bulk RNA-seq,那么现在最流行的就是DESeq2 和 edgeR啦,而且有很多经过了RT-qPCR 验证过的真实测序数据可以来评价不同...

65510
来自专栏量化投资与机器学习

【代码+论文】最全LSTM在量化交易中的应用汇总

我们的论坛社区上线啦! https://bbs.mlqi.org 希望大家多去逛逛,学习交流,共享智慧。这个社区就是为大家解答、学习、交流在量化投资和机器学习方...

8028
来自专栏CSDN技术头条

【基础】常用的机器学习&数据挖掘知识点

Basis(基础): MSE(Mean Square Error均方误差),LMS(LeastMean Square最小均方),LSM(Least Square...

2758
来自专栏专知

【论文推荐】最新5篇网络节点表示(Network Embedding)相关论文—高阶网络、矩阵分解、多视角、虚拟网络、云计算

【导读】专知内容组整理了最近五篇网络节点表示(Network Embedding)相关文章,为大家进行介绍,欢迎查看! 1. HONE: Higher-Orde...

1.1K7
来自专栏专知

【ICCV 2017论文集】计算机视觉顶级会议ICCV2017 Open Access Repository

在这里先整理一些主题系列论文: ICCV 2017- 3D Vision Oral论文如下: Globally-Optimal Inlier Set Maxi...

3978
来自专栏开源FPGA

基于MATLAB的中值滤波算法实现

  在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平...

1734
来自专栏C语言C++游戏编程

数学思维+C语言画小猪佩奇,来试试?

我们可以看成是坐标轴。很自然的,小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:【 六二七,零一二,四六四 】适合在校大学生,小白,想转行,想通过这...

1973
来自专栏数据结构与算法

HDU4576 Robot(概率)

抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html

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

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

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

3607

扫码关注云+社区