分类算法----逻辑回归预测
2017-06-18 00:00
597 查看
逻辑回归的用途
逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小、位置、硬度、患者性别、年龄、职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微镜下观察是否恶变来判断);广告界中也常用于预测点击率或者转化率(cvr/ctr),例如因变量是是否点击,自变量是物料的长、宽、广告的位置、类型、用户的性别、爱好等等。逻辑回归原理
逻辑回归是一个形式是Y=1/(1+E(-X))的函数,它的特点是:
1 当X>0,随着X增大,Y很快的接近1;
2 当x<0,随着X的减小,Y很快的接近0;
3 当X=0时,Y=1/2;
由于逻辑回归的这种特性(在0-1之间连续),它被用来判断一个学习算法是否正确。
除了正确和不正确的结果之外,使用逻辑回归的好处在于,它还能告诉你,你离正确的结果还差多少,从而引导你向正确的方向前进。因此它常常和梯度上升的算法结合起来。
https://en.wikipedia.org/wiki/Sigmoid_function
逻辑回归的预测模型
逻辑回归不是回归问题,而是二分类问题,因变量不是0就是1,那么我们很自然的认为概率函数服从伯努利分布,而伯努利分布的指数形式就是个sigmoid 函数。
函数hθ(x)表示结果取1的概率,那么对于分类1和0的概率分别为:
逻辑回归多分类问题
由于逻辑回归常用于二分类问题,但也存在多分类情况:多类分类问题举例: 电子邮件分类/标注: 工作邮件,朋友邮件,家庭邮件,爱好邮件 ; 医疗图表(medical diagrams): 没有生病,着凉,流感; 天气:晴天,多云,雨,雪
多类分类问题如下所示:
对于多类分类问题,可以将其看做成二类分类问题:保留其中的一类,剩下的作为另一类。
对于每一个类 i 训练一个逻辑回归模型的分类器h(i)θ(x),并且预测 y = i时的概率;
对于一个新的输入变量x, 分别对每一个类别进行预测,取概率最大的那个类作为分类结果:
逻辑回归参数求解
一般回归问题的步骤是:1. 寻找预测函数(h函数,hypothesis)
2. 构造损失函数(J函数)
3. 使损失函数最小,获得回归系数θ
而第三步中常见的算法有:
1. 梯度下降
2. 牛顿迭代算法
3. 拟牛顿迭代算法(BFGS算法和L-BFGS算法)
其中随机梯度下降和L-BFGS在spark mllib中已经实现,梯度下降是最简单和容易理解的。
预测函数上面已经给出了,现在需要构造损失函数J
推导过程可以参看:
http://blog.jobbole.com/88521/
http://blog.csdn.net/oldbai001/article/details/49872433
最终梯度迭代公式如下:
theata初始化为向量[1,1........1],迭代上面公式,让theata收敛,得到最后结果。
逻辑回归训练模型伪代码
#输入参数1是100行,2列的矩阵 dataMatIn; #输入参数2是100行,1列的矩阵,取值都是0或1 classLabels; def gradAscent(dataMatIn, classLabels): # (以下两行)转换为NumPy矩阵数据类型 dataMatrix = mat(dataMatIn) labelMat = mat(classLabels).transpose() m,n = shape(dataMatrix) alpha = 0.001 maxCycles = 500 #迭500找到 weights = ones((n,1)) #初始化成n行1列的全为1的矩阵 for k in range(maxCycles): #(以下三行)矩阵相乘 h = sigmoid(dataMatrix*weights) #矩阵相乘,得到100行,1列的矩阵,利用逻辑回归把它变成100行1列的矩阵,每个值介于0到1之间,h是对label的一个估计 error = (labelMat - h) #估计与实际值之间差距为error,error也是一个100行1列的矩阵; weights = weights + alpha * dataMatrix.transpose()* error #后面3项乘的结果是2行1列的矩阵,代表了估算的结果与实际结果是超了还是低了,从而修改weights。 return weights
由于每次迭代都会导致weights朝labelMat的方向靠近,因此经过500次的循环,最终能得到较好的结果,能很好的确定weights的两个参数。
逻辑回归代码python实现
https://github.com/jimenbian/DataMining/blob/master/LogisticRegression/src/LR.py
Spark Java实现
https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/mllib/JavaLogisticRegressionWithLBFGSExample.java
相关文章推荐
- 逻辑回归(Logistic Regression, LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对未来结果发生的概率进行预测。例如,我们可以将购买的概率设置为因变量,将用户的
- 【机器学习笔记四】分类算法 - 逻辑回归
- 逻辑回归和朴素贝叶斯算法实现二值分类(matlab代码)
- R语言使用逻辑回归分类算法
- 机器学习-分类算法-逻辑回归
- 分类算法 之 逻辑回归--理论+案例+代码
- 《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌
- Lineage逻辑回归分类算法
- 使用Spark MLlib的逻辑回归(LogisticRegression)进行用户分类预测识别
- spark mllib 分类预测之逻辑回归
- 机器学习之二:分类算法 之 逻辑回归
- 分类-1-逻辑回归(Logistic regression)、感知学习算法(perceptron learning algorithm)、牛顿迭代法
- 分类算法系列2----逻辑回归Logistic原理和Python实现
- 分类算法之逻辑回归
- spark 逻辑回归进行基于文本的分类预测
- 逻辑回归算法——解决分类问题
- DS&ML_分类算法笔记之逻辑回归模型
- 分类算法系列2----逻辑回归特征选择
- 《BI那点儿事》Microsoft 逻辑回归算法——预测股票的涨跌
- 逻辑回归解决多分类和softmax