Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用statsmodels.formula.api(python)预测新值_Python_Machine Learning_Scikit Learn_Logistic Regression_Statsmodels - Fatal编程技术网

如何使用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中-无需不必要地创建数据帧。以下示例笔记本在最后一步中显示了这一点: