在线性回归中使用现有系数和截距
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 是否准确地表达了他们的问题,尤其是这里的“重启”究竟是什么。以上是关于在线性回归中使用现有系数和截距的主要内容,如果未能解决你的问题,请参考以下文章