机器学习 - [源码实现决策树小专题]决策树中混杂度数值度量的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'}")

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

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
6月前
|
机器学习/深度学习 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-4
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
|
5月前
|
机器学习/深度学习 数据采集 算法
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
|
6月前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
3月前
|
机器学习/深度学习 人工智能 Android开发
揭秘AI编程:从零开始构建你的第一个机器学习模型移动应用开发之旅:从新手到专家
【8月更文挑战第29天】本文将带你走进人工智能的奇妙世界,一起探索如何从零开始构建一个机器学习模型。我们将一步步解析整个过程,包括数据收集、预处理、模型选择、训练和测试等步骤,让你对AI编程有一个全面而深入的理解。无论你是AI初学者,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这段激动人心的AI编程之旅吧! 【8月更文挑战第29天】在这篇文章中,我们将探索移动应用开发的奇妙世界。无论你是刚刚踏入这个领域的新手,还是已经有一定经验的开发者,这篇文章都将为你提供有价值的信息和指导。我们将从基础开始,逐步深入到更复杂的主题,包括移动操作系统的选择、开发工具的使用、
|
3月前
|
机器学习/深度学习 人工智能 算法
揭秘AI编程:从零开始的机器学习之旅
本文将带你走进人工智能的奇妙世界,一起探索机器学习的奥秘。我们将从最基础的概念入手,逐步深入到实际应用中,让你在轻松愉快的阅读过程中,对AI编程有一个全面而深刻的理解。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启示。让我们一起开启这场充满智慧和乐趣的旅程吧!
61 1
|
3月前
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
26 2
|
3月前
|
机器学习/深度学习 数据采集 人工智能
揭秘AI编程:打造你的第一个机器学习模型
【8月更文挑战第24天】本文将带你走进人工智能编程的奇妙世界,从基础理论到实践操作,一步步构建你的首个机器学习模型。我们将通过一个简单的分类问题,展示如何收集数据、选择算法、训练模型并进行评估。文章末尾附有代码示例,助你理解并实现自己的AI项目。
57 0
|
6月前
|
机器学习/深度学习 算法 Python
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-1
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-1
|
6月前
|
机器学习/深度学习 算法 数据处理
探索机器学习中的决策树算法
【5月更文挑战第18天】探索机器学习中的决策树算法,一种基于树形结构的监督学习,常用于分类和回归。算法通过递归划分数据,选择最优特征以提高子集纯净度。优点包括直观、高效、健壮和可解释,但易过拟合、对连续数据处理不佳且不稳定。广泛应用于信贷风险评估、医疗诊断和商品推荐等领域。优化方法包括集成学习、特征工程、剪枝策略和参数调优。