zoukankan      html  css  js  c++  java
  • 07-01 推荐系统常用度量指标


    更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

    推荐系统常用评估指标

    一、RMSE

    加大了对预测不准的用户物品评分的惩罚。

    RMSE=u,iT(ruirui^)2|T|RMSE=∑u,i∈T(rui−rui^)2|T|
    # records[i] = [u,i,rui,pui] # rui是用户u对物品i的实际评分,pui是用户u对物品i的预测评分
    
    def rmse(records):
        """计算均方根误差"""
        
        return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records])/len(records))
    

    二、MAE

    如果评分系统是基于整数建立的,对预测结果取整会降低MAE的误差。

    MAE=u,iT|ruirui^||T|MAE=∑u,i∈T|rui−rui^||T|
    # records[i] = [u,i,rui,pui] # rui是用户u对物品i的实际评分,pui是用户u对物品i的预测评分
    
    def mae(records):
        """计算平均绝对误差"""
        
        return math.sqrt(sum([abs(rui-pui) for u,i,rui,pui in records])/len(records))
    

    三、Precision(准确率)&Recall(召回率)

    Precision=uU|R(u)T(u)|uU|R(u)|Precision=∑u∈U|R(u)⋂T(u)|∑u∈U|R(u)|

    其中R(u)R(u) 是用户在训练集上的行为给用户作出的推荐列表。

    Recall=uU|R(u)T(u)|uU|T(u)|Recall=∑u∈U|R(u)⋂T(u)|∑u∈U|T(u)|

    其中T(u)T(u) 是用户在测试集上的行为给用户作出的推荐列表。

    def precision_recall(test, N):
        """
        计算准确率和召回率
        test: 
        N: 推荐列表长度
        """
        hit = 0
        n_recall = 0
        n_precision = 0
    
        for user, item in test.items():
            rank = Recommend(user, N)
            hit += lenn(rank & itmes)
            n_recall += len(items)
            n_precision += N
    
        return [hit/(1.*n_recall), hit/(1.*n_precision)]
    

    四、覆盖率

    覆盖率描述一个推荐系统对物品长尾的发掘能力。

    Coverate=|uUR(u)|ICoverate=|⋃u∈UR(u)|I

    其中R(u)R(u) 是推荐系统给每个用户推荐一个长度为NN 的物品列表。

    五、信息熵

    信息熵可以定义覆盖率。

    H=i=1np(i)logp(i)H=∑i=1np(i)log⁡p(i)

    其中p(i)p(i) 是物品ii 的流行度除以所有物品流行度之和。

    六、基尼系数

    基尼系数可以定义覆盖率。基尼系数也可以查看推荐系统算法是否具有马太效应(流行更流行,不流行更不流行)。

    G=1n1j=1n(2jn1)p(ij)G=1n−1∑j=1n(2j−n−1)p(ij)

    其中ijij 是按照物品流行度pp 从小到大排序的物品列表中的第jj 个物品。

    def gini_index(p):
        """计算基尼系数"""
        j = 1
        n = len(p)
        G = 0
        
        for item, weight in sorted(p.items(), key=itemgetter(1)):
            G += (2*j-n-1)*weight
    
        return G / float(n-1)
    

    七、多样性

    多样性描述了推荐列表中物品两两之间的不相似性。

    Diversity(R(u))=1i,jR(u),ijs(i,j)12|R(u)|(|R(u)|1)Diversity(R(u))=1−∑i,j∈R(u),i≠js(i,j)12|R(u)|(|R(u)|−1)

    其中R(u)R(u) 为用户uu 的推荐列表,s(i,j)[0,1]s(i,j)∈[0,1] 定义了物品ii 和物品jj 之间的相似度。

    推荐系统的整体多样性定义为:

    Diversity=1|U|uUDiversity(R(u))Diversity=1|U|∑u∈UDiversity(R(u))

    八、获取各种评测指标的途径

    -离线实验问卷调差在线实验
    用户满意度 x y o
    预测准确度 y y x
    覆盖率 y y y
    多样性 o y o
    新颖性 o y o
    惊喜度 x y x

    九、长尾分布

    fi(k)=αikβifu(k)=αukβufi(k)=αikβifu(k)=αukβu

    其中fu(k)fu(k) 表示对kk 个物品产生行为的用户数;fi(k)fi(k) 表示被kk 个用户产生过行为的物品数。

  • 相关阅读:
    童鞋,[HttpClient发送文件] 的技术实践请查收
    有关[Http持久连接]的一切,卷给你看
    浅谈MemoryCache的原生插值方式
    HTTP1.1 KeepAlive到底算不算长连接?
    C2 hits the assertion assert(base>is_AddP()) failed: should be addp but is Phi
    C2 EA
    OOM Hook
    C2 Loop predicate
    C2 Build IR
    C2 CCP
  • 原文地址:https://www.cnblogs.com/abdm-989/p/14111701.html
Copyright © 2011-2022 走看看