如何使用statsmodels.formula.api(python)预测新值

时间:2016-08-15 14:35:28

标签: python machine-learning scikit-learn logistic-regression statsmodels

我使用以下方法训练了逻辑模型,来自乳腺癌数据并且只使用一个特征'mean_area'

from statsmodels.formula.api import logit
logistic_model = logit('target ~ mean_area',breast)
result = logistic_model.fit()

训练有素的模型中有内置的预测方法。然而,这给出了所有训练样本的预测值。如下

predictions = result.predict()

假设我想要一个新值的预测说30我如何使用训练过的模型来输出值? (而不是阅读系数和手动计算)

4 个答案:

答案 0 :(得分:2)

您可以为.predict()模型提供新值,如单notebook中输出#11中所示,来自单个观察的文档。您可以2d array提供多个观察结果,例如DataFrame - see docs

由于您使用的是公式API,因此您的输入需要采用pd.DataFrame的形式,以便列引用可用。在您的情况下,您可以使用.predict(pd.DataFrame({'mean_area': [1,2,3]})

之类的内容

statsmodels .predict()仅在未提供替代选项时将用于拟合的观察结果用作默认值。

答案 1 :(得分:1)

将statsmodels.formula.api导入为smf

model = smf.ols('y〜x',data = df).fit()

预测观察值列表,列表长度可以是1到很多。

预测= model.get_prediction(exog = dict(x = [5,10,25]))

prediction.summary_frame(alpha = 0.05)

答案 2 :(得分:0)

我很难使用新的 Pandas 数据框来预测值。 所以我在拟合后将要预测的数据添加到原始数据集

   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))

答案 3 :(得分:0)

这已经得到了回答,但我希望这会有所帮助。

根据文档,第一个参数是“exog”。

<块引用>

exog : array_like,可选 您要预测的值

进一步说,

<块引用>

"如果使用了公式,则 exog 的处理方式与 原始数据。此转换需要拥有对 相同的变量名,可以是一个pandas DataFrame 或一个dict之类的 包含 numpy 数组的对象。

如果没有使用公式,那么提供的exog需要有相同的 作为模型中原始 exog 的列数。无改造 除了将数据转换为 numpy 数组外,其他数据都会被执行。

支持 Pandas 数据框中的行索引,并将其添加到 返回的预测"

from statsmodels.formula.api import logit

logistic_model = logit('target ~ mean_area',breast)
result = logistic_model.fit()

因此,您可以为 exog 参数提供一个 pandas 数据框(例如:df),并且该数据框应包含 mean_area 作为一列。因为“mean_area”是预测变量或自变量。

predictions = logistic_model.predict(exog=df)