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

时间:2018-10-09 13:59:54

标签: python scikit-learn linear-regression

我正在使用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 个答案:

答案 0 :(得分:1)

就在这里:X[:,-i] = aux

i->越大,滞后越大->与最后一列的距离越大:
i = 1是列-1
i = 6是-6列,因此它将是第一个列。

反之,将其更改为X[:, i-1] = aux