在测试集上使用statsmodels OLS

时间:2019-04-17 16:41:36

标签: python scikit-learn regression

我想使用Scikit Learn的一种技术,即ShuffleSplit,通过一系列随机测试和训练集对我的线性回归模型进行基准测试。这已经很好地建立了,并且对于Scikit中的LinearModel都非常有用。

from sklearn.linear_model import LinearRegression
LM = LinearRegression()
train_score = LM.score(X[train_index], Y[train_index])
test_score = LM.score(X[test_index], Y[test_index])

这里得到的分数只是R²值,仅此而已。使用statsmodel OLS实施线性模型可以得到非常丰富的分数集,其中包括调整后的R²和AIC,BIC等。但是,此处只能将模型与训练数据拟合才能获得这些分数。有没有办法也将它们用于测试集?

所以在我的示例中:

from sklearn.model_selection import ShuffleSplit
from statsmodels.regression.linear_model import OLS

ss = ShuffleSplit(n_splits=40, train_size=0.15, random_state=42)
for train_index, test_index in ss.split(X):
    regr = OLS( Y.[train_index], X.[train_index]).fit()
    train_score_AIC = regr.aic

是否可以添加类似内容

    test_score_AIC = regr.test(Y.[test_index], X.[test_index]).aic

1 个答案:

答案 0 :(得分:1)

这些度量中的大多数是拟合优度,它被内置到模型/结果类中,并且仅可用于训练数据或估计样本。 对于样本外的,预测准确性的度量,其中许多度量没有很好地定义,或者我从未见过适合这种情况的定义。

具体来说,loglike是模型的一种方法,只能在附加的训练样本上进行评估。

相关问题:

https://github.com/statsmodels/statsmodels/issues/2572 https://github.com/statsmodels/statsmodels/issues/1282

有可能部分地解决statsmodels的当前限制,但目前尚不支持这些限制和单元测试。