【问题标题】:Sum of fitted models with sklearn使用 sklearn 拟合模型的总和
【发布时间】:2020-06-02 18:11:18
【问题描述】:

我正在尝试做一些涉及获取两个拟合模型的总和的事情,这样输出是另一个 LinearRegression 类型的对象。我已经使用 sklearn 的标准线性回归方法拟合了这两个模型。

from sklearn.linear_model import LinearRegression

reg_1 = LinearRegression().fit(X1, y)
reg_2 = LinearRegression().fit(X2, y)

我希望能够制作出类似的东西

reg = reg_1 + reg_2

这样我仍然可以进行标准操作,例如

reg.predict(X3)

有没有一种简单的方法可以做到这一点,显然我可以获得reg_1reg_2 的系数,所以如果我可以使用这些定义reg,它会起作用,但我看不到一种方法这样做。

【问题讨论】:

  • 想知道您想要这样做的动机是什么?
  • X1 和 X2 也包含不同的特征集,还是它们只是具有相同特征的不同数据集?
  • @TobyPetty 很难解释我为什么要这样做,但长话短说它们只是具有相同特征的不同数据集。
  • 好的,请参阅我的答案,了解一种方法。我肯定会建议尝试合并数据集并创建一个模型。
  • 我有点同意托比的观点。话虽如此,如果您真的想尝试做类似reg = reg_1 + reg_2 的事情,您可能只是考虑创建一个集成两者的自定义估算器。 Sklearn Custom Estimator 可能有用

标签: python scikit-learn linear-regression


【解决方案1】:

由于您这样做的原因是“它们只是具有相同特征的不同数据集”,因此我建议您简单地附加数据集并在所有数据上创建一个模型。

但如果由于某种原因无法做到这一点,您可以手动将第三个线性模型的 coef_intercept_ 属性设置为前两个的平均值,例如:

reg = LinearRegression()
reg.coef_ = np.array([np.mean(t) for t in zip(reg_1.coef_, reg_2.coef_)])
reg.intercept_ = np.mean([reg_1.intercept_, reg_2.intercept_])

然后您可以像往常一样使用reg.predict(X3) 方法从两个线性模型项的组合平均值中进行预测。

但这种方法存在危险,例如,如果用于拟合原始模型的数据集之一比另一个大得多,那么较小数据集的截距和系数项在组合模型中将被过度加权,在平均截距和系数项时,您可能需要做一些加权。

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 2015-11-04
    • 2017-07-04
    • 2016-07-12
    • 1970-01-01
    • 2017-05-14
    • 2020-05-31
    • 2023-04-03
    相关资源
    最近更新 更多