如何在 statsModels 中获取测试数据的调整后 R 方?
How do you get the adjusted R-squared for the test data in statsModels?
我有一个像
这样的数据集
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)
形状匹配,但关于“昏暗”我不明白这一点。但我想我已经和 link 中的示例一样匹配了,所以我只是不确定发生了什么。
您应该首先 运行 .fit()
方法并保存返回的对象,然后 运行 该对象的 .predict()
方法。
results = model.fit()
运行 results.params
将产生这个 pandas 系列:
Intercept -0.875
b 0.375
dtype: float64
然后,运行ning results.predict(test.b)
将产生这个系列:
0 3.625
1 4.375
2 3.250
3 4.750
dtype: float64
您还可以通过调用结果的各个属性来检索模型拟合汇总值 class (https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLSResults.html):
>>> results.rsquared_adj
0.08928571428571419
但这些将用于 full/train 模型,所以是的,您可能需要根据测试预测和真实值手动计算 SSR/SST/SSE 值,并从中获取调整后的 R 平方那。
我有一个像
这样的数据集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)
形状匹配,但关于“昏暗”我不明白这一点。但我想我已经和 link 中的示例一样匹配了,所以我只是不确定发生了什么。
您应该首先 运行 .fit()
方法并保存返回的对象,然后 运行 该对象的 .predict()
方法。
results = model.fit()
运行 results.params
将产生这个 pandas 系列:
Intercept -0.875
b 0.375
dtype: float64
然后,运行ning results.predict(test.b)
将产生这个系列:
0 3.625
1 4.375
2 3.250
3 4.750
dtype: float64
您还可以通过调用结果的各个属性来检索模型拟合汇总值 class (https://www.statsmodels.org/stable/generated/statsmodels.regression.linear_model.OLSResults.html):
>>> results.rsquared_adj
0.08928571428571419
但这些将用于 full/train 模型,所以是的,您可能需要根据测试预测和真实值手动计算 SSR/SST/SSE 值,并从中获取调整后的 R 平方那。