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

  统计/机器学习 监督式学习 模型验证 Python    浏览次数:10529        分享
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)


SofaSofa数据科学社区DS面试题库 DS面经

宽宽   2018-02-13 12:39

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


  相关讨论

sklearn.metrics.auc里提到的梯形法则是什么意思?

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

为什么负样本的auc会和正样本的auc不一样呢?

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

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

roc auc小于0.5是什么情况?

为什么非平衡的数据更适合用精度-召回曲线,而不是roc auc?

roc space是什么意思?

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

问一下roc和logistic回归有啥联系区别

  随便看看

线性回归需要满足哪些基本前提假设

软聚类,硬聚类?

pandas DataFrame中经常出现SettingWithCopyWarning

Python的Jupyter Notebook环境下怎么制作一个动态显示的进度条?

xgboost怎么调参?