首先加载数据:
机器学习实战(4):Logistic回归
接下来写一下logistic模型的梯度上升算法:
假设P(yi=1xi)=π(xi)P(y_i = 1|x_i) = \pi(x_i),那么对于样本观测值集合,其极大似然函数为L(w)=i=1m[π(xi)]yi[1π(xi)]1yiL(w) = \prod_{i=1}^m[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i},我们的目标就是选择合适的参数估计值使得似然函数值达到最大。
对数似然函数值lnL(w)=i=1m[yiln(π(xi))+(1yi)ln(1π(xi))]=i=1m[yiln11+ewTx+(1yi)ln11+ewTx]=i=1m[yi(wTxi)ln(1+ewTxi)]lnL(w) = \sum_{i=1}^m [y_iln(\pi(x_i)) + (1-y_i)ln(1-\pi(x_i))] \\ = \sum_{i=1}^m [ y_iln\frac1{1 + e^{-w^Tx}} + (1-y_i)ln \frac1{1 + e^{w^Tx}}] \\ = \sum_{i=1}^m[y_i(w^Tx_i) - ln(1 + e^{w^Tx_i})]
对该式求偏导:lnL(w)wk=i=1mxik[yiπ(xi)] \frac{\partial lnL(w)}{\partial w_k} = \sum_{i=1}^m x_{ik} [y_i - \pi(x_i)]
因此,梯度上升法中得:wk:=wk+αi=1mxik[yiπ(xi)] w_k := w_k + \alpha \sum_{i=1}^m x_{ik}[y_i - \pi(x_i)]
机器学习实战(4):Logistic回归
这样我们就成功拟合出了logistic函数,但是以上优化算法存在一个问题:每次更新系数值时都需要遍历整个数据集,这样计算的效率会非常低。
因此我们对梯度上升算法做一个改进:采用增量式更新的方法,每次只选择一个样本点来更新回归系数。
但是这个算法也有一个缺点,如果选择了那些易错分类的数据点,会导致系数会发生较大的波动,最后需要很多次数的迭代才能达到最优,因此我们再做两个改进:每次迭代时都调整学习效率α\alpha,使得学习效率随着迭代次数增加而减小;同时随机选取样本进行更新,从而减少参数估计的周期性波动。

机器学习实战(4):Logistic回归

相关文章: