《李宏毅机器学习》task7

一、信息论基础

熵是用来衡量一个系统混论程度的物理量,代表一个系统中蕴含多少信息量,信息量越大表明一个系统不确定性就越大,就存在越多的可能性。

  • 信息熵便是信息的期望值,可以记作:
    在这里插入图片描述
  • 条件熵
    在这里插入图片描述
  • 信息增益
    在这里插入图片描述
  • 信息增益率
    在这里插入图片描述
  • 基尼指数
    -

二、决策树的不同分类算法

算法支持模型树结构特征选择连续值处理缺失值处理剪枝
ID3分类多叉树信息增益不支持不支持不支持
C4.5分类多叉树信息增益比支持支持支持
CART分类/回归二叉树基尼系数,均方差支持支持支持
  • ID3
    由于期望信息越小,信息增益越大,从而纯度越高,因此ID3算法的核心思想就是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。
  • C4.5
    ID3算法存在一个问题,就是偏向于多值属性,例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。
  • CART
    ID3中根据属性值分割数据,之后该特征不会再起作用,这种快速切割的方式会影响算法的准确率。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。

三、计算信息熵

import numpy as np
import pandas as pd

def cancShannonEnt(dataSet):
  '''
  :param dataSet: dataSet
  :return: shannonEnt
  '''
  # 计算公式前,注意数据的格式(array)
  numEntries = len(dataSet)   # 获取数据的行数
  labelCounts = { }    # 设置字典数据格式,想要存储的数据格式为:类别:频数
  for featVec in dataSet:   # 获取数据集每一行的数据
      currentLabel = featVec[-1]   # 获取特征向量的最后一列
      # 检查字典中key是否存在
      # 如果key不存在
      if currentLabel not in labelCounts.keys():
          # 将当前的标签存于字典中,并将频数置为0
          labelCounts[currentLabel] = 0
      # 如果key存在,在当前的键值上+1
      labelCounts[currentLabel] +=1

  # 数据已准备好,计算熵
  shannonEnt = 0.0          # 初始化信息熵
  for key in labelCounts:   # 遍历出数据中所的类别
      pro = float(labelCounts[key]) /numEntries
      shannonEnt -= pro * np.log2(pro)  # 计算信息熵
  return shannonEnt                       # 返回信息熵

dataSet = pd.read_csv('watermelon_3a.csv')
dataSet = np.array(dataSet.values)
shannon = cancShannonEnt(dataSet)
print(shannon)

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值