gpt4 book ai didi

Python Scikit - LinearRegression 和 Ridge 返回不同的结果

转载 作者:行者123 更新时间:2023-11-30 09:07:08 26 4
gpt4 key购买 nike

我有一个包含 47 个样本的小数据集。我正在运行具有 2 个特征的线性回归。

运行 LinearRegression 后,我运行了 Ridge(带有下垂)。我希望它能够快速收敛,并返回与计算求解正规方程完全相同的预测。

但是每次运行 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]]

最佳答案

谢谢大家的回答!在阅读了 @sascha 的回复后,我又阅读了一些关于随机平均梯度下降的内容,我想我已经找到了这种差异的原因,而且事实上它似乎是由于算法的“随机”部分造成的。

请查看维基百科页面: https://en.wikipedia.org/wiki/Stochastic_gradient_descent

在常规梯度下降中,我们根据以下公式更新每次迭代的权重: gradient descent

总和的第二项是成本函数的梯度乘以学习率 mu。

重复此操作直到收敛,并且在给定相同的起始权重的情况下,经过相同次数的迭代后,它总是给出相同的结果。

在随机梯度下降中,这是在每次迭代中完成的:

stochastic gradient descent

总和的第二部分是单个样本的梯度(乘以学习率 mu)。所有样本在开始时都是随机的,然后算法在每次迭代时循环使用它们。

所以我认为有几个因素导致了我所询问的行为:

(已编辑,请参阅下面的回复)

  1. 每次重新运行拟合函数时,用于计算每次迭代梯度的点都会发生变化。这就是为什么我每次都没有得到相同的结果。

(编辑)(这可以通过调用 fit 方法时使用 random_state 来确定)

  1. 我还意识到算法运行的迭代次数在 10 到 15 之间变化(无论我设置的 max_limit 是多少)。我在 scikit 中找不到任何收敛标准,但我的猜测是,如果我可以收紧它(即运行更多迭代),我得到的答案将更接近 LinearRegression 方法。

(编辑)(收敛标准取决于tol(解决方案的精度)。通过修改此参数(我将其设置为 1e-100),我能够获得与该解决方案相同的解决方案由线性回归报告)

关于Python Scikit - LinearRegression 和 Ridge 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com