我刚开始学习机器学习,目前正修读吴志强的机器学习课程。我已经用python实现了线性回归算法,但结果并不理想。I python代码如下:
import numpy as np
x = [[1,1,1,1,1,1,1,1,1,1],[10,20,30,40,50,60,70,80,90,100]]
y = [10,16,20,23,29,30,35,40,45,50]
x = np.array(x)
y = np.array(y)
theta = np.zeros((2,1))
def Cost(x,y,theta):
m = len(y)
pred_ions = np.transpose(theta).dot(x)
J = 1/(2*m) * np.sum((pred_ions - y)*(pred_ions - y))
return J
def GradientDescent(x,y,theta,iteration,alpha):
m = len(y)
pred_ions = np.transpose(theta).dot(x)
i = 1
while i <= iteration:
theta[0] = theta[0] - alpha/m * np.sum(pred_ions - y)
theta[1] = theta[1] - alpha/m * np.sum((pred_ions - y)*x[1,:])
Cost_History = Cost(x,y,theta)
i = i + 1
return theta[0],theta[1]
itera = 1000
alpha = 0.01
a,b = GradientDescent(x,y,theta,itera, alpha)
print(a)
print(b)
我不知道到底是什么问题。但是,我的结果很奇怪。根据上述代码,参数值为298和19890。任何帮助都将不胜感激。谢谢。在
啊。不久前我也做了这个作业。在
请参阅作业PDF第7页中提到的内容:
因此,在while循环中,将}更改为}。它应该能正常工作。在
theta[0]
和{theta[1]
和{另外,如果您将成本存储在Cost_History中,它不应该包括迭代变量,比如
也检查一下!希望这有帮助。在
编辑1:好的,我现在已经理解这个问题了。在他的视频中,Andrew Ng说你需要同时更新theta as <强> .<强>,将theta矩阵存储在一个临时变量中。并根据temp值更新theta[0]和theta[1]。在
当前在您的代码中,在
theta[1] =
期间,它已经将theta[0]
更改为较新的值,因此不会同时更新这两个值。在所以,不如这样做:
^{pr2}$现在应该可以用了,如果不行,让我知道,我会在我这边调试。在
相关问题 更多 >
编程相关推荐