分類器の 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)
最終的には、平均 AUC、精度などを取得するために、結果を K で割りました。このコードは正常に動作しています。ただし、マルチクラスでは同じ計算はできません。
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)
マルチクラスの場合、平均のために「加重」パラメータを追加する必要があることがわかりました。
roc += roc_auc_score(test_class, predictions_proba[:,1], average="weighted")
エラーが発生しました: ValueError("{0} 形式はサポートされていません".format(y_type)) が発生します
ValueError: マルチクラス形式はサポートされていません
ベストアンサー1
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
ただし、マルチクラス モデルのパフォーマンスを評価するために使用されるのが一般的です。