在github看到一个开源项目,deepFM,即https://github.com/ChenglongChen/tensorflow-DeepFM。

代码中使用了Normalized Gini Coefficient评价指标。

这篇博客系统介绍了Normalized Gini Coefficient指标。https://blog.csdn.net/u010665216/article/details/78528261

我对文中一些公式和代码做一些补充说明。

1 基尼系数

文中

这里对公式做一下推导:

由基尼系数定义可知

由定积分与极限公式

基尼系数计算时将横纵坐标标准化为0到1

先以计算0到1区间y = x的面积为例。

这里可以知道实际对y的累加计算是,即

计算y = x的面积就是,将0到1分为n段,每段宽为1/n,高为yi,yi = i / n,因此用1/n乘以对y的累计求和来近似积分。

所以基尼系数可以如下计算:

这里除以是因为基尼系数横纵坐标要标准化为0到1。这里gini(x)积分就是B的面积。但是这里我有一个疑问,分子0到1的x的积分为什么不直接用1/2代替。

2 Normalized Gini Coefficient

文中的两个图,用第一个图橙色面积除以第二个图橙色面积,就是 Normalized Gini Coefficient。

但是找到的一些开源实现,却如下:

def gini(actual, pred):assert (len(actual) == len(pred))all = np.asarray(np.c_[actual, pred, np.arange(len(actual))], dtype=np.float) all = all[np.lexsort((all[:, 2], -1 * all[:, 1]))]totalLosses = all[:, 0].sum() giniSum = all[:, 0].cumsum().sum() / totalLosses  giniSum -= (len(actual) + 1) / 2.return giniSum / len(actual)def gini_norm(actual, pred):return gini(actual, pred) / gini(actual, actual)

可以发现,代码中对预测样本是从大到小排序,而文中是从小到大排序。

实际上,Normalized Gini Coefficient还有一(几)种理解方式,即从大到小排列时,下面第一个图橙色面积除以第二个橙色面积:

附上从大到小排列时公式,这里A是橙色加蓝色面积,B是蓝色面积

上述两个方法从小到大排列和从大到小排列,有什么区别吗,我认为几乎没有区别。

验证如下:

import numpy as npdef gini(actual, pred):assert (len(actual) == len(pred))# np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。all = np.asarray(np.c_[actual, pred, np.arange(len(actual))], dtype=np.float)  all = all[np.lexsort((all[:, 2], -1 * all[:, 1]))]totalLosses = all[:, 0].sum()  # 6.0  正样本个数giniSum = all[:, 0].cumsum().sum() / totalLosses  giniSum -= (len(actual) + 1) / 2.return giniSum / len(actual)def gini1(actual, pred):assert (len(actual) == len(pred))# np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等。all = np.asarray(np.c_[actual, pred, np.arange(len(actual))], dtype=np.float)  all = all[np.lexsort((all[:, 2], all[:, 1]))]totalLosses = all[:, 0].sum()  # 6.0  正样本个数giniSum = all[:, 0].cumsum().sum() / totalLosses giniSum = (len(actual) + 1) / 2. - giniSumreturn giniSum / len(actual)def gini_norm(actual, pred):  return gini(actual, pred) / gini(actual, actual)def gini_norm1(actual, pred):  return gini1(actual, pred) / gini1(actual, actual)# 针对main代码的注释
if __name__ == '__main__':predictions = [0.9, 0.3, 0.8, 0.75, 0.65, 0.6, 0.78, 0.7, 0.05, 0.4, 0.4, 0.05, 0.5, 0.1, 0.1]actual = [1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]print(gini_norm(actual, predictions))  # 0.6296296296296299  print(gini_norm1(actual, predictions))  # 0.6296296296296295

3 参考文献&延伸阅读

https://www.kaggle.com/c/porto-seguro-safe-driver-prediction/overview/evaluation

https://blog.csdn.net/u010665216/article/details/78528261

https://www.kaggle.com/batzner/gini-coefficient-an-intuitive-explanation

https://www.kaggle.com/cppttz/gini-coefficient-an-explanation-with-math/

Normalized Gini Coefficient相关推荐

  1. Gini coefficient直观的解释与实现

    引言 大家在机器学习中经常会看到基尼系数的词汇,有时候在做比赛的时候,有些赛题的Scoring Metric就是基尼系数.我们去Google或者Baidu,得到的都是些不甚满意的经济学相关的解释.那么 ...

  2. 基尼系数(Gini coefficient),洛伦茨系数

    20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标.它是根据洛伦茨曲线找出了判断分配平等程度的指标(如下图). 设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际 ...

  3. Gini指数、Gini系数、Gini不纯是一回事吗?

    决策树算法CART中用的是哪一个? 用的是Gini impurity,也就是基尼不纯. Gini impuirty是什么? 假设这个数据集里有kk种不同标签,第ii个标签所占的比重为pipi,那么Gi ...

  4. ROC 曲线/准确率、覆盖率(召回)、命中率、Specificity(负例的覆盖率)

      欢迎关注博主主页,学习python视频资源 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.ht ...

  5. 如何用R做计量经济学

    CRAN任务视图:计量经济学 线形回归模型(Linear regression models) ž   线形模型可用stats包中lm()函数通过OLS来拟合,该包中也有各种检验方法用来比较模型,如: ...

  6. MATLAB计算气象水文要素年内分配指数

    MATLAB计算气象水文要素年内分配指数 降水/径流等水文要素年内分配指标 1 不均匀系数nuniformity coefficient (Cn) 1.1 原理 1.2 MATLAB代码 1.3 案例 ...

  7. 空间计量模型_Stata中的空间计量回归模型应用

    在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量横截面及面板模型的应用,全文分为两部分 ...

  8. Introduction to random forests

    2019独角兽企业重金招聘Python工程师标准>>> 1: Introduction In the past three missions, we learned about de ...

  9. 我怎样才能找到带有Mathematica的Waldo?

    本文翻译自:How do I find Waldo with Mathematica? This was bugging me over the weekend: What is a good way ...

  10. 决策树是如何选择特征和分裂点?

    ©PaperWeekly 原创 · 作者|贲忠奇 单位|便利蜂算法工程师 研究方向|推荐算法.反作弊 缘起 在解决回归和分类问题的时候,一般会使用 Random Forest.GBDT.XGBoost ...

最新文章

  1. python 使用socks 爬虫_python爬虫基础之urllib的使用
  2. css3遮罩层_CSS3鼠标hover图片超酷遮罩层动画特效
  3. 关于 Intel 8253/8254
  4. php获取d盘,软件装c盘和d盘的区别
  5. 虚拟机拷贝出来_NETAPP存储虚拟机数据恢复案例
  6. jAVA not find main_java编程时出现Could not find the main class 怎么解决???
  7. 网络分析(带权并查集)
  8. WordPress主题:Zibll子比主题 V4.0 绿色版
  9. 5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴...
  10. cacheinterceptor第二次访问没被调用_双分派访问者模式的前世今生
  11. 11g oracle 客户端驱动_oracle 11g 数据库驱动包
  12. 震旦adc225打印机连接计算机,震旦adc225驱动
  13. lena-ts 图像处理和卷积操作
  14. vista/win7系统 红警/CS/星际争霸 局域网连接方法
  15. 2022最新显卡天梯图,2022显卡天梯排行榜
  16. s3cmd 安装使用指南
  17. 电信光猫 TEWA 500AG 破解 超密 2020-3-21
  18. nofollow、noopener和noreferrer标签的区别
  19. 软件行业英雄们的离世
  20. Realview MDK 链接脚本文件详细解析(一)–链接符号

热门文章

  1. 天才作文-不知道有没有人发过 很有才
  2. PIM是什么意思,如何做好企业产品信息管理?
  3. 掌财社寒山:俄罗斯银行将在年底前推出数字卢布原型
  4. doom3灯光编辑器和FX编辑器
  5. 小罗说敏捷 | 使用关键路径法优化项目进度管理
  6. 非宁静无以致远 非淡泊无以明志
  7. Java游戏吉他英雄_《吉他英雄》全系列十作美版下载
  8. 数字转换成英文 金额转成英文大写
  9. 网马的反挂马检测及精确投放
  10. linux系统 插上硬盘认不到,关于Linux系统增加SCSI硬盘不识别的问题及解决办法