sklearn里计算roc_auc_score,报错ValueError: bad input shape

  统计/机器学习 监督式学习 模型验证 Python    浏览次数: 63
0

用sklearn的DecisionTreeClassifer训练模型,然后用roc_auc_score计算模型的auc。代码如下

clf = DecisionTreeClassifier(criterion='gini', max_depth=6, min_samples_split=10, min_samples_leaf=2)
clf.fit(X_train, y_train)
y_pred = clf.predict_proba(X_test)
roc_auc = roc_auc_score(y_test, y_pred)

报错信息如下

/Users/wgg/anaconda/lib/python2.7/site-packages/sklearn/metrics/ranking.pyc in _binary_clf_curve(y_true, y_score, pos_label, sample_weight)
    297     check_consistent_length(y_true, y_score)
    298     y_true = column_or_1d(y_true)
--> 299     y_score = column_or_1d(y_score)
    300     assert_all_finite(y_true)
    301     assert_all_finite(y_score)

/Users/wgg/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.pyc in column_or_1d(y, warn)
    560         return np.ravel(y)
    561 
--> 562     raise ValueError("bad input shape {0}".format(shape))
    563 
    564 

ValueError: bad input shape (900, 2)

这个是怎么回事?有人遇到过吗?


 

ggg818   2018-02-13 10:46



   1个回答 
2

目测是你的y_pred出了问题,你的y_pred是(900, 2)的array,也就是有两列。

因为predict_proba返回的是两列。predict_proba的用法参考这里

简而言之,你上面的代码改成这样就可以了。

y_pred = clf.predict_proba(X_test)[:, 1]
roc_auc = roc_auc_score(y_test, y_pred)


宽宽   2018-02-13 12:39

果然是predict_proba的输出的问题,太感谢了! - ggg818   2018-02-13 21:56


  相关问题

如何利用python画分类器的ROC曲线?   1回答

怎么直观理解ROC AUC的概率统计意义?   1回答

sklearn.metric.auc函数计算出的结果很奇怪   1回答

sklearn.preprocessing.StandardScaler采用的是哪种标准化的方法?   1回答

精度召回precision recall auc是什么?   1回答

二元分类什么时候用LogLoss、什么时候用ROC AUC?如何选择?   1回答

多元分类的roc auc   1回答

python里什么模块可以计算精度-召回(precision-recall)的AUC?   1回答

R里有没有package可以画ROC,计算AUC的?   2回答

sklearn classification_report里的support是什么意思   1回答

sklearn GridSearchCV中的refit是什么意思   1回答

sklearn cross_val_score怎么同时对多个scoring进行验证   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!