【发布时间】:2020-07-31 23:29:25
【问题描述】:
我有一个分类问题,我有一个 8x8 图像的像素值和图像表示的数字,我的任务是使用 RandomForestClassifier 根据像素值预测数字(“数字”属性)。数值的值可以是0-9。
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
forest_model = RandomForestClassifier(n_estimators=100, random_state=42)
forest_model.fit(train_df[input_var], train_df[target])
test_df['forest_pred'] = forest_model.predict_proba(test_df[input_var])[:,1]
roc_auc_score(test_df['Number'], test_df['forest_pred'], average = 'macro', multi_class="ovr")
这里会抛出一个 AxisError。
回溯(最近一次通话最后): 文件“dap_hazi_4.py”,第 44 行,在 roc_auc_score(test_df['Number'], test_df['forest_pred'], average = 'macro', multi_class="ovo") 文件“/home/balint/.local/lib/python3.6/site-packages/sklearn/metrics/_ranking.py”,第 383 行,在 roc_auc_score 多类,平均,样本权重) _multiclass_roc_auc_score 中的文件“/home/balint/.local/lib/python3.6/site-packages/sklearn/metrics/_ranking.py”,第 440 行 如果不是 np.allclose(1, y_score.sum(axis=1)): 文件“/home/balint/.local/lib/python3.6/site-packages/numpy/core/_methods.py”,第 38 行,在 _sum return umr_sum(a, axis, dtype, out, keepdims, initial, where) AxisError:轴 1 超出维度 1 数组的范围【问题讨论】:
-
我设法解决了我的问题。就是这样,因为我的分类问题是多类的,所以在拟合和计算 auc 分数之前需要对目标列进行二值化。
-
@Bálint Béres 你到底做了什么?
-
我用过这个Calculate sklearn.roc_auc_score for multi-class@mclzc。
-
当使用
sklearn.model_selection.cross_validate和类似的并出现此错误时,您只需在make_scorer(roc_auc_score, multi_class='ovo', needs_proba=True)中设置needs_proba=True
标签: python-3.x scikit-learn multiclass-classification