推薦システム(最後に) | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

加重平均とは値A、B、Cが存在しそれぞれの個数がx、y、zであったとき

平均値を(Ax+By+Cz)/(A+B+C)で求めるもの

例えば国語のテストで考えると1組が人数30名で平均値が70点

2組が40名で平均値が80点だとすると

(70x30+80x40/(30+40)=75.71となります

 

from recommendation_data import dataset

from math import sqrt
from pearson import pearson_correlation
def user_reommendations(person):
    # 他のユーザーの加重平均によるランキングから推薦を求める
    totals = {}
    simSums = {}
    for other in dataset:
        # 自分自身は比較しない
        if other == person:
            continue
        sim = pearson_correlation(person, other)
        # ゼロ以下のスコアは無視する
        if sim <= 0:
            continue
        for item in dataset[other]:
            # まだ所持していない(食べてないメニュー)アイテムのスコア
            if item not in dataset[person] or dataset[person][item] == 0:
                # Similrity * スコア
                totals.setdefault(item, 0)
                totals[item] += dataset[other][item] * sim
                # 類似度の和
                simSums.setdefault(item, 0)
                simSums[item] += sim
        # 正規化されたリストを作成
    rankings = [(total / simSums[item], item)
                for item, total in list(totals.items())]
    rankings.sort()
    rankings.reverse()
    # 推薦アイテムを返す
    recommendataions_list = [
        recommend_item for score, recommend_item in rankings]
    return recommendataions_list
print("伊藤さんにおすすめのメニュー",
      user_reommendations('伊藤'))
伊藤さんにおすすめのメニュー ['かつ丼', '牛丼']