我想为我的分类器计算AUC,精度,准确性。
我正在做监督学习:
这是我的工作代码。
对于二进制类,此代码工作正常,但对于多类而言,此代码却不能正常工作。
请假设您有一个带有二进制类的数据框:
sample_features_dataframe = self._get_sample_features_dataframe()
labeled_sample_features_dataframe = retrieve_labeled_sample_dataframe(sample_features_dataframe)
labeled_sample_features_dataframe, binary_class_series, multi_class_series = self._prepare_dataframe_for_learning(labeled_sample_features_dataframe)
k = 10
k_folds = StratifiedKFold(binary_class_series, k)
for train_indexes, test_indexes in k_folds:
train_set_dataframe = labeled_sample_features_dataframe.loc[train_indexes.tolist()]
test_set_dataframe = labeled_sample_features_dataframe.loc[test_indexes.tolist()]
train_class = binary_class_series[train_indexes]
test_class = binary_class_series[test_indexes]
selected_classifier = RandomForestClassifier(n_estimators=100)
selected_classifier.fit(train_set_dataframe, train_class)
predictions = selected_classifier.predict(test_set_dataframe)
predictions_proba = selected_classifier.predict_proba(test_set_dataframe)
roc += roc_auc_score(test_class, predictions_proba[:,1])
accuracy += accuracy_score(test_class, predictions)
recall += recall_score(test_class, predictions)
precision += precision_score(test_class, predictions)
最后,我将结果除以K当然是为了获得平均AUC,精度等。
这段代码工作正常。
但是,我不能为多类计算相同的值:
train_class = multi_class_series[train_indexes]
test_class = multi_class_series[test_indexes]
selected_classifier = RandomForestClassifier(n_estimators=100)
selected_classifier.fit(train_set_dataframe, train_class)
predictions = selected_classifier.predict(test_set_dataframe)
predictions_proba = selected_classifier.predict_proba(test_set_dataframe)
我发现对于多类,我必须为平均添加参数“weighted”。
roc += roc_auc_score(test_class, predictions_proba[:,1], average="weighted")
我遇到一个错误:引发ValueError(“不支持{0}格式” .format(y_type))
ValueError:不支持多类格式
最佳答案
您不能将roc_auc
用作多类模型的单个汇总指标。如果需要,可以按类计算roc_auc
roc = {label: [] for label in multi_class_series.unique()}
for label in multi_class_series.unique():
selected_classifier.fit(train_set_dataframe, train_class == label)
predictions_proba = selected_classifier.predict_proba(test_set_dataframe)
roc[label] += roc_auc_score(test_class, predictions_proba[:,1])
但是,更常见的是使用
sklearn.metrics.confusion_matrix
评估多类模型的性能。