nonoswitch's diary

気が向いた時に書き込むやつ

jaccard係数

集合知プログラミング読み進め中です。

最初はユークリッド距離とピアソン相関係数のことが書いてあった。で、エクササイズに「Tanimoto係数を調べよ」というものがあったので調べたものを簡単にメモしておく。参考はここ

Tanimoto係数 = Jaccard coefficientのことで、2つの特徴ベクトルの類似度を表す係数だった。


単純にAかつBの要素数だけで比較をしようとしてしまうと、すべて1が立っているような特徴ベクトルが検出されやすくなってしまうためA,Bの片方でも1が立っている要素数で割っている。


分かりやすい例をあげると

A=[0,1,0,0,0,0,1,0]
B=[1,1,1,1,1,1,1,1]
C=[0,1,0,0,0,1,1,0]

の3つの適当な特徴ベクトル(1=とある特徴があることを表す)があったとして、いくつ同じ特徴を持ち合わせているか調べたとする。
AとB,AとCを比較した場合のいずれも2つの特徴が一致するけれども、Bはどのような特徴ベクトルとも一致する要素数は常に最大になってしまう。というわけで、AまたはBの要素数で割るらしい。


jaccard係数は、どのようなシーンで有用性があるのか少し考えてみたけれどもそれぞれの特徴がフラグのような要素だけでなく、範囲のある数値で表される場合にしきい値を定めるなどして得たい特徴を定性的に定めて、ある特定の類似度などをピンポイントで抽出できるのではないかなと思いました。
本を読み進めたら、もう少し考えたいと思います(誰か教えてください!)