tanimoto係数(Jaccard係数の拡張)

参考ページ

404 Not Found こちらに数式が記載されている.

2008-11-18 - 初学者の箸置 PythonとRのプログラムを参考.

数式

T(A,B)=\frac{\sum(x_{Ak}*x_{Bk})}{\sum x^2_{Ak} + \sum x^2_{Bk} - \sum (x_{Ak}*x_{Bk})}

Pythonプログラムの実行結果

>>> tanimoto([1.0, 0.0, 0.0, 1.0], [1.0, 0.0, 1.0, 1.0])
0.66666666666666663
>>> tanimoto([3.0, 2.0, 2.0, 0.0], [2.0, 1.0, 0.0, 1.0])
0.53333333333333333

1番目の結果は通常のJaccard係数を用いても求めることができる値.
2番目の結果は「A{a=3,b=2,c=2}とB{a=2,b=1,d=1}の間の類似度」を算出.
つまりA={a,a,a,b,b,c,c}とB={a,a,b,d}の間の類似度.

これを使えばユーザ間の類似度をタグを使って求めることができそう.