如何在OLS模型中快速获取预测值?解决statsmodels公式API构建模型时predict方法传入列表报错的问题
为什么直接传列表会报错?
当你用sm.ols(formula="price ~ size + year", data=df_c).fit()创建模型时,statsmodels依赖patsy库处理公式语法。patsy需要明确知道每个输入值对应的变量名称,而直接传一个普通列表[25,1990]没有任何变量名信息,它没法判断哪个值对应size、哪个对应year,所以抛出PatsyError。
正确的预测方法
你需要传入一个包含匹配变量名的结构,最常用的是pandas.DataFrame,或者直接传字典(statsmodels会自动转换)。以下是几种简单的实现方式:
方法1:用DataFrame传入单条数据
这是最清晰不易出错的方式:
import pandas as pd # 创建包含变量名的DataFrame new_data = pd.DataFrame({'size': [25], 'year': [1990]}) # 获取预测值 prediction = model.predict(new_data) # 提取具体数值(默认返回Series,取第一个元素) print(prediction.iloc[0])
方法2:直接传字典(更简洁)
statsmodels的predict方法支持直接传入字典,键为变量名,值为对应的数据:
prediction = model.predict({'size': 25, 'year': 1990}) print(prediction.iloc[0])
方法3:批量预测多条数据
如果需要预测多个样本,只需在DataFrame中添加更多行即可:
new_data = pd.DataFrame({ 'size': [25, 30, 35], 'year': [1990, 1995, 2000] }) predictions = model.predict(new_data) # 返回的是Series,每条对应一个预测值 print(predictions)
总结
公式API创建的模型必须关联变量名来预测,所以不能直接传无标签的列表。用DataFrame或字典明确变量与值的对应关系,就能顺利获取预测值了。
内容的提问来源于stack exchange,提问作者TroyMcClure8998
相关产品推荐
相关产品推荐

