我正在尝试在不使用任何内置机器库的情况下实现一个简单的多元线性回归模型。到目前为止,我已经能够获得大约的训练均方根误差,并且来自正常(封闭形式)方程的模型能够产生的训练 RMSE 。我正在寻找可以改进梯度下降算法实现的方法。下面是我的实现:
我的梯度下降方法如下所示: 其中是模型参数,是训练元素的数量,是input 和是目标元素。是步长。
def gradientDescent(self):
for i in range(self.iters):
# T = T - (\alpha/2N) * X*(XT - Y)
self.theta = self.theta - (self.alpha/len(self.X)) * np.sum(self.X * (self.X @ self.theta.T - self.Y), axis=0)
return errors
我将设置为,将迭代次数设置为 1000。梯度下降在大约 700-800 次迭代(检查)时达到收敛。
我的错误函数是这样的:
def error_function(self):
# Error function: (1/2N) * (XT - Y)^2 where T is theta
error_values = np.power(((self.X @ self.theta.T) - self.Y), 2)
return np.sum(error_values)/(2 * len(self.X))
我期待梯度下降的训练误差和正规方程会变得相似,但它们有一点巨大的差异。所以,我想知道我是否做错了什么。
PS我还没有标准化数据。归一化导致更低的 RMSE (~ )