首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python兑现梯度下降算法

2013-06-25 
python实现梯度下降算法本帖最后由 zhoufanking 于 2013-05-14 00:24:24 编辑刚开始学习机器学习,想自己用

python实现梯度下降算法
本帖最后由 zhoufanking 于 2013-05-14 00:24:24 编辑 刚开始学习机器学习,想自己用python实现课件中的算法,加深认识。下面是我写的使用随机梯度下降计算线性回归模型参数的代码,但是得到的结果不对,请帮忙看看!

import sys

#Training data set
#each element in x represents (x0,x1,x2)
x = [(1,2104,3) , (1,1600,3) ,(1,2400,3), (1,1416,2) , (1,3000,4)]
#y[i] is the output of y = theta0 * x[0] + theta1 * x[1] +theta2 * x[2]
y = [400,330,369,232,540]


epsilon = 0.00000001
#learning rate
alpha = 0.0001
diff = [0,0]
max_itor = 1000
error1 = 0
error0 =0
cnt = 0
m = len(x)


#init the parameters to zero
theta0 = 0
theta1 = 0
theta2 = 0

while cnt < max_itor:

cnt = cnt + 1

#calculate the parameters
for i in range(m):

diff[0] = y[i]-( theta0 + theta1 * x[i][1] + theta2 * x[i][2] )

theta0 = theta0 + alpha * diff[0] * x[i][0]
theta1 = theta1 + alpha * diff[0]* x[i][1]
theta2 = theta2 + alpha * diff[0]* x[i][2]

#calculate the cost function
for lp in range(len(x)):
error1 += ( y[i]-( theta0 + theta1 * x[i][1] + theta2 * x[i][2] ) )**2/2

if abs(error1-error0) < epsilon:
break
else:
error0 = error1

print ' theta0 : %f, theta1 : %f, theta2 : %f, error1 : %f'%(theta0,theta1,theta2,error1)

print ' theta0 : %f, theta1 : %f, theta2 : %f'%(theta0,theta1,theta2)


试着改过alpha和theta的初值,结果还是不对,应该不是初值引起的,但我也看不出代码里哪儿写错了。 Python 算法 梯度下降
[解决办法]
没研究,不过逻辑上应该用除法反算回来;还有重新算误差error1不归0吗,下标lp是不是应该改i...

theta0 = theta0 + alpha * diff[0] / x[i][0]
theta1 = theta1 + alpha * diff[0] / x[i][1]
theta2 = theta2 + alpha * diff[0] / x[i][2]

error1 = 0
for i in range(len(x)):
        error1 += ( y[i]-( theta0 + theta1 * x[i][1] + theta2 * x[i][2] ) )**2/2
[解决办法]
这个我都是用matlab了。。。。。矩阵算得快啊  咱那些编程语言 感觉引入矩阵的包才能达到同等速度

热点排行