なんじゃくにっき

プログラミングの話題中心。

集合知 in Scala (2) Jaccard係数、Tanimoto係数、マンハッタン距離、ユークリッド距離、ピアソン相関係数

だいぶ間が空いたけどオライリーの「集合知プログラミング」をScalaで書いていきます。
前回はユークリッド距離だけやったけど、今回は2つのベクトル間の距離を表す係数をいくつか取り上げます。
 
そういや他にも「集合知プログラミング」をScalaで書いている方を見つけました。
http://d.hatena.ne.jp/plasticscafe/20110105/1294199932
 
 
めんどくさいのでそれぞれの係数(距離)の説明はWikipediaに譲ります。
 
■Jaccard係数
http://en.wikipedia.org/wiki/Jaccard_index
要素が真偽値からなるベクトル同士の比較に使う。
 
■Tanimoto係数
http://en.wikipedia.org/wiki/Jaccard_index
Wikipediaの記事内ではJaccard係数のページ内で紹介されている。
元々のJaccard係数が真偽値しか扱えなかったのを、非負の実数に拡張したもの(?)
人によって説明が若干食い違ってたりするので正しい定義がよくわからない・・
オライリーの本の巻末付録のTanimoto係数の説明はJaccard係数のものみたい(?)
 
ここでは2つのベクトルa、bがあったとき、
a・b / (a・a + b・b - a・b)
として扱う。
 
■マンハッタン距離
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%B3%E3%83%8F%E3%83%83%E3%82%BF%E3%83%B3%E8%B7%9D%E9%9B%A2
2つのベクトルの各要素の差分を合計したもの
 
ユークリッド距離
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%83%E3%83%89%E8%B7%9D%E9%9B%A2
2つのベクトルの各要素の差分の2乗を合計したもの(の平方根
最後に平方根を取って使う場合とそうでない場合とある(?)
 
■ピアソン相関係数
http://ja.wikipedia.org/wiki/%E7%9B%B8%E9%96%A2%E4%BF%82%E6%95%B0