在线性回归中使用现有系数和截距

Posted

技术标签:

【中文标题】在线性回归中使用现有系数和截距【英文标题】:Use existing coefficient and intercept in Linear regression 【发布时间】:2020-08-18 21:02:21 【问题描述】:

我将scikit-learn 模块用于Linear Regression。我的模型每天都在运行,现在我将模型的变量 (coef_ & intercept_) 存储到文件中,以便在我的模型运行时再次使用它。

假设,在一年的历史中,我每天都在运行模型。 11月25日,我将模型的coef_ & intercept_保存在一个文件中,所以我再次重新启动我的程序,它将从11月25日开始,一直运行到最后

因此,当我比较重启前后 11 月 26 日的预测时,预测是不同的。所以我只是想在重启前使用coef_ & intercept_,这样重启后,它应该预测11月26日的情况。

为此,我只需覆盖 coef_intercept_

from sklearn import linear_model

model = linear_model.LinearRegression()
model.coef_ = coef_stored
model.intercept_ = intercept_stored

model.fit(X, y)
model.predict(x)

我希望我对 26 日的预测在重启之前和之后都相同。使用上面的代码我无法实现它。

【问题讨论】:

那么,您的问题是什么? @desertnaut 对同一日期(11 月 26 日)的预测在重启前后有所不同。也写这个问题 "所以 [这是我的问题]" 后跟 "所以我只是认为" 可以说是一个问题的错误结构。 “我尝试了这个 [代码],但它并没有像我预期的那样给出相同的结果”对于读者来说会更简单、更直接、更不容易混淆。 【参考方案1】:

不建议更改未经训练的模型的属性,但可以按照 Desertnaut 的评论进行操作,如 How to instantiate a Scikit-Learn linear model with known coefficients without fitting it 所示。

但是,如果您调用fit 方法,则系数和截距将被覆盖

from sklearn.linear_model import LinearRegression
import numpy as np
np.random.seed(0)

my_intercepts = np.ones(2)
my_coefficients = np.random.randn(2, 3)

new_model = LinearRegression()
new_model.intercept_ = my_intercepts
new_model.coef_ = my_coefficients

print(new_model.coef_)
#[[ 1.76405235  0.40015721  0.97873798]
# [ 2.2408932   1.86755799 -0.97727788]]


new_model.predict(np.random.randn(5, 3))
#array([[ 2.51441481,  2.94725181],
#       [ 3.20531004,  0.76788778],
#       [ 2.82562532,  2.49886169],
#       [ 1.98568931,  4.73850448],
#       [-1.28821286,  2.60145844]])

你说:

所以我只是想在重新启动之前使用 coef_ 和 intercept_, 所以重启后,它应该会预测 11 月 26 日的情况。

如果在确定使用相同的数据模型系数时没有得到相同的结果,则说明有问题。如果您在程序的前后状态之间升级了 sklearn,则 sklearn 版本之间可能会有细微差别。

【讨论】:

你的基本前提不成立;确实可以在拟合模型之前定义model.coef_ OP 显示的方式:How to instantiate a Scikit-Learn linear model with known coefficients without fitting it。请注意,OP 尚未报告他们可能面临的任何具体错误。 感谢您告诉我。这是我第一次看到这种情况,但这样做仍然非常危险。 我也是第一次看到,所以我把这个帖子加了书签!我很惊讶它甚至可以工作,但我不同意它是危险的(当然前提是你确切地知道你在做什么)。 我同意,但您很容易忘记不应调用 .fit()。无论如何,我也试图回答问题的第二部分。 这是肯定的;至于其余的,我还不确定 OP 是否准确地表达了他们的问题,尤其是这里的“重启”究竟是什么。

以上是关于在线性回归中使用现有系数和截距的主要内容,如果未能解决你的问题,请参考以下文章

如何解释逻辑回归的系数和截距

数学建模:线性回归模型的Python实现

怎样用SPSS做一元线性回归?具体怎么检验相关性

为啥 sklearn 逻辑回归正则化权重和截距?

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)

查找 p 值和 z 统计量以及 OLS 线性回归