【发布时间】:2018-01-20 08:06:34
【问题描述】:
我想用 ROC 曲线评估我的分类模型。我正在努力为交叉验证的数据集计算多类 ROC 曲线。由于交叉验证,训练集和测试集没有划分。 在下面,您可以看到我已经尝试过的代码。
scaler = StandardScaler(with_mean=False)
enc = LabelEncoder()
y = enc.fit_transform(labels)
vec = DictVectorizer()
feat_sel = SelectKBest(mutual_info_classif, k=200)
n_classes = 3
# Pipeline for computing of ROC curves
clf = OneVsRestClassifier(LogisticRegression(solver='newton-cg', multi_class='multinomial'))
clf = clf.label_binarizer_
pipe = Pipeline([('vectorizer', vec),
('scaler', scaler),
('Logreg', clf),
('mutual_info',feat_sel)])
y_pred = model_selection.cross_val_predict(pipe, instances, y, cv=10)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y[:, i], y_pred[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
# Plot of a ROC curve for a specific class
for i in range(n_classes):
plt.figure()
plt.plot(fpr[i], tpr[i], label='ROC curve (area = %0.2f)' % 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('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
我想我可以通过使用属性label_binarizer_ 对 OneVsRestclassifier 进行二值化处理,如下所述:sklearn.multiclass.OneVsRestclassifier。
但是,我收到以下错误:AttributeError: 'OneVsRestClassifier' object has no attribute 'label_binarizer_'。我没有收到此错误,因为文档告诉我这是
此分类器的属性。
当我添加 instances = DataFrame(instances) 和 clf.fit(instances, y) 时,我收到错误:ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
。 Instances 是特征向量字典的列表。我尝试添加instances = np.array(instances),但这给了我这个错误:TypeError: float() argument must be a string or a number, not 'dict'
我做错了什么?
【问题讨论】:
-
你不适合
clf。 -
您的问题是您似乎根本不了解多类 ROC。取出交叉验证并尝试再次计算多类 ROC。提示:你不可能“计算每个类的 ROC 曲线和 ROC 面积”,这根本没有意义。
-
@Calimo 因为我刚刚开始学习计算语言学,所以编程对我来说是新的。我在理解多类 ROC 方面确实有问题。我想既然我想评估一个交叉验证的模型,我需要把交叉验证放到 ROC 曲线的计算中
-
@Bambi 在交叉验证方案中将它们拼凑在一起之前,请确保您单独了解所有部分。否则,就像你意识到的那样,它变得无法理解。
-
@VivekKumar 我不是已经在与
vec = DictVectorizer()合作了吗?
标签: python machine-learning attributes scikit-learn roc