如何使用statsmodels.formula.api logit进行预测。

3

我有以下问题。我想使用 statsmodels.formula.api 中的 logit 进行样本内预测。

请看我的代码:

import statsmodels.formula.api as smf

model_logit = smf.logit(formula="dep ~ var1 + var2 + var3", data=model_data)

到目前为止一切都很好。但是我想使用我的模型进行样本内预测:

yhat5 = model5_logit.predict(params=["dep", "var1", "var2", "var3"])

出现错误:ValueError: 数据类型必须提供一个itemsize

当我尝试执行以下操作时:

yhat5 = model5_logit.predict(params="dep ~ var1 + var2 + var3")

我又遇到了一个错误:numpy.core._exceptions._UFuncNoLoopError: ufunc 'multiply' 没有包含与类型匹配的签名的循环 (dtype('<U32'), dtype('<U69')) -> None

如何使用 statsmodels.formula.api 进行 Logit 模型的样本内预测?

这个对我没有帮助:如何使用 statsmodels.formula.api(python)预测新值


很难在没有您的数据的情况下进行复制,但可能是因为您的数据包含不兼容的不同类型 (dtype('<U32'), dtype('<U69')),请尝试转换变量的类型。 - DNy
你的代码中的model_data是什么?为什么要使用model5_logit而不是model_logit?如果它们是变量,请提供值。 - user16802669
1个回答

1
使用一个示例数据集:
import statsmodels.formula.api as smf
import pandas as pd
import numpy as np
from sklearn.datasets import make_classification

X,y = make_classification(n_features=3,n_informative=2,n_redundant=1)
model_data = pd.DataFrame(X,columns = ['var1','var2','var3'])
model_data['dep'] = y

适配模型(我在你的代码中没有看到):

import statsmodels.formula.api as smf
model_logit = smf.logit(formula="dep ~ var1 + var2 + var3", data=model_data)
res = model_logit.fit()

您可以获得样本内预测(以概率形式)和预测标签:
in_sample = pd.DataFrame({'prob':res.predict()})
in_sample['pred_label'] = (in_sample['prob']>0.5).astype(int)

in_sample.head()
 
       prob  pred_label
0  0.005401           0
1  0.911056           1
2  0.990406           1
3  0.412332           0
4  0.983642           1

我们需要与实际标签进行比对:

pd.crosstab(in_sample['pred_label'],model_data['dep'])
 
dep          0   1
pred_label        
0           46   2
1            4  48

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接