机器学习 - [源码实现决策树小专题]决策树中混杂度数值度量的Python编程实现(信息熵和基尼系数的计算)

简介: 顾名思义,所谓混杂度就是指无序程度,一般使用“信息熵”(香浓熵)或者“及逆序数进行度量”。本文介绍及其学习决策树算法中混杂度数值度量的Python编程实现

混杂度数值度量的Python编程实现


李俊才 的个人博客

已入驻阿里云社区

邮箱 :291148484@163.com
本文地址
- https://developer.aliyun.com/article/
- https://blog.csdn.net/qq_28550263/article/details/114883862

顾名思义,所谓混杂度就是指无序程度,一般使用“信息熵”(香浓熵)或者“及逆序数进行度量”。

阅读本文后推荐:信息增益与信息增益率计算的Python实现


目 录

1.信息熵(entropy)

2.基尼系数

3. 小结


1.信息熵(entropy)

1.1 信息熵的概念

信息熵是从热力学中借用过来提出以解决了对信息的量化度量问题的概念,把信息中排除了冗余后的平均信息量称为信息熵。信息熵的计算步骤为:

  • 先确定当前特征有多少取值(i=1,2,3,…),计算每种不同取值的概率pi
  • 在依据公式计算信息熵:
    image.png

1.2 信息熵的编程计算

frommathimportlogdefentropy1(anArray):
"""    计算信息熵(香浓熵)    """entropy=0.0# 信息熵(香农熵)feature_dict= {}                  # 用字典键获取不重复的取值foriinlist(anArray):
feature_dict.update({i:None,})
# 计算所有不同特征值取值的概率进而计算信息熵foriinfeature_dict:                              # 这里每一个i是不重复的特征取值(每个特征出现一次)ct=list(anArray).count(i)                     # 计算某个特征取值为i的频数pi=ct/len(anArray)                          # 计算出特征值i在该特征中出现的概率 piifpi==0:                                     # 这个条件相当于人为定义log0=1entropy=entropy-1else:
entropy=entropy-pi*log(pi,2)          # 以2位底求熵returnentropy

以上是自己实现对不同元素地频率进行统计以求取信息熵,理解起来难度略大。Python有个好处就是,很多模块都有人给你写好了,你只要import一下就可以通过更加便捷的方式完成你想要的功能。

使用Python内建模块collections中的Counter对象能方便地对数组中的不同元素出现次数进行统计以简化以上代码。collections.Counter 可以参见另外一篇博文【https://blog.csdn.net/qq_28550263/article/details/114867848)】)中的1.1 节

实现代码如下:

importnumpyasnpdefentropy2(anArray):
'''    计算信息熵(香浓熵)    '''cnt=Counter(anArray)
data_length=len(anArray)
pis= []
foriincnt:
pis.append(cnt[i]/data_length)
hi= []
forpiinpis:
ifpi>0:
hi.append(pi*np.log2(pi))
return-np.sum(hi)


2.基尼系数

2.1.基尼系数的概念

基尼系数也可以用于度量数据的混乱程度,比起信息熵而言基尼系数比较稳定,因为熵的值将随着所有取值情况的增多而呈现发散态势,但基尼系数最大为1,最小为0。这使得基尼系数在有些情况下用于混杂度的度量以实现某种算法时显得比基于信息熵的度量更方便。比如在决策树算法中,使用基于信息熵的信息增益总是会偏向于选取取值类型更多的特征,而这却不是我们所期待的。

基尼系数的计算步骤为:

  • 确定当前特征有多少取值(i=1,2,3,…),计算每种不同取值的概率Pk
  • 由以下公式计算基尼系数
    image.png

2.2.基尼系数的编程计算

我们采用等式右边的式子,即Gini = 1-∑(k=1,n)|(Pk)^2实现求解如下:

importnumpyasnpdefGini(anArray):
'''    计算基尼系数    '''cnt=Counter(anArray)
data_length=len(anArray)
Pks= []                           # 先计算每种不同取值的概率Pk,装入列表Pks foriincnt:
Pks.append(cnt[i]/data_length)
Pk2s= [Pk**2forPkinPks]       # 再计算 1-∑(k=1,n)|(Pk)^2return1-np.sum(Pk2s)

3. 小结

frommathimportlogimportnumpyasnpdefimpurity(anArray, impurity_t="entropy"):
"""    计算混杂度    Parameters    ----------    anArray:     an Array like object,由某特征依次对应每条数据下的取值构成。    impurity_t:  str,表示混杂度的度量方式,只能是{"entropy","gini"}中的一个。    Return    result: float        为计算得到的impurity的数值。    """cnt=Counter(anArray)
data_length=len(anArray)
pis= [cnt[i]/data_lengthforiincnt]
ifimpurity_t=="entropy":         # 信息熵:Entropy = -∑(i=1,n)|(pi·logpi)return-np.sum([pi*np.log2(pi) forpiinpisifpi>0])
elifimpurity_t=="gini":          # 基尼系数:Gini = 1-∑(k=1,n)|(Pk)^2return1-np.sum([Pi**2forPiinpis])
else:
raiseValueError("impurity_t can only be one of {'entropy','gini'}")

如果喜欢,记得一赞三连噢!

目录
相关文章
|
5月前
|
数据采集 数据可视化 数据挖掘
掌握Python数据分析,解锁数据驱动的决策能力
掌握Python数据分析,解锁数据驱动的决策能力
100 0
|
7月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
91 9
|
7月前
|
机器学习/深度学习 算法 Python
从菜鸟到大师:一棵决策树如何引领你的Python机器学习之旅
【9月更文挑战第9天】在数据科学领域,机器学习如同璀璨明珠,吸引无数探索者。尤其对于新手而言,纷繁复杂的算法常让人感到迷茫。本文将以决策树为切入点,带您从Python机器学习的新手逐步成长为高手。决策树以其直观易懂的特点成为入门利器。通过构建决策树分类器并应用到鸢尾花数据集上,我们展示了其基本用法及效果。掌握决策树后,还需深入理解其工作原理,调整参数,并探索集成学习方法,最终将所学应用于实际问题解决中,不断提升技能。愿这棵智慧之树助您成为独当一面的大师。
84 3
|
6月前
|
机器学习/深度学习 程序员
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
【机器学习】朴素贝叶斯原理------迅速了解常见概率的计算
|
7月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
86 1
|
8月前
|
数据可视化 Python
【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
本文介绍了2023年高教社杯数学建模竞赛C题,涉及蔬菜类商品的自动定价与补货决策,包括问题分析、数学模型的构建以及Python代码实现,旨在优化商超的补货和定价策略以提高收益。
191 1
|
8月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【8月更文挑战第2天】决策树算法以其直观性和解释性在机器学习领域中独具魅力,尤其擅长处理非线性关系。相较于复杂模型,决策树通过简单的分支逻辑实现数据分类,易于理解和应用。本示例通过Python的scikit-learn库演示了使用决策树对鸢尾花数据集进行分类的过程,并计算了预测准确性。虽然决策树优势明显,但也存在过拟合等问题。即便如此,无论是初学者还是专家都能借助决策树的力量提升数据分析能力。
97 4
|
8月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【8月更文挑战第3天】在数据的海洋中探寻真知,决策树犹如智慧之树,以其直观易懂的强大功能,引领我们逐步缩小决策范围,轻松获取数据洞察。本篇将带您踏上Python机器学习之旅,从理解决策树为何受青睐开始,通过scikit-learn库实现鸢尾花数据集分类,解析其决策机制,并掌握调参技巧,最终优化模型性能,共同摘取数据科学的甜美果实。
68 1
|
19天前
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
5月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
316 6

热门文章

最新文章

下一篇
oss创建bucket