07-01 推荐系统经常使用度量指标

[TOC] 更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:<a target="_blank" href="https://www.cnblogs.com/nickchen121/p/11686958.html">http://www.javashuo.com/article/p-vozphyqp-cm.html</a>html

推荐系统经常使用评估指标

1、RMSE

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

$$ \text{RMSE}=\sqrt\frac{\sum_{u,i\in{T}}(r_{ui}-\hat{r_{ui}})^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))

2、MAE

若是评分系统是基于整数创建的,对预测结果取整会下降MAE的偏差。数据结构

$$ \text{MAE}=\frac{\sum_{u,i\in{T}}|r_{ui}-\hat{r_{ui}}|}{|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))

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

$$ \text{Precision}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{U}}|R(u)|} $$ 其中$R(u)$是用户在训练集上的行为给用户做出的推荐列表。学习

$$ \text{Recall}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{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)]

4、覆盖率

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

$$ \text{Coverate}=\frac{|\bigcup_{u\in{U}}R(u)|}{I} $$ 其中$R(u)$是推荐系统给每一个用户推荐一个长度为$N$的物品列表。ui

5、信息熵

信息熵能够定义覆盖率。人工智能

$$ H=\sum_{i=1}^np(i)\log{p(i)} $$ 其中$p(i)$是物品$i$的流行度除以全部物品流行度之和。

6、基尼系数

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

$$ G=\frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j) $$ 其中$i_j$是按照物品流行度$p$从小到大排序的物品列表中的第$j$个物品。

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)

7、多样性

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

$$ \text{Diversity}(R(u))=1-\frac{\sum_{i,j\in{R(u)},i\neq{j}}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} $$ 其中$R(u)$为用户$u$的推荐列表,$s(i,j)\in[0,1]$定义了物品$i$和物品$j$之间的类似度。

推荐系统的总体多样性定义为: $$ \text{Diversity}=\frac{1}{|U|}\sum_{u\in{U}}\text{Diversity}(R(u)) $$

8、获取各类评测指标的途径

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

9、长尾分布

$$ f_i(k)=\alpha_ik^{\beta_i} \ f_u(k)=\alpha_uk^{\beta_u} $$ 其中$f_u(k)$表示对$k$个物品产生行为的用户数;$f_i(k)$表示被$k$个用户产生过行为的物品数。

相关文章
相关标签/搜索