iamcodylee 发表于 2016-1-19 09:41 这是基于梯度上升算法的logistic回归地址 http://www.robot-ai.org/forum.ph ... &extra=page%3D1 其中这段代码与gradDescent 这个方法很像,建议你看一下,或许能找到问题所在。 #dataMatIn 2维numpy数组,列代表特征,行代表训练样本 classLabels 类别标签 def gradAscent(dataMatIn,classLabels): #转换为Numpy矩阵数据类型 dataMatrix = mat(dataMatIn) labelMat = mat(classLabels).transpose() m,n = shape(dataMatrix) alpha = 0.001 #向目标移动的步长 maxCycles= 500 #迭代次数 weights =ones((n,1)) for k in range(maxCycles): h=sigmoid(dataMatrix*weights) error =(labelMat-h) #h为列向量,列向量的元素个数等于样本个数 weights = weights + alpha * dataMatrix.transpose()*error return weights #返回训练好的回归系数 |
小谢 发表于 2016-1-18 17:27 这样不对,这样一改我的cost函数都算不出来了, 然后抛出来的theta画的线也不对 |
今天看了一篇好文,发现楼主代码里的sigmoid函数叫做“海维塞德阶跃函数”,用来表示跳变的 |
第14行代码改成 theta = theta - alpha * x.transpose() * error ,试试 |
坐等其它同学解惑。 |
你用的代码是python吗? 斯坦福的好像使用Octave编写的。 |
|Archiver|手机版|小黑屋|陕ICP备15012670号-1
GMT+8, 2025-2-24 09:57 , Processed in 0.078477 second(s), 28 queries .
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.