sklearn.linear_model LinearRegression 模块的系数如何返回

Posted

技术标签:

【中文标题】sklearn.linear_model LinearRegression 模块的系数如何返回【英文标题】:How are the coefficients of sklearn.linear_model LinearRegression module returned 【发布时间】:2019-03-14 08:14:19 【问题描述】:

我正在使用 sklearn.linear_model 和模块 LinearRegression 执行一个简单的自回归模型。你可以在下面看到我的代码。训练数据集位于train 中,X 包含目标的滞后版本。滞后最小的数据,即滞后为 1 的数据,位于 X 的第一列,最后一列包含最大滞后的数据。

import numpy as np
import sklearn.linear_model as skml 
tot_param = 10
X = np.zeros((len(train),tot_param))
for i in range(1,tot_param):
    aux = np.roll(train,-i)
    aux[-i:] = 0
    X[:,-i] = aux

lregr = skml.LinearRegression()
model = lregr.fit(X,train)

因此,我希望model.coef_ 中的系数将根据X 的列进行排序,即第一个元素将包含与最少滞后数据相关的系数。如果我用tot_params=1 执行代码,我只会得到一个值为0.97190325 的系数。但是,如果我选择tot_params=2,我会得到model.coef_=[-0.00433893, 0.97612027];显然,第二个值 (0.97612027) 指的是滞后最少的数据。但这是为什么呢?我希望像model.coef_=[0.97612027, -0.00433893] 这样的输出,前面有最小滞后数据的系数。

tot_params 的其他值也会发生同样的情况。例如,对于tot_params=6,我得到[ 3.71898345e-02, 5.46416689e-02, -8.65343583e-02, -1.88565771e-03, -6.13451823e-04, 9.72547863e-01],这再次清楚地表明滞后最少的数据放在返回列表的末尾,而不是放在返回列表的开头。

【问题讨论】:

【参考方案1】:

就在那儿:X[:,-i] = aux

i越大->滞后越大->离最后一列的距离越大: i=1 是第 -1 列 i=6 是第 -6 列,所以这将是第一个。

如果您更喜欢它,请将其更改为 X[:, i-1] = aux

【讨论】:

如此愚蠢的错误...感谢 Jondiedoop 发现它

以上是关于sklearn.linear_model LinearRegression 模块的系数如何返回的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.linear_model库在哪里下载

sklearn.linear_model.ridge 中的统计汇总表?

numpy.linalg.lstsq 和 sklearn.linear_model.LinearRegression 的区别

ModuleNotFoundError:没有名为“sklearn.linear_model._base”的模块

sklearn.linear_model.LassoCV

sklearn.linear_model.Lasso