Normalized Gini Coefficient
在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相关推荐
- Gini coefficient直观的解释与实现
引言 大家在机器学习中经常会看到基尼系数的词汇,有时候在做比赛的时候,有些赛题的Scoring Metric就是基尼系数.我们去Google或者Baidu,得到的都是些不甚满意的经济学相关的解释.那么 ...
- 基尼系数(Gini coefficient),洛伦茨系数
20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标.它是根据洛伦茨曲线找出了判断分配平等程度的指标(如下图). 设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际 ...
- Gini指数、Gini系数、Gini不纯是一回事吗?
决策树算法CART中用的是哪一个? 用的是Gini impurity,也就是基尼不纯. Gini impuirty是什么? 假设这个数据集里有kk种不同标签,第ii个标签所占的比重为pipi,那么Gi ...
- ROC 曲线/准确率、覆盖率(召回)、命中率、Specificity(负例的覆盖率)
欢迎关注博主主页,学习python视频资源 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.ht ...
- 如何用R做计量经济学
CRAN任务视图:计量经济学 线形回归模型(Linear regression models) ž 线形模型可用stats包中lm()函数通过OLS来拟合,该包中也有各种检验方法用来比较模型,如: ...
- MATLAB计算气象水文要素年内分配指数
MATLAB计算气象水文要素年内分配指数 降水/径流等水文要素年内分配指标 1 不均匀系数nuniformity coefficient (Cn) 1.1 原理 1.2 MATLAB代码 1.3 案例 ...
- 空间计量模型_Stata中的空间计量回归模型应用
在Stata 15中,推出了最新的空间计量官方命令,均以sp开头,表示 spatial data),可以处理横截面与面板形式的空间数据.本文主要为大家介绍空间计量横截面及面板模型的应用,全文分为两部分 ...
- Introduction to random forests
2019独角兽企业重金招聘Python工程师标准>>> 1: Introduction In the past three missions, we learned about de ...
- 我怎样才能找到带有Mathematica的Waldo?
本文翻译自:How do I find Waldo with Mathematica? This was bugging me over the weekend: What is a good way ...
- 决策树是如何选择特征和分裂点?
©PaperWeekly 原创 · 作者|贲忠奇 单位|便利蜂算法工程师 研究方向|推荐算法.反作弊 缘起 在解决回归和分类问题的时候,一般会使用 Random Forest.GBDT.XGBoost ...
最新文章
- python 使用socks 爬虫_python爬虫基础之urllib的使用
- css3遮罩层_CSS3鼠标hover图片超酷遮罩层动画特效
- 关于 Intel 8253/8254
- php获取d盘,软件装c盘和d盘的区别
- 虚拟机拷贝出来_NETAPP存储虚拟机数据恢复案例
- jAVA not find main_java编程时出现Could not find the main class 怎么解决???
- 网络分析(带权并查集)
- WordPress主题:Zibll子比主题 V4.0 绿色版
- 5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制、剪切和粘贴...
- cacheinterceptor第二次访问没被调用_双分派访问者模式的前世今生
- 11g oracle 客户端驱动_oracle 11g 数据库驱动包
- 震旦adc225打印机连接计算机,震旦adc225驱动
- lena-ts 图像处理和卷积操作
- vista/win7系统 红警/CS/星际争霸 局域网连接方法
- 2022最新显卡天梯图,2022显卡天梯排行榜
- s3cmd 安装使用指南
- 电信光猫 TEWA 500AG 破解 超密 2020-3-21
- nofollow、noopener和noreferrer标签的区别
- 软件行业英雄们的离世
- Realview MDK 链接脚本文件详细解析(一)–链接符号