【发布时间】:2021-12-19 15:10:32
【问题描述】:
我需要自己实现梯度下降。我的任务是创建一个任意函数,为其添加噪声,然后找到该函数的系数值。所以首先,我创建了一个函数并创建了一些随机值:
# Preprocessing Input data
function = lambda x: x ** 2 +(x)+1
X=[]
Y=[]
for i in range(-100,100):
X.append(i)
Y.append(function(i) + random.randrange(-10,10)
然后我将值标准化-
maxVal = np.max(np.hstack((X,Y)))
X = X/maxVal
Y = Y/maxVal
X= np.asarray(X)
Y= np.asarray(Y)
这是我的梯度下降代码,使用导数求系数
w1Arr = []
w2Arr = []
bArr = []
lossArr = []
for i in range(epochs):
Y_pred =w1*np.square(X)+w2*X+b
D_w1 = (-2/n) * sum( np.square(X) * (Y - Y_pred)) # Derivative for w1
D_w2 = (-2/n) * sum(X * (Y - Y_pred)) # Derivative for w2
D_b = (-2/n) * sum(Y - Y_pred) # Derivative for b
w1 = w1 - L * D_w1 # Update w1
w2 = w2 - L * D_w2 # Update w2
b = b - L * D_b # Update b
loss = sum((Y - Y_pred) * (Y - Y_pred)) #MSE
w1Arr.append(w1)
w2Arr.append(w2)
bArr.append(b)
lossArr.append(loss)
当我尝试绘制结果时:
# Making predictions
Y_pred = w1*(np.square(X))+w2*X+b
#print(Y_pred)
plt.scatter(X, Y)
plt.plot(X, Y_pred) # predicted
plt.legend()
plt.show()
我几乎被卡住了,不知道我的代码有什么问题或如何修复它。 我在网上寻找解决方案,但找不到任何解决方案。 任何帮助将不胜感激。
【问题讨论】:
-
plt.plot([min(X), max(X)],[min(Y_pred),max(Y_pred)],color='red', label="MSE")这段代码只是在两点之间画了一条线:(minX, minY_pred)和(maxX, maxY_pred),这就是你要找的吗?不应该是plt.plot(X, Y_pred)之类的吗? -
@DDomen 是的,我试过了,我仍然得到一条直线......
标签: python linear-regression gradient non-linear-regression coefficients