- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
我们在使用分类算法训练数据后,评价分类模型的优劣时,经常会遇到一个词,“基尼系数”。 那么,什么是基尼系数呢?
本文将尝试用最简单的方式介绍什么是“基尼系数”以及它的计算方法和意义。 希望能让大家对基尼系数有个直观的印象,而不仅仅是记住它枯燥的计算公式.
首先,先假设有一个分类案例,包含2个种类的数据(紫色和蓝色),每个分类的数据有10个。 上图中的3种不同颜色的直线,代表3种不同参数的分类模型。 从图中可以看出:
对于上面这种简单的数据(只有2个维度的10个数据)和简单的分类模型(线性分类)来说, 我们通过作图可以一眼看出哪个分类模型的效果最好.
而现实中的实际情况,往往是不仅数据量大,数据维度也很多,分类模型也不会仅仅是一条二维直线。 这时,无法像上面那样绘制出二维图形来,那么该如何去定量的评估一个分类模型的好坏呢?
基尼系数就是这样一种指标,通过一个分类模型的基尼系数(Gini),来帮助我们判断分类模型的好坏.
对于绿色的分类模型:
分类过程 | 分类结果 | 概率 |
---|---|---|
选择 紫色 数据,并且被分类为 紫色 | 正确 | 50% |
选择 紫色 数据,并且被分类为 蓝色 | 错误 | 0% |
选择 蓝色 数据,并且被分类为 蓝色 | 正确 | 50% |
选择 蓝色 数据,并且被分类为 紫色 | 错误 | 0% |
概率计算方式说明:比如对于表格第一行,【选择 紫色 数据,并且被分类为 紫色】的概率。 首先,【选择 紫色 数据】的概率为50%,因为总共20条数据,紫色数据有10条。 其次,【并且被分类为** 紫色**】的概率为100%,因为绿色的模型可以正确分类所有的数据。 所以,【选择 紫色 数据,并且被分类为 紫色】的概率为 50% x 100% = 50%.
其余3行的概率同上一样计算.
对于黄色的模型:
分类过程 | 分类结果 | 概率 |
---|---|---|
选择 紫色 数据,并且被分类为 紫色 | 正确 | 50% |
选择 紫色 数据,并且被分类为 蓝色 | 错误 | 0% |
选择 蓝色 数据,并且被分类为 蓝色 | 正确 | 35% |
选择 蓝色 数据,并且被分类为 紫色 | 错误 | 15% |
对于上面表格中的第三行,【选择 蓝色 数据,并且被分类为 蓝色】为什么是35%? 首先,【选择 蓝色 数据】的概率为50%,因为总共20条数据,蓝色数据有10条。 其次,【并且被分类为 蓝色】的概率是70%,从图中可以看出黄色的模型对于10条蓝色数据,有7条分类正确,有3条被错误分类到紫色的那一类中了。 所以,【选择 蓝色 数据,并且被分类为 蓝色】的概率为 50% x 70% = 35%.
表格第四行的15%也是同样方式计算出的.
最后,看下红色的模型:
分类过程 | 分类结果 | 概率 |
---|---|---|
选择 紫色 数据,并且被分类为 紫色 | 正确 | 10% |
选择 紫色 数据,并且被分类为 蓝色 | 错误 | 40% |
选择 蓝色 数据,并且被分类为 蓝色 | 正确 | 50% |
选择 蓝色 数据,并且被分类为 紫色 | 错误 | 0% |
计算方式前面已经介绍,这里不再赘述.
3种不同效果的分类模型的分类效果统计在上面的表格中。 根据这些概率,我们如何给模型打分,从而确定模型好坏呢?
答案就是基尼系数(Gini),这时我们再来看看基尼系数的计算公式: \(Gini = \sum_{i=1}^C p(i)\times (1-p(i))\) 其中,\(C\)是数据的总类别数量,本文的例子中有两类数据,所以 \(C=2\) \(p(i)\)是选择某个类别\(i\)的数据的概率.
下面来看看本文中的3个模型的基尼系数分别是多少。 我们假设 \(p(1)\)代表选中紫色数据的概率;\(p(2)\)代表选中蓝色数据的概率 。
那么,对于绿色模型, 绿色线上部分的基尼系数:\(G_{up} = p(1)\times(1-p(1)) + p(2)(1-p(2))\) 在绿色线上部分,全是紫色数据,所以 \(p(1) = 1,\quad p(2)=0\); 因此,\(G_{up} = 1\times(1-1)+0\times(1-0) = 0\) 对于绿色线下部分,同理可计算出\(G_{down}=0\) 。
又因为绿色线上下部分的数据量都是10条,各占总数据量的50%, 所以最终绿色模型整体的基尼系数:\(G_{green}=50\% G_{up} + 50\% G_{down} = 0\) 。
对于黄色模型: 在黄色线上部分,10个紫色数据,3个蓝色数据,所以 \(p(1) = \frac{10}{13},\quad p(2)=\frac{3}{13}\), 因此,\(G_{up} = \frac{10}{13}\times(1-\frac{10}{13})+\frac{3}{13}\times(1-\frac{3}{13}) \approx 0.355\) 黄色线下部分,0个紫色数据,7个蓝色数据,所以 \(p(1) = 0,\quad p(2)=1\),所以\(G_{down}=0\) 。
又因为黄色线上下部分的数据量分别13条和7条,各占总数据量的\(\frac{13}{20},\quad \frac{7}{20}\), 所以最终黄色模型整体的基尼系数:\(G_{yellow}=\frac{13}{20} G_{up} + \frac{7}{20} G_{down} \approx 0.23\) 。
对于红色模型: 和上面同理计算出:\(G_{up}=0\),\(G_{down} \approx 0.494\); \(G_{red} = \frac{2}{20} \times G_{up} + \frac{18}{20}\times G_{down} \approx 0.444\) 。
基尼系数是介于0~1的数值,且越小表示效果越好, 因为 \(G_{green}=0<G_{yellow}=0.23<G_{red}=0.444\) 所以 绿色模型 优于 黄色模型 优于 红色模型.
通过比较不同模型的基尼系数的值,不仅可以一下看出分类模型的好坏,还可以根据数值的大小了解究竟好多少.
基尼系数也为我们训练分类模型时提供了一个优化的方向, 一方面,对于不同的分类模型,我们可以通过比较它们的基尼系数,确定哪种模型效果更好; 。
另一方面,对于同一个分类模型,我们可以通过观察其中每个分类的基尼系数(比如上面的\(G_{up}\)和\(G_{down}\)), 从而确定那个分类的效果比较差,那就是重点优化的方向.
最后此篇关于基尼系数的直观解释的文章就讲到这里了,如果你想了解更多关于基尼系数的直观解释的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在一个项目中工作,该项目需要 SQL 结果的最佳性能,并且希望优化查询,但经过反复试验后,我在 IN 方面遇到了一些问题。 -- THIS RETURNS NO RESULTS AT ALL. SE
在尝试创建一个实际上非常简单的 SQL 语句时,我发现自己迷失了方向。 我有一个包含 3 个表的数据库: 食谱 - 存储一些用于 cooking 的食谱名称 配料食谱 - 将配料与食谱链接 成分 -
我正在尝试理解 PHP 中的 Hebrev 函数。 https://php.net/manual/en/function.hebrevc.php 它说:“将逻辑希伯来语文本转换为视觉文本”。但我不明白
嗨,我在 Grid view 的 android 文档中发现了一段代码对于以下代码。 gridview.setOnItemClickListener(new OnItemClickListener()
谁能解释一下 InfiniBand 是什么?与以太网相比的主要区别是什么,这些差异如何使其比以太网更快? 在官方description从 mellanox 写到 Introduce InfiniBan
这个问题已经有答案了: How are java increment statements evaluated in complex expressions (1 个回答) 已关闭 8 年前。 我知道
我正在阅读 MySQL 教程,我遇到了这个: SELECT /*! SQL_NO_CACHE */ user FROM users; 为什么优化提示 SQL_NO_CACHE 包含在: /*!
我无法理解$(this),我做了一个剪刀石头布的版本,并应用了 jQuery 让用户在计算机上选择按钮选项。我希望有人能解释一下 $(this) 指的是什么,它是 btn-primary 吗?该函数在
我不是很确定 while(choice == 1 || choice ==2);谁能解释一下。我明白这一点 if(choice ==1) displayMonthly(rainfall); e
let flyRight = CABasicAnimation(keyPath: "position.x") flyRight.toValue = view.bounds.size.width/2 f
目录 解释:int型默认值为0 但我们尝试发现并不能通过: 原因: int的默认值为0,而Integer的默认值为null
我正在处理一个查询,自从一个 SSRS 服务器传输到另一个服务器后,它似乎没有按预期执行,并且 where 语句的一部分中出现了以下行 找出不同之处,或者至少从我能找到的地方来看。 where COA
我正在制作一个退回检测程序,读取退回邮件。我们的设置是发送电子邮件,在发送的邮件中添加一个 noreply@domain.tl。一些收件人不再存在,因此我们想要读取退回邮件,并检测它发送给谁。我已经崩
我有一个关于公式通过控制点弯曲的问题。 如您所知,HTML Canvas 有 quadraticCurveTo(x1, y1, x2, y2)与 x1 and x2作为控制点。 但是,当您尝试使用它绘
我有一个 Emakefile看起来像: %% -- %% %% -- {'/Users/user/projects/custom_test/trunk/*', [debug_info, {out
我有一个非常简单的问题。这不仅适用于 spray-json,而且我已经阅读了 argonaut 和 circe 的类似声明。所以请赐教。 在 spray-json 中,我遇到了 There is no
我正在为视频添加水印。我试图让水印与视频尺寸成比例。我已经使用 scale2ref 看到了十几个不同的答案,但没有解释实际发生了什么,所以我发现很难知道如何实现/更改配置以适应我的情况。 当前覆盖命令
因为我正在学习语言,所以我在玩 Haskell,我只是发现了一些我不理解的东西,我找不到解释。如果我尝试运行此代码: map (`div` 0) [1,2,3,4] 我得到一个除以 0 的异常,这是预
我正在寻找解决错误对象引用未设置到对象实例的步骤/指南。以及问题发生原因的解释。 我正在寻找更一般的解释,所以如果我收到错误,我应该采取什么步骤来查找问题。我经常看到有人提供特定代码段的帖子,而其他人
我最近想升级我的知识React ,所以我从组件生命周期方法开始。让我好奇的第一件事是这个componentWillReceiveProps .所以,文档说当组件接收新的(不一定是更新的) Prop 时
我是一名优秀的程序员,十分优秀!