推薦系統學習之評測指標


1.處理數據集:將用戶行為數據集按照均勻分布隨機分成M份,挑選一份作為測試集,剩下的M-1份作為訓練集

import random def splitData(data,M,k,seed): test={} train={} random.seed(seed) for user,item in data: if random.randint(0,M)==k: test.append([user.item]) else: train.append([user.item]) return test,train

2.評測指標

①准確率和召回率

對用戶u推薦N個物品(記為R(u)),令用戶u在測試集上喜歡的物品的集合為T(u),召回率和准確率可以用來評測推薦算法的精度,計算公式為

def Recall(train,test,N): hit=0 all=0 for user in train.keys(): Tu=test[user] rank=GetRecommendation(user,N) for item,pui in rank: if item in Tu: hit+=1 all+=len(Tu) return hit/(all*1.0) def Precision(train,test,N): hit=0 all=0 for user in train.keys(): Tu=test[user] rank=GetRecommendation(user,N) for item,pui in rank: if item in Tu: hit+=1 all+=N return hit/(all*1.0)

②覆蓋率覆蓋率反應了推薦算法發掘長尾的能力,覆蓋率越高,說明推薦算法越能將長尾中的物品推薦給用戶,覆蓋率定義為:

其中I表示所有物品的集合,覆蓋率表示最終的推薦列表中包含多大比例的物品,如果所有用戶都被推薦給至少一個用戶,則覆蓋率為100%,計算覆蓋率的算法為:

def Coverage(train,test,N): recommend_items=set() all_items=set() for user in train.keys(): for item in train[user].keys(): all_items.add(item) rank=GetRecommendation(user,N) for item,Pui in rank: recommend_items.add(item) return len(recommend_items)/(len(all_items)*1.0)

③推薦的新穎度,用推薦列表中物品的平均流行度度量推薦結果的新穎都,如果推薦出的物品都很熱門,說明推薦的新穎度較低,否則說明推薦結果比較新穎

def Popularity(train,test,N): item_popularity=dict() for user,items in train.items(): for item in items.keys(): if item not in item_popularity: item_popularity[item]=0 item_popularity[item]+=1 ret=0 n=0 for user in train.keys(): ret+=math.log(1+item_popularity[item]) n+=1 ret/=n*1.0
    return ret

在計算平均流行度時對每個物品發流行度取對數,這是因為武平的流行度分布滿足長尾分布,在取對數后,流行度的平均值更加穩定。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM