使用梯度下降算法进行线性回归,得到意外结果

我试图创建一个函数来返回线性回归假设函数的θ0θ1的值。但是对于θ0θ1的不同初始(随机)值,我得到了不同的结果。

代码哪里出了问题?

training_data_set = [[1, 1], [2, 3], [4, 3], [3, 2], [5, 5]]initial_theta = [1, 0]def gradient_descent(data, theta0, theta1):    def h(x, theta0, theta1):        return theta0 + theta1 * x    m = len(data)    alpha = 0.01    for n in range(m):        cost = 0        for i in range(m):            cost += (h(data[i][0], theta0, theta1) - data[i][1])**2        cost = cost/(2*m)        error = 0        for i in range(m):            error += h(data[i][0], theta0, theta1) - data[i][1]        theta0 -= alpha*error/m        theta1 -= alpha*error*data[n][0]/m    return theta0, theta1for i in range(5):    initial_theta = gradient_descent(training_data_set, initial_theta[0], initial_theta[1])final_theta0 = initial_theta[0]final_theta1 = initial_theta[1]print(f'theta0 = {final_theta0}\ntheta1 = {final_theta1}')

输出:

当 initial_theta = [0, 0] 时theta0 = 0.27311526522692103theta1 = 0.7771301328221445当 initial_theta = [1, 1] 时theta0 = 0.8829506006170339theta1 = 0.6669442287905096

回答:

收敛性

你已经对仅5个训练样本进行了5次梯度下降迭代,学习率为0.01(可能合理)。这并不能期望你得到问题的“最终”答案——你需要进行多次梯度下降迭代,就像你实现的那样,重复这个过程直到你的θ值收敛到一个稳定值。然后比较结果值才有意义。

for i in range(5)中的5替换为5000,然后看看会发生什么。绘制错误率/成本函数的下降图可能会有助于说明这个过程收敛到解的速度有多快。

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注