对于多类情况,如何使用scikit learning绘制ROC曲线?

约翰·杜

我想为自己的数据集绘制多类案例的ROC曲线。文档中,我读到标签必须是二进制的(从1到5,我有5个标签),因此我遵循了文档中提供的示例:

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier



from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
tfidf_vect= TfidfVectorizer(use_idf=True, smooth_idf=True, sublinear_tf=False, ngram_range=(2,2))
from sklearn.cross_validation import train_test_split, cross_val_score

import pandas as pd

df = pd.read_csv('path/file.csv',
                     header=0, sep=',', names=['id', 'content', 'label'])


X = tfidf_vect.fit_transform(df['content'].values)
y = df['label'].values




# Binarize the output
y = label_binarize(y, classes=[1,2,3,4,5])
n_classes = y.shape[1]

# Add noisy features to make the problem harder
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]

# shuffle and split training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33
                                                    ,random_state=0)

# Learn to predict each class against the other
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
                                 random_state=random_state))
y_score = classifier.fit(X_train, y_train).decision_function(X_test)

# Compute ROC curve and ROC area for each class
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
    fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
    roc_auc[i] = auc(fpr[i], tpr[i])

# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

# Plot of a ROC curve for a specific class
plt.figure()
plt.plot(fpr[2], tpr[2], label='ROC curve (area = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

# Plot ROC curve
plt.figure()
plt.plot(fpr["micro"], tpr["micro"],
         label='micro-average ROC curve (area = {0:0.2f})'
               ''.format(roc_auc["micro"]))
for i in range(n_classes):
    plt.plot(fpr[i], tpr[i], label='ROC curve of class {0} (area = {1:0.2f})'
                                   ''.format(i, roc_auc[i]))

plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Some extension of Receiver operating characteristic to multi-class')
plt.legend(loc="lower right")
plt.show()

问题在于这种方法永远不会完成。关于如何为此数据集绘制此ROC曲线的任何想法吗?

伊兰·约格夫(Eran Yogev)

该版本永远不会完成,因为此行:

classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True, random_state=random_state))

svm分类器需要花费很长时间才能完成,请使用其他分类器(例如AdaBoost或您选择的其他分类器):

classifier = OneVsRestClassifier(AdaBoostClassifier())

记住要添加一个导入:

from sklearn.ensemble import AdaBoostClassifier

删除此代码,它是无用的:

# Add noisy features to make the problem harder
random_state = np.random.RandomState(0)
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]

相反,只需添加:

random_state = 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用matplotlib / python绘制ROC曲线

来自分类Dev

如何使用matplotlib / python绘制ROC曲线

来自分类Dev

如何使用 AUC 绘制 ROC 曲线?

来自分类Dev

在scikit中绘制ROC曲线仅产生3个点

来自分类Dev

如何绘制TrainCascadeObjectDetector生成的检测器的ROC曲线?

来自分类Dev

如何从给定值绘制rStudios中的ROC曲线?

来自分类Dev

如何为以下代码段绘制ROC曲线?

来自分类Dev

如何使用scikit-learn绘制二进制值的ROC曲线?

来自分类Dev

IndexError:使用scikit-learn绘制ROC曲线时数组的索引过多?

来自分类Dev

如何获得ROC曲线?

来自分类Dev

如何获得绘制遗传算法分类器的ROC曲线的分数?

来自分类Dev

如何在pROC中以置信区间绘制多个roc曲线?

来自分类Dev

在R中编写函数以使用pROC绘制ROC曲线

来自分类Dev

如何使用r中的ROCR软件包绘制ROC曲线*仅带有分类列联表*

来自分类Dev

如何使用Keras神经网络分类器在KFold交叉验证中绘制每个折叠的ROC_AUC曲线

来自分类Dev

绘制最近质心的 ROC 曲线

来自分类Dev

从scikit-learn(sklearn)中的多类数据计算AUC和ROC曲线?

来自分类Dev

使用 ImageDataGenerator 时如何生成 ROC 曲线

来自分类Dev

使用DrawingContext绘制曲线

来自分类Dev

Matlab的ROC曲线3类分类

来自分类Dev

如何使用div绘制曲线?

来自分类Dev

无法使用 R 中的 pROC 库获得正确的多类 ROC 曲线

来自分类Dev

React Native 如何绘制曲线

来自分类Dev

使用画布绘制对角曲线

来自分类Dev

使用Python绘制蝴蝶曲线

来自分类Dev

使用Matlab正确绘制曲线?

来自分类Dev

尝试为多类分类绘制 ROC 时出错

来自分类Dev

如何使用GridSearchCV的结果绘制验证曲线?

来自分类Dev

如何使用Android图形绘制无缝曲线?

Related 相关文章

  1. 1

    如何使用matplotlib / python绘制ROC曲线

  2. 2

    如何使用matplotlib / python绘制ROC曲线

  3. 3

    如何使用 AUC 绘制 ROC 曲线?

  4. 4

    在scikit中绘制ROC曲线仅产生3个点

  5. 5

    如何绘制TrainCascadeObjectDetector生成的检测器的ROC曲线?

  6. 6

    如何从给定值绘制rStudios中的ROC曲线?

  7. 7

    如何为以下代码段绘制ROC曲线?

  8. 8

    如何使用scikit-learn绘制二进制值的ROC曲线?

  9. 9

    IndexError:使用scikit-learn绘制ROC曲线时数组的索引过多?

  10. 10

    如何获得ROC曲线?

  11. 11

    如何获得绘制遗传算法分类器的ROC曲线的分数?

  12. 12

    如何在pROC中以置信区间绘制多个roc曲线?

  13. 13

    在R中编写函数以使用pROC绘制ROC曲线

  14. 14

    如何使用r中的ROCR软件包绘制ROC曲线*仅带有分类列联表*

  15. 15

    如何使用Keras神经网络分类器在KFold交叉验证中绘制每个折叠的ROC_AUC曲线

  16. 16

    绘制最近质心的 ROC 曲线

  17. 17

    从scikit-learn(sklearn)中的多类数据计算AUC和ROC曲线?

  18. 18

    使用 ImageDataGenerator 时如何生成 ROC 曲线

  19. 19

    使用DrawingContext绘制曲线

  20. 20

    Matlab的ROC曲线3类分类

  21. 21

    如何使用div绘制曲线?

  22. 22

    无法使用 R 中的 pROC 库获得正确的多类 ROC 曲线

  23. 23

    React Native 如何绘制曲线

  24. 24

    使用画布绘制对角曲线

  25. 25

    使用Python绘制蝴蝶曲线

  26. 26

    使用Matlab正确绘制曲线?

  27. 27

    尝试为多类分类绘制 ROC 时出错

  28. 28

    如何使用GridSearchCV的结果绘制验证曲线?

  29. 29

    如何使用Android图形绘制无缝曲线?

热门标签

归档