スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

rubyでレコメンデーション2

アイテムの距離を先に計算しておくのと、ユーザからアイテムを推薦する関数を作り忘れていたので、追加します。
で、デリシャスで自分へのおすすめを出してみたら、何もでませんでした。じーとソースを見ていたらgetRecommendedItemsで持っていとスルーするプログラムになっていて、持っていても0点じゃなかったらスルーするように修正しました。これって、本のバグ?


# アイテムのスコアを計算する
def calculateSimilarItems prefs, n=10
result = Hash.new
itemPrefs = transformPrefs prefs
c = 0
itemPrefs.each_key do |item|
c += 1
if 0 == c%100
puts "#{c} / #{itemPrefs.size}"
end
scores = topMatches itemPrefs, item, n, :simDistance
result[item] = scores
end
return result
end

# アイテムの推薦を取得する
def getRecommendedItems(prefs, itemMatch, user)
userRatings = prefs[user]
scores = Hash.new(0.0)
totalSim = Hash.new(0.0)
userRatings.each do |item, rating|
itemMatch[item].each do |similarity, item2|
if userRatings.key?(item2) && 0.0 != userRatings[item2]
next
end
scores[item2] += similarity * rating
totalSim[item2] += similarity
end
end

rankings = []
scores.each do |item, score|
rankings << [score / totalSim[item], item]
end

return rankings.sort.reverse
end
スポンサーサイト

Tag : 集合知プログラミング

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。