集合知プログラミング勉強シリーズ - 普通にRubyで。そしてCouchDBで(笑 #2.rb - ユークリッド平方距離
普通に、評価の違いを距離
sqrt( (x1-x2)^2 + (y1-y2)^2 )
で求めてそれを近しい指標にしようよ、という話。1 / (1+(距離の二乗の和)) にしている。
def sim_distance(hash, p1, p2) keys = [] hash[p1].keys.each do |k1| hash[p2].keys.each do |k2| keys << k1 if k1 == k2 end end return 0 if keys.length == 0 se_distance = 0 keys.each do |key| se_distance += ((hash[p1][key] - hash[p2][key]) ** 2) end 1.0 / (1 + se_distance) end
Ruby の累乗をど忘れしていて時間がかかった(笑。