机器学习实战——Logistic回归

机器学习实战——Logistic回归

思想如下:

对于N个特征属性(X1,X2,X3,X4……Xn),如果它们只属于两个类别(0,1),那么在N维空间上我们希望用一个N-1维的空间将这两个类划分开,划分后尽量使每边只包含一个类别。用两个特征属性来举例的话,对于样本中所有物体,(X1,X2)两个特征属性构成平面上的点,如果能找到一条直线把属于不同类别的点划分开来,那么对于未知类别的物体,只要判断属性点(X1‘,X2’)在这条直线哪边,就可以判断出类别了。

书中用到sigmoid函数:f(z)=1/(1+e-z),用这个函数就是为了使我们对X1‘,X2‘处理成一个数z后,带入f(z)能明显的区别开两类,这个函数的形状如下所示:
在这里插入图片描述

可以看出,在z=0时为0.5,而向两边扩展后,负方向趋向0,正方向趋向1,这样可以通过z>0.5来判断类别了。

接下来还有一个问题就是如何对X1‘,X2‘处理产生z呢?书中的方法时利用多项式z=g(x1,x2)=w0+w1x1+w2x2,这个线性多项式中如果z=0就成为我们用来划分点的那条直线了。

对于未知类别的数判断类别的方法如下:

通过z=g(x1’,x2’)得到z,代入sigmoid函数f(z),如果计算结果大于0.5,那么就认为属于类别1,如果结果小于0.5,那么就认为属于类别0。

如何训练呢?

注意到在g(x1,x2)函数中,w0,w1,w2都是未知的,这就是我们要通过训练集训练的东西了,在这里,需要转换一下思维,因为对于训练集,属性(x1,x2)和类别(0 or 1)是已知的,未知数是w0,w1,w2,也就是说g(x1,x2)函数其实转换成了F(w0,w1,w2)函数,它的期望结果是类别1(假设sigmoid后值为1),而假设我们预设的w0,w1,w2都为1,带入F(w0,w1,w2)并经过sigmoid后结果为0.3,那么存在0.7的正向偏差,此时显然应该对w0,w1,w2适当调整,如何调整能尽快使结果逼近1呢?

这里使用了梯度上升法,也就是说,对于存在偏差的F(w0,w1,w2)要使值变成目标值,那么最快的上升方向是梯度方向,即w0‘=w0+F1’dw0,w1’=w1+ F2’dw1,w2’=w2+ F2’dw2,显然,对于线性多项式函数,F1’=1,
F2’=x1, F2’=x2。这都是已知的,那么dw0,dw1,dw2有分别设置为多少呢,书中的做法是设置为(偏差*a,其中a为一个较小的常数或根据迭代次数的可变的较小数,根据偏差设置是希望偏差较大时能尽快逼近,较小时能微调)。产生心的w0,w1,w2后再重复这个过程,直到抵达我们设置的迭代次数

理解这个调整过程是最重要的,这是Logistic回归算法的核心。书中给出的python算法中关于矩阵的运算都是对这部分算法的表达。

理解了这个基本的梯度上升算法,随机上升算法也就是在此基础上的优化,值得一提的是,随机梯度上升允许实时根据新数据进行调整,具有较好的动态性。

算法的流程如下:

第一步:训练线性函数参数值:

在这里插入图片描述
第二步分类测试数据:。
分类方法很简单,获得w0,w1,w2后,按照上面所述的方式求得sigmoid值并比较后,就可以返回类别(0,1)了

心得总结:

1、 从上面的算法描述就可以看到,属性值是连续实数;

2、 可以看出Logistic回归算法中有很多是预先设定的,比如划分类别的函数为多元一次方程,这对于一些点包络的情况不适用,另外划分两类采用的是sigmoid函数,那么对于多类别数这个函数就不适用了,当然,数学上有很多函数可以适用于特定数量类别。

3、 在最后一部分,我测试了一下迭代次数对错误率的影响,发现并不是迭代次数越多错误率越低,存在一定偶然性,还不清楚是否有规律,如下所示(横坐标是100个样本迭代一遍算一次,共迭代的次数N,纵坐标是错误率):

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值