【发布时间】:2022-01-20 17:37:59
【问题描述】:
我正在尝试拟合添加了一些高斯噪声的正弦波 (sin(2 pi x))。我正在使用随机梯度下降算法,我试图拟合的模型在参数中是线性的。我使用了[1 x^1 x^2 ... x^5] 的简单基函数。损失函数是最小二乘损失。
def gradient_descent(phi, Y, W, a):
N = len(Y)
for i in range(N):
dE_dW = (np.matmul(np.array([W]), np.array([phi[i]]).T)[0][0] - Y[i]) * phi[i]
W = W - a * dE_dW
return W
为了采样,我正在这样做,
noise_sample = np.random.normal(loc = 0, scale = 0.07, size = sample_size)
for i in range(sample_size):
x = random.uniform(0.0, 0.5)
y = sin(x)
X.append(x), Y.append(y)
X, Y = np.array(X), np.array(Y)
permutation = np.random.permutation(sample_size)
X, Y = X[permutation], Y[permutation]
Y = np.add(Y, noise_sample)
order = 5
phi = np.array([np.ones(sample_size)]).T
for i in range(order):
phi = np.c_[phi, X ** (i + 1)]
W = np.random.uniform(low=0.0, high=1.0, size=(order+1,))
当我尝试使用封闭式解决方案获得相同的学位时,
phi_inv = np.matmul(np.linalg.inv(np.matmul(phi.T, phi)), phi.T)
weights = np.matmul(phi_inv, Y.T)
我得到了想要的曲线。是不是我做错了什么?
【问题讨论】:
标签: python numpy machine-learning linear-regression gradient-descent