クラスタリングの性能評価でよくAdjusted Rand Index (ARI) が使われます. 僕もよく使っていますが,お恥ずかしながらよく知らずに使っていました. というのも,Rand Index (RI) は理解できるのですが,ARIのAdjustedの意味がよくわかりませんでした. というわけで,勉強してみました.

まず,クラスタリングは,サンプル個の互いに素なグループに分けることを目的とします. この記事では,真のクラスタリング結果と,クラスタリングアルゴリズムの結果が似ているかどうかを測ることを目的とします. なお,ここでは,クラスタリングの結果をクラスタラベルで表現することにします.

さて,に対する, 真のクラスタラベルを, クラスタリングアルゴリズムによるクラスタラベルをとします. クラスタリングの結果は,分類のようにラベルで考えるのではなく,ラベルのペアで考えます. つまり,「このサンプルとこのサンプルは同じクラスタに属するか否か」で性能を評価します. というわけで,を以下のように表現し直します.

ただし,. さて,ここで,Rand Indexの定義を見てみます. 正規化されていないRand Indexは次式で定義されます(自己流です).

ただし,は指示関数で,です. この式は, の数を表しており,二つのクラスタリングがどのくらい似ているかを表しています.

よくRIの欠点として,「二つのクラスタリングに相関がなくても,高い値をとってしまう」という説明がなされます. これの意味は,「適当(ランダム)にクラスタリングしても高い値をとってしまう」ということだと思います. となる内の要素数が,となる要素数に比べて圧倒的に多いので, 例えば「全てを異なるクラスタに分ける」というクラスタリングを行うと,となり,RIの値が高くなってしまいます. これは,分類問題において,クラスバランスが偏った状態で精度を使うのが適切ではない理由に似ています.

このような問題を解決しようと提案されたのがARIです. ARIでは,適当に行われたであろうクラスタリングにペナルティを与えます. どのようなペナルティが適切でしょうか? ARIでは,ペナルティ=「適当にクラスタリングした時のRIの値」と考えます. 以下このペナルティを求めていきます.

まず,二つのデータがぞれぞれ独立に同一の分布から生成されたと仮定します:

はそれぞれ確率変数の従う分布に対応する確率密度関数を表します. まず,上で定義したペナルティ中の「適当にクラスタリングした時」というのを,「が独立な時」と定義します. そうすると,求めるペナルティは「が独立な時のRIの値」となり,具体的になりました. そのようなペナルティは,以下で求められます.

最後の変形はの独立性を使いました. は未知なので,データから推定してやらねばなりません. ここでは,以下のように,最尤推定で求めることにしましょう.

無事上で定義したペナルティをもとめることができました. RIから求めたペナルティを引けば,ARIの完成になります:

通常,RIは以下のように,0から1の値をとるように正規化して使われます.

なので,正規化したARIは以下のようになります.

Wikipediaの定義式なんかと一致するのを示したほうが良かったですね…. 時間があれば追記しておきます. なお,具体例は以下のページが参考になります.