如何使用statsmodels.formula.api(python)预测新值
我根据乳腺癌数据,仅使用一个特征“平均面积”来训练逻辑模型如何使用statsmodels.formula.api(python)预测新值,python,machine-learning,scikit-learn,logistic-regression,statsmodels,Python,Machine Learning,Scikit Learn,Logistic Regression,Statsmodels,我根据乳腺癌数据,仅使用一个特征“平均面积”来训练逻辑模型 from statsmodels.formula.api import logit logistic_model = logit('target ~ mean_area',breast) result = logistic_model.fit() 训练后的模型中有一个内置的预测方法。然而,这给出了所有训练样本的预测值。如下 predictions = result.predict() 假设我想要预测一个新的值,比如说30,我如何使用
from statsmodels.formula.api import logit
logistic_model = logit('target ~ mean_area',breast)
result = logistic_model.fit()
训练后的模型中有一个内置的预测方法。然而,这给出了所有训练样本的预测值。如下
predictions = result.predict()
假设我想要预测一个新的值,比如说30,我如何使用经过训练的模型来输出这个值?(而不是读取系数并手动计算)您可以为
.predict()
模型提供新值,如本文档中针对单个观察的输出11所示。您可以提供多个观察值作为2d数组
,例如数据帧
-
由于您使用的是公式API,因此您的输入需要采用pd.DataFrame
的形式,以便列引用可用。在您的例子中,可以使用类似于.predict(pd.DataFrame({'mean_area':[1,2,3]})的东西
statsmodels
.predict()
仅在未提供替代方案时将用于拟合的观测值作为默认值使用。我难以使用新的数据帧预测值。
import statsmodels.formula.api as smf
model = smf.ols('y ~ x', data=df).fit()
# Predict for a list of observations, list length can be 1 to many..**
prediction = model.get_prediction(exog=dict(x=[5,10,25]))
prediction.summary_frame(alpha=0.05)
所以我在原始数据集拟合后添加了要预测的数据
y = data['price']
x1 = data[['size', 'year']]
data.columns
#Index(['price', 'size', 'year'], dtype='object')
x=sm.add_constant(x1)
results = sm.OLS(y,x).fit()
results.summary()
## predict on unknown data
data = data.append(pd.DataFrame({'size': [853.0,777], 'year': [2012.0,2013], 'price':[None, None]}))
data.tail()
new_x = data.loc[data.price.isnull(), ['size', 'year']]
results.predict(sm.add_constant(new_x))
谢谢你的回答。我看了一下笔记本,但是在我尝试给出的情况下。predict(30)它抛出了一个错误“'int'对象没有属性'getitem'。你得到这个错误是因为exog
参数必须是类似数组的
,所以你必须使用[30]
。数组有getitem
方法,因为它们可以包含多个项,而不是int
。感谢我的尝试。predict([30])我得到以下错误。“TypeError:列表索引必须是整数,而不是str。”“很抱歉,由于公式api,输入为<代码>数据帧
,请参阅更新的答案。请注意,您只需将字典传递到接受数据帧的任何statsmodel的api中-无需不必要地创建数据帧。以下示例笔记本在最后一步中显示了这一点: