首先加载数据:

接下来写一下logistic模型的梯度上升算法:
假设P(yi=1∣xi)=π(xi),那么对于样本观测值集合,其极大似然函数为L(w)=i=1∏m[π(xi)]yi[1−π(xi)]1−yi,我们的目标就是选择合适的参数估计值使得似然函数值达到最大。
对数似然函数值lnL(w)=i=1∑m[yiln(π(xi))+(1−yi)ln(1−π(xi))]=i=1∑m[yiln1+e−wTx1+(1−yi)ln1+ewTx1]=i=1∑m[yi(wTxi)−ln(1+ewTxi)]
对该式求偏导:∂wk∂lnL(w)=i=1∑mxik[yi−π(xi)]
因此,梯度上升法中得:wk:=wk+αi=1∑mxik[yi−π(xi)]

这样我们就成功拟合出了logistic函数,但是以上优化算法存在一个问题:每次更新系数值时都需要遍历整个数据集,这样计算的效率会非常低。
因此我们对梯度上升算法做一个改进:采用增量式更新的方法,每次只选择一个样本点来更新回归系数。
但是这个算法也有一个缺点,如果选择了那些易错分类的数据点,会导致系数会发生较大的波动,最后需要很多次数的迭代才能达到最优,因此我们再做两个改进:每次迭代时都调整学习效率α,使得学习效率随着迭代次数增加而减小;同时随机选取样本进行更新,从而减少参数估计的周期性波动。

相关文章: