用梯度下降法实现线性回归

2024-04-24 01:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始学习机器学习,目前正修读吴志强的机器学习课程。我已经用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。任何帮助都将不胜感激。谢谢。在


Tags: 代码alpha机器lenreturndefnparray
1条回答
网友
1楼 · 发布于 2024-04-24 01:26:12

啊。不久前我也做了这个作业。在

请参阅作业PDF第7页中提到的内容:

Octave/MATLAB array indices start from one, not zero. If you’re storing θ0 and θ1 in a vector called theta, the values will be theta(1) and theta(2).

因此,在while循环中,将theta[0]和{}更改为theta[1]和{}。它应该能正常工作。在

另外,如果您将成本存储在Cost_History中,它不应该包括迭代变量,比如

Cost_History[i] = Cost(x,y,theta)

也检查一下!希望这有帮助。在

编辑1:好的,我现在已经理解这个问题了。在他的视频中,Andrew Ng说你需要同时更新theta as <强> .<强>,将theta矩阵存储在一个临时变量中。并根据temp值更新theta[0]和theta[1]。在

当前在您的代码中,在theta[1] =期间,它已经将theta[0]更改为较新的值,因此不会同时更新这两个值。在

所以,不如这样做:

^{pr2}$

现在应该可以用了,如果不行,让我知道,我会在我这边调试。在

相关问题 更多 >