ということで2.10の「1.Tanimoto係数」を定義に従って書いてみる。
二値変数 - 情報論的学習理論と機械学習の「朱鷺の杜Wiki」
学生時代からお世話になってる朱鷺の杜Wikiから見ると「Jaccard係数」が当てはまるみたい。、、それぞれの意味はリンク先参照。
""" tanimoto係数 indicatingな二値変数 ある性質をモツか持たないかを2つの変数の間で ・ある性質を持つ・・・1 ・持たない ・・・0 とした場合、2つの2値変数が両方とも1である場合、両方とも0である場合より 類似していると符号化する → 今回の場合は映画を見たか見ていないか?で2つの変数、つまり 2ユーザ間の距離を測る """ def sim_tanimoto(prefs,p1,p2): a11 = 0 a10 = 0 a01 = 0 for item in prefs[p1]: if item in prefs[p2]: a11+=1 else: a10+=1 for item in prefs[p2]: if item not in pairBit: a01+=1 print "a11 = %d / a10 = %d / a01 = %d" % (a11,a10,a01) sim = float(a11)/(a10+a01+a11) return sim