我有一个包含47个样本的小数据集。我正在运行具有2个功能的线性回归。
运行LinearRegression后,我运行了Ridge(带有sag)。我希望它快速收敛,并返回与计算求解正规方程完全相同的预测。
但是每次运行Ridge时我得到的结果都不同,接近LinearRegression提供的结果但不完全相同。我运行的迭代次数无关紧要。这是预期的吗?为什么?在过去,我自己实现了常规的梯度下降,并且它很快收敛到这个数据集中。
ols = sklearn.linear_model.LinearRegression()
model = ols.fit(x_train, y_train)
print(model.predict([[1650,3]]))
%[[ 293081.4643349]]
scaler=preprocessing.StandardScaler().fit(x_train)
ols = sklearn.linear_model.Ridge(alpha=0,solver="sag",max_iter=99999999,normalize=False)
model = ols.fit(x_scaled, y_train)
x_test=scaler.transform([[1650,3]])
print(model.predict(x_test))
%[[ 293057.69986594]]
答案 0 :(得分:1)
谢谢大家的回答!在阅读了@sascha回复后,我对随机平均梯度下降有了更多的了解,我想我已经找到了这种差异的原因,事实上它似乎是由于"随机&#34 34;算法的一部分。
请查看维基百科页面: https://en.wikipedia.org/wiki/Stochastic_gradient_descent
在常规梯度下降中,我们根据以下公式更新每次迭代的权重:
其中和的第二项是成本函数的梯度乘以学习率mu。
重复此过程直到收敛,并且在相同的迭代次数后,在给定相同的起始权重的情况下,它总是给出相同的结果。
在随机梯度下降中,这是在每次迭代中完成的:
其中和的第二部分是单个样本中的梯度(乘以学习率mu)。所有样本在开始时随机化,然后算法在每次迭代时循环遍历它们。
所以我认为有几件事情会引起我所问的行为:
(编辑见下面的回复)
(编辑)(在调用fit方法时,可以通过 random_state 使其成为确定性的)
(EDIT)(收敛标准取决于 tol (解决方案的精度)。通过修改此参数(我将其设置为1e-100),我能够获得与该解决方案相同的解决方案由LinearRegression报道)
答案 1 :(得分:0)