【问题标题】:How do you get the adjusted R-squared for the test data in statsModels?您如何获得 statsModels 中测试数据的调整后 R 平方?
【发布时间】:2021-04-06 15:26:57
【问题描述】:

我有一个类似的数据集

import pandas as pd
import statsmodels.formula.api as smf
import statsmodels.api as sm
data = pd.DataFrame({'a':[4,3,4,6,6,3,2], 'b':[12,14,11,15,14,15,10]}
test = data.iloc[:4]
train = data.iloc[4:]

我为训练数据建立了线性模型

model = smf.ols("a ~ b", data = data)
print(model.fit().summary())

现在我要做的是根据测试数据得到调整后的 R^2 值。有一个简单的命令吗?我一直在尝试从头开始构建它并不断收到错误。

我一直在尝试的:

model.predict(test.b)

但它抱怨形状。基于此:https://www.statsmodels.org/stable/examples/notebooks/generated/predict.html

我尝试了以下

X = sm.add_constant(test.b)
model.predict(X)

现在错误是

ValueError: shapes (200,2) and (200,2) not aligned: 2 (dim 1) != 200 (dim 0)

形状匹配,但是关于“暗淡”,我不明白这一点。但我认为我尽可能匹配链接中的示例,所以我不确定发生了什么。

【问题讨论】:

    标签: python statsmodels


    【解决方案1】:

    您应该首先运行.fit() 方法并保存返回的对象,然后对该对象运行.predict() 方法。

    results = model.fit()
    

    运行results.params 将产生这个熊猫系列:

    Intercept   -0.875
    b            0.375
    dtype: float64
    

    然后,运行results.predict(test.b) 将产生这个系列:

    0    3.625
    1    4.375
    2    3.250
    3    4.750
    dtype: float64
    

    您还可以通过调用结果类 (https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLSResults.html) 的各个属性来检索模型拟合汇总值:

    >>> results.rsquared_adj
    0.08928571428571419
    

    但这些将用于完整/训练模型,所以是的,您可能需要根据您的测试预测和真实值手动计算 SSR/SST/SSE 值,并从中获得调整后的 R 平方。

    【讨论】:

    • 谢谢!我试过了,它不再给出错误。但是,它现在挂在计算中而没有终止。我拥有的实际数据集只有 400 个条目。我仍然只使用一个预测器制作线性模型。所以我认为这应该不会超过几秒钟。但是,如果我让它走一分钟,它仍然不会终止。关于可能导致此问题的任何想法?
    • @Addem,您的意思是它在执行fit() 期间挂起?我个人不知道您的情况的原因,可能是您的数据中的某些内容。至少有一篇关于类似问题的帖子herefit() 方法还有一个 method 参数,您可以更改它。如果这没有帮助,也许可以发布一个单独的问题。
    猜你喜欢
    • 2018-12-17
    • 2018-12-04
    • 2015-10-17
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2013-11-30
    • 2018-08-29
    • 2022-11-11
    相关资源
    最近更新 更多