我使用以下方法训练了逻辑模型,来自乳腺癌数据并且只使用一个特征'mean_area'
from statsmodels.formula.api import logit
logistic_model = logit('target ~ mean_area',breast)
result = logistic_model.fit()
训练有素的模型中有内置的预测方法。然而,这给出了所有训练样本的预测值。如下
predictions = result.predict()
假设我想要一个新值的预测说30我如何使用训练过的模型来输出值? (而不是阅读系数和手动计算)
答案 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)