我正在尝试使用 statsmodels 进行有序逻辑回归分析。但是,我得到的预测与使用 SciKit-Learn 时得到的预测大不相同
LogisticRegression
.
我正在使用类似于以下的数据集。目的是根据
quality
和1-10
的组合来预测chlorides
(在sulphates
的尺度上)。
氯化物 | 硫酸盐 | 品质 |
---|---|---|
0.076 | 0.56 | 5 |
0.098 | 0.68 | 5 |
0.092 | 0.65 | 5 |
0.075 | 0.58 | 6 |
0.076 | 0.56 | 5 |
... | ... | ... |
我使用的代码:
import numpy as np
from sklearn import metrics
from sklearn.model_selection import train_test_split
from statsmodels.miscmodels.ordinal_model import OrderedModel
y = df['quality']
X = df[['chlorides', 'sulphates']]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=20)
mod_probe = OrderedModel(y_train, X_train, distr='logit')
res_log = mod_probe.fit(method='bgfs')
predicted = res_log.model.predict(res_log.params, np.array(X_test)[:, None])
predicted
样本:
array([[[0.00394536, 0.02194635, 0.32950146, 0.47302334, 0.15847723,
0.01310626]],
[[0.01405662, 0.07326043, 0.57761266, 0.2806573 , 0.05073693,
0.00367607]],
[[0.02683372, 0.12930636, 0.63716285, 0.17780338, 0.02698959,
0.0019041 ]],
...,
当我做
metrics.accuracy_score(y_test, predicted)
我得到错误
ValueError: Classification metrics can't handle a mix of multiclass and unknown targets
我已经对此进行了很多小时的搜索,但似乎无法破解它。任何帮助将不胜感激。非常感谢。
分类指标需要输入有限的类别,例如,如果类别范围是 [0,2],那么它需要像 0,1,2 这样的值,但在你的情况下你给出 0.001,0.5 等。logits 输出连续值但分类指标需要离散值。要修复此问题,请在执行预测的行之后添加
predicted = list(map(round, predicted ))
,这应该会修复它。