我用numpy编写代码(theta,X是numpy数组):
def CostRegFunction(X, y, theta, lambda_):
m = len(X)
# add bias unit
X = np.concatenate((np.ones((m,1)),X),1)
H = np.dot(X,theta)
J = (1 / (2 * m)) * (np.sum([(H[i] - y[i][0])**2 for i in range(len(H))])) + (lambda_ / (2 * m)) * np.sum(theta[1:]**2)
grad_ = list()
grad_.append((1 / m) * np.sum([(H[j] - y[j][0]) for j in range(len(H))]))
for i in range(len(theta)-1):
grad_.append((1 / m) * np.sum([(H[j] - y[j]) * X[j][i+1] for j in range(len(H))]) + (lambda_ / m) * theta[i+1])
return J, grad_
def TrainLinearReg(X, y, theta, lambda_, alpha, iter):
JHistory = list()
for i in range(iter):
J, grad = CostRegFunction(X, y, theta, Lambda_)
JHistory.append(J)
for j in range(len(theta)):
theta[j] = theta[j] - alpha * grad[j]
return theta, JHistory
Theta, JH = TrainLinearReg(X, y, th, Lambda_, 0.01, 50)
但当我学习θ时,这段代码给了我θ和J值的巨大增长。 例如,first iteration grad=[-15.12452,598.435436]——它是正确的。J是303.3255 第二次迭代-grad=[10.23566,-3646.2345]J=7924 依此类推,J增长得越来越快,但在LR的概念下,它必须更低。在
但是如果我用普通的线性方程,会得到一个很好的θ。在
那个密码有什么问题?在
numpy版本
一。10月17日编辑
我用numpy库重写了部分代码。在
所有向量现在都是列numpy数组。在
然后我生成了一组带白噪声的x-y多项式数据,并使用
^{pr2}$TrainLinearReg
函数拟合多项式方程。在我得到的是以下信息。在
我希望我能帮上忙。在
谨致问候, 加布里埃尔
相关问题 更多 >
编程相关推荐