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.ridge 中的统计汇总表?
numpy.linalg.lstsq 和 sklearn.linear_model.LinearRegression 的区别