集合知プログラミング勉強シリーズ - 普通に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 の累乗をど忘れしていて時間がかかった(笑。