我想为我的分类器计算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评估多类模型的性能。

10-08 03:53