利用sklearn 实现ID3、CART、C4.5 算法挑西瓜

一、ID3算法

1. 基础知识

ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上:越是小型的决策树越优于大的决策树。ID3 算法的核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。 其大致步骤为:
1)初始化特征集合和数据集合;
2)计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
3)更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
4)重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。

2. 划分标准

ID3算法使用的分类标准是信息增益,它表示得知特征A的信息而使得样本集合不确定性减少的程度。
信息增益的计算过程参考:https://blog.csdn.net/One2332x/article/details/121053735?spm=1001.2014.3001.5501

3. 缺点

  • ID3 没有剪枝策略,容易过拟合;
  • 信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
  • 只能用于处理离散分布的特征;
  • 没有考虑缺失值。

4. 利用sklearn实现ID3算法

打开Jupyter,新建项目。

# 导入包
import pandas as pd
from sklearn import tree
import numpy as np
from sklearn.model_selection import train_test_split
import graphviz

df = pd.read_csv('C:\\....\\西瓜数据集.txt') # 读取文件

# 将特征值全部转化为数字显示
df['色泽']=df['色泽'].map({
   '浅白':1,'青绿':2,'乌黑':3})
df['根蒂']=df['根蒂'].map({
   '稍蜷':1,'蜷缩':2,'硬挺':3})
df['敲声']=df['敲声'].map({
   '清脆':1,'浊响':2,'沉闷':3})
df['纹理']=df['纹理'].map({
   '清晰':1,'稍糊':2,'模糊':3})
df['脐部']=df['脐部'].map({
   '平坦':1,'稍凹':2,'凹陷':3})
df['触感'] = np.where(df['触感']=="硬滑",1,2)
df['好瓜'] = np.where(df['好瓜']=="是",1,0)
x_train=df[['色泽','根蒂','敲声','纹理','脐部','触感']]
y_train=df['好瓜']
print(df)
id3=tree.DecisionTreeClassifier(criterion='entropy')
id3=id3.fit(x_train,y_train)
print(id3)

显示结果:
在这里插入图片描述
调用sklearn中函数tree.DecisionTreeClassifier(),其中参数 criterion 表示选择特征的准则,默认是 'gini',也就是基尼系数,可以设置为'entropy',即信息增益。

id3=tree.DecisionTreeClassifier(criterion='entropy')
id3=id3.fit(x_train,y_train)
labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感']
dot_data = tree.export_graphviz(id3
,feature_names=labels
,class_names=["好瓜","坏瓜"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph

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

二、C4.5算法

1. 基础知识

C4.5主要克服ID3使用信息增益进行特征划分对取值数据较多特征有偏好的缺点。使用信息增益率进行特征划分。
C4.5相比ID3进行的改进有如下4点:

  • 引入剪枝策略,使用悲观剪枝策略进行后剪枝;
  • 使用信息增益率代替信息增益,作为特征划分标准;
  • 将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
  • 缺失值处理
    • 对于具有缺失值的特征,用没有缺失的样本子集所占比重来折算信息增益率,选择划分特征。
    • 选定该划分特征,对于缺失该特征值的样本,将样本以不同的概率划分到不同子节点。

2. 划分标准

利用信息增益率可以克服信息增益的缺点,其公式为:
G a i n r a t i o ( D , A ) = G a i n ( D , A ) H A ( D ) Gain_ratio(D,A)=\frac{Gain(D,A)}{H_A(D)} Gainratio(D,A)=HA(D)Gain(D,A)
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilo

  • 10
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值