线性回归中的二次假设总是出错

我是一个初学者,代码纯粹是实验性的,可能使用起来不太方便,对此表示歉意(例如:我在for循环中使用了一个大数字来实现连续循环)

假设的形式为:ax^2+bx+c,其中参数是a、b和c。

测试数据和输出

x=[10,20,30,40,50]y=[-50,-90,-130,-170,-210]

假设函数

def h(m):    return a*(x[m]**2)+b*x[m]+c

改变参数

for i in range(1,300000000):    for j in range (0,4):        c1=c1+(h(j)-y[j])        b1=b1+(h(j)-y[j])*(x[j])        a1=a1+(h(j)-y[j])*(x[j])**2a=a-0.00000046*0.20*a1b=b-0.00000046*0.20*b1c=c-0.00000046*0.20*c1

成本函数

for k in range(0, 4):    s = s + (h(k) - y[k])**2cost=1/5*s

答案应该是a=0,b=-4,c=-10,但我的结果是a=0.02(每次循环后都会增加),b=-5.4946,c=11,当成本大约为2时(我实际上没有结束代码执行,对此带来的不便表示歉意)

我哪里出错了?


回答:

你几乎做对了一切,只有两个问题。请看内联评论:

# 依赖全局/上层作用域变量是一个坏习惯def h(a, b, c, value):    return a*(value**2)+b*value+c# 不要重复自己 - 最好在一个地方定义而不是三个lr = 0.00000046*0.20  # 学习率for i in range(1,300000000):    # 第一个问题:a1, b1 和 c1 需要重置    a1 = b1 = c1 = 0    # 硬编码魔法常数(包括数据形状)是一个坏习惯    for x_, y_ in range zip(x, y):        diff = h(a, b, c, x_)-y_        c1 += diff        b1 += diff * x[j]        a1 += diff * x[j]**2    # 第二个问题:这需要在每个“批次”中执行    a -= lr * a1    b -= lr * b1    c -= lr * c1

如果使用向量形式会更加高效,但我希望你能理解这个思路

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中创建了一个多类分类项目。该项目可以对…

发表回复

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