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

我试图创建一个函数来返回线性回归假设函数的θ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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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