h(x)>=0.5, 即>=0时, 预测y=1
h(x)<0.5, 即<0时, 预测y=0
则将预测问题转化为对的求解问题——用梯度下降算法:
梯度下降算法求代码如下:
ef sigmoid(z):
return 1.0/(1+exp(-z))
def gradDescent(returnMat, labelVec, iterations=150):
m=len(returnMat)
n=len(returnMat[0])
theta=ones(n)
for j in iterations:
randomIndex=range(m)
for i in range(m):
alpha=4/(1.0+i+j)+0.01 %alpha每次减少1/(j+i),这样当j《max(i)时,alpha就不是严格下降的
index=int(random.uniform(0, len(randomIndex))) %这里通过随机选取样本来更新回归系数,这种方法将减少周期性的波动。
h=sigmoid(sum(theta*returnMat[index]))
theta=theta-alpha*(h-labelVec[index])*returnMat[index]
del(randomIndex[index])
return theta