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

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

目录
相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
12 1
|
9天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
14天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
15 1
|
15天前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
18 2
|
15天前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
19 1
|
16天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
42 2
|
16天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
38 1
|
机器学习/深度学习 算法 Python
【Python数据科学手册】专题:决策树与随机森林
本文将介绍一种强大的算法——无参数算法随机森林。随机森林是一种集成方法,通过集成多个比较简单的评估器形成累积效果。这种集成方法的学习效果经常出人意料,往往能超过各个组成部分的总和;也就是说,若干评估器的多数投票(majority vote)的最终效果往往优于单个评估器投票的效果!
834 0
|
机器学习/深度学习 Python
Python 数据科学手册 5.8 决策树和随机森林
5.8 决策树和随机森林 原文:In-Depth: Decision Trees and Random Forests 译者:飞龙 协议:CC BY-NC-SA 4.0 译文没有得到原作者授权,不保证与原文的意思严格一致。
1298 0
|
7天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。

热门文章

最新文章