推薦算法

各類類似度指標:https://www.cnblogs.com/arachis/p/Similarity.htmlhtml

基於用戶協同過濾orm

def getRecommendations(prefs,person,similarity=sim_pearson):htm

    simSum = {}blog

    totals = {}get

    for other in prefs:it

        if other == person: continueio

        sim = similarity(prefs,person,other)form

        if sim<=0: continuetransform

        for item in prefs[other]:im

            #只對本身未看過的電影進行評價

if item not in prefs[person] or prefs[person][item]==0:

                # Similarity * Score加權評價值

                totals.setdefault(item,0)   #由於下面是+=,因此必須初始化

                totals[item]+=prefs[other][item]*sim

                # Sum of similarities 類似值之和

                simSum.setdefault(item,0)

                simSum[item]+=sim

    rankings = [(totals[item]/simSum[item],item) for item in totals]

    #或者 rankings = [(total/simSum[item],item) for item,total in totals.items()]

    rankings.sort()

    rankings.reverse()

return rankings

def transformPrefs(prefs):

    result = {}

    for person in prefs:

        for item in prefs[person]:

            result.setdefault(item, {})

            # 將物品和人員對調

            result[item][person] = prefs[person][item]

    return result

def calculateSimilarItems(prefs,n=10):

  result={} # 創建字典,以給出與這些物品最爲相近的其餘物品

  itemPrefs=transformPrefs(prefs) # 以物品爲中心對偏好矩陣實施倒置處理

  for item in itemPrefs: # 尋找與item最爲相近的n個物品

    scores=topMatches(itemPrefs,item,n=n,similarity=sim_distance)

    result[item]=scores

  return result

相關文章
相關標籤/搜索