我正在使用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],它再次清楚地表明最少滞后的数据放在返回列表的末尾而不是开头。

最佳答案

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

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

如果您愿意,可以将其更改为X[:, i-1] = aux

关于python - sklearn.linear_model LinearRegression模块的系数如何返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52722912/

10-10 19:47