我想使用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
答案 0 :(得分:1)
这些度量中的大多数是拟合优度,它被内置到模型/结果类中,并且仅可用于训练数据或估计样本。 对于样本外的,预测准确性的度量,其中许多度量没有很好地定义,或者我从未见过适合这种情况的定义。
具体来说,loglike
是模型的一种方法,只能在附加的训练样本上进行评估。
相关问题:
https://github.com/statsmodels/statsmodels/issues/2572 https://github.com/statsmodels/statsmodels/issues/1282
有可能部分地解决statsmodels的当前限制,但目前尚不支持这些限制和单元测试。