You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:52:28