ID3算法简介:
构造ID3决策树的基本算法是贪心算法,它以自顶向下递归的各个击破方式构造决策树。一种著名的决策树算法是ID3,算法的基本策略如下:
①创建一个节点。如果样本都在同一类,则算法停止,把该节点改成树叶节点,并用该类标记。
②否则,选择一个能够最好的将训练集分类的属性,该属性作为该节点的测试属性。计算最优特征子函数:不同标准导致不同类型的决策树,如ID3的最优特征选择标准是信息增益,C4.5是信息增益率,CART是节点方差的大小等等。算法逻辑上,一般选择最优特征需要遍历整个数据集,评估每个特征,找到最优的那个返回。
③对测试属性中的每一个值,创建相应的一个分支,并据此划分样本。划分数据集子函数:分隔数据集。
④使用同样的过程,自顶向下的递归,直到满足下面的三个条件中的一个时就停止递归。
A. 给定节点的所有样本都属于同一类。
B. 没有剩余的属性可以用来划分。
C. 分支没有样本。
为了存储树的关系,利用根表示:学习的事例集。枝表示: 分类的判定条件。叶表示:分好的各个类。
ID3算法对数据的要求:
1. 所有属性必须为离散量,且离散值分散越广,对树的影响较大。
2. 所有的训练例的所有属性必须有一个明确的值.
3. 相同的因素必须得到相同的结论且训练例必须唯一。
(二)ID3构造过程(列出python代码供大家学习研究):
from math import log
from imp import reload
import matplotlib.pyplot as plt
import operator
import pickle
def createdataSet():#建立训练数据和测试数据
dataSet=[[1,1,'yes'],
[1,1,'yes'],
[1,0,'no'],
[0,1,'no'],
[0,1,'no']]
labels=['no surfacing','flippers']#
#labels表示的类标签:(相当于标题行):
#上面的数据集,第一列表示是nosurfacing对应的信息;第二列对应的是flippers表示信息。
return dataSet,labels
#----------------------计算信息熵------------------#
def calcShanonEnt(dataSet):
numEntries=len(dataSet) #数据样本数
labelCounts={} #类别字典