《美团机器学习实践》第1章 问题建模

ROC曲线绘制

建议自己手绘一下ROC曲线,可以有更好的理解。

如何绘制ROC曲线,可参考:

https://blog.csdn.net/xiaohuihui1994/article/details/87987836

AUC和loss公式

西瓜书中AUC和排序loss的公式部分,因自己不太理解,故笔记较为啰嗦

关于公式的理解,参考了:

https://blog.csdn.net/luo3300612/article/details/80367901

NDCG

累计增益(cumulative gain,CG)(只有相关性,无位置)

        将每个推荐结果相关性的分值累加后作为整个推荐列表的得分:

CG @K = \sum_{k=1}^{K}rel_{k}

        rel_{k}表示第k个位置的相关性得分,k表示推荐列表的大小。

        CG 只考虑相关性,没有考虑每个推荐结果处于不同位置对整个结果的影响。

        e.g.  A,B,C 与C,A,B两种排序的CG值是一样的。

折损累计增益(discounted cumulative gain,DCG)(有位置)

        引入了位置因素,希望相关性大的排前面(相关性越大,DCG值越大):

DCG @K = \sum_{k=1}^{K}\frac{rel_{k}}{log_{2}{(k+1)}} = rel_{1} + \sum_{k=2}^{K}\frac{rel_{k}}{log_{2}{(k+1)}}

        工业界中常用公式,但只适合打分分两档的情况:

DCG @K = \sum_{k=1}^{K}\frac{2^{rel_{k}}-1}{log_{2}{(k+1)}}

        当rel_{k}取值为0或1时,以上俩公式等价。

        CG针对不同的推荐列表之间很难进行横向评估,而评估一个推荐系统需要评估各个用户的推荐列表及结果,因此需要对不同用户的推荐列表的评估分数进行归一化。

所以需要用IDCG归一化DCG,得到NDCG。

最佳/理想的折损累计增益(ideal discounted cumulative gain,IDCG)(最佳DCG)

        表示推荐系统某一用户返回的最好的推荐结果列表,即假设返回结果按照相关性排序, 最相关的结果放在最前面, 此序列的DCG为IDCG,DCG的值介于 (0,IDCG] :

IDCG@K = \sum_{k=1}^{|REL|}\frac{2^{rel_k}-1}{log_2{(k+1)}}

        |REL|表示,结果按相关性由大到小排序,即最佳排序结果

 归一化折损累计增益( Normalized discounted cumulative gain,NDCG)

        取值范围(0, 1]

NDCG@K = \frac{DCG@K}{IDCG@K}

例子:

        假设搜索回来的5个结果,其相关性分数分别是 3、2、3、0、1、2

        CG = 3+2+3+0+1+2

        DCG:

krelklog2(k+1)relk /log2(k+1)
131.003.00
221.581.26
332.001.50
402.320.00
512.580.39
622.810.71
sum6.86

        IDCG:

        假如我们实际召回了8个物品,除了上面的6个,还有两个结果,假设第7个相关性为3,第8个相关性为0。那么在理想情况下的相关性分数排序应该是:3、3、3、2、2、1、0、0。计算IDCG@6:

krelklog2(k+1)relk /log2(k+1)
131.003.00
231.581.89
332.001.50
422.320.86
522.580.77
612.810.36
sum8.38

        所以,NDCG@6 = 6.86/8.38 = 81.86%

几个疑问:

        1、DCG的公式问题1

                本文中的公式:

DCG @K = \sum_{k=1}^{K}\frac{rel_{k}}{log_{2}{(k+1)}} = rel_{1} + \sum_{k=2}^{K}\frac{rel_{k}}{log_{2}{(k+1)}}

                还看到过:

                哪个更合理?区别何在?

        2、DCG的公式问题2

        当rel的取值不止0和1时,还能用如下公式吗?   

DCG @K = \sum_{k=1}^{K}\frac{2^{rel_{k}}-1}{log_{2}{(k+1)}}

        看到有些说法是以上公式,只适合打分分两档的情况,但美团这本书里的例子:

虽然relk有三种取值,但使用的仍是上述公式(最后一列)。

若采用如下公式(倒数第二列),得到的IDCG值是不一样的。

DCG @K = \sum_{k=1}^{K}\frac{rel_{k}}{log_{2}{(k+1)}} = rel_{1} + \sum_{k=2}^{K}\frac{rel_{k}}{log_{2}{(k+1)}}

DCGkrelklog2(k+1)relk /log2(k+1)(2relk -1)/log2(k+1)
111.001.001.00
211.580.630.63
322.001.001.50
402.320.000.00
sum2.633.13
IDCGkrelklog2(k+1)relk /log2(k+1)(2relk -1)/log2(k+1)
121.002.003.00
211.580.630.63
312.000.500.50
402.320.000.00
sum3.134.13
percent84.0375.79

NDCG参考了:

https://www.cnblogs.com/by-dream/p/9403984.html

https://blog.csdn.net/qq_40006058/article/details/89432773

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值