一、决策树模型
1.1 定义
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点和叶结点。内部结点表示一种特征或属性,叶结点表示一个类。
下图是一个决策树模型,圆和方框分别表示内部结点和叶结点。
1.2 决策树学习
二、特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。通常特征选择的准则是信息增益或信息增益比。
2.1 熵的定义
2.2 条件熵
2.3 信息增益
信息增益(information gain)表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
2.4 信息增益比
信息增益值的大小是相对于训练数据集而言的,在分类问题中,训练数据集的经验熵大的时候,信息增益值就会偏大,反之,信息增益值会偏小。也就是说,以信息增益为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。而信息增益比则能解决这一问题。
三、ID3算法(Interative Dichotomiser 3,迭代二叉树3代)
3.1 代码实现
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 13 18:50:19 2018
file name:tree.py
@author: lizihua
"""
from math import log
import operator
#输入一个数据集
def createDataSet():
dataSet = [[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']]
labels =['no surfacing','flippers']
return dataSet, labels
#计算给定数据集的熵
def calEntropy(dataSet):
numentries = len(dataSet)
labelCounts = {}
#用字典记录给定数据集中各个类出现的次数
for featVec in dataSet:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
#计算熵entropy
entropy = 0.0
for key in labelCounts:
#选择该类的概率
prob = float(labelCounts[