【发布时间】:2020-05-08 02:15:51
【问题描述】:
我刚刚开始学习机器学习,并一直在尝试将多项式拟合到使用正弦曲线生成的数据。我知道如何以封闭的形式做到这一点,但我也试图让它与梯度下降一起工作。 然而,我的体重爆炸到了疯狂的高度,即使有一个非常大的惩罚期限。我究竟做错了什么? 代码如下:
import numpy as np
import matplotlib.pyplot as plt
from math import pi
N = 10
D = 5
X = np.linspace(0,100, N)
Y = np.sin(0.1*X)*50
X = X.reshape(N, 1)
Xb = np.array([[1]*N]).T
for i in range(1, D):
Xb = np.concatenate((Xb, X**i), axis=1)
#Randomly initializie the weights
w = np.random.randn(D)/np.sqrt(D)
#Solving in closed form works
#w = np.linalg.solve((Xb.T.dot(Xb)),Xb.T.dot(Y))
#Yhat = Xb.dot(w)
#Gradient descent
learning_rate = 0.0001
for i in range(500):
Yhat = Xb.dot(w)
delta = Yhat - Y
w = w - learning_rate*(Xb.T.dot(delta) + 100*w)
print('Final w: ', w)
plt.scatter(X, Y)
plt.plot(X,Yhat)
plt.show()
谢谢!
【问题讨论】:
标签: python machine-learning regression linear-regression