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

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

目录
相关文章
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1441 12
Scikit-learn:Python机器学习的瑞士军刀
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
443 0
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
599 7
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
336 0
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
625 0
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习

推荐镜像

更多