Pythonでクラスタリングする分類器を実装して、ラベルと分類結果を比較して分類性能出したいな〜と思った時に見つけて使った関数を備忘録として書いておきます。
sklearn.metrics.clusterのnormalized_mutual_info_scoreという関数です。
クラスタリングは試行のたびに同じ分類結果でもラベル付の仕方が違ってしまいます。normalized_mutual_info_scoreはそのような差分も吸収して性能評価してくれます。
sklearnはFmeasureやfalse positiveを計算する関数など、性能評価に使える関数も豊富で便利ですね。
以下の例だとscoreは1.0、つまり100%になります。
付けられたラベルは違いますが、クラスタリングした結果の分布はラベルと同じためです。
from sklearn.metrics.cluster import normalized_mutual_info_score
predict_result = [1, 1, 2, 2, 0, 0]
labels = [0, 0, 1, 1, 2, 2]
score = normalized_mutual_info_score(predict_result, labels)
print(score) # 1.0