机器学习实战——决策树

本文介绍了决策树的基本概念、ID3算法原理及其实现过程,包括数据集创建、信息熵计算、数据分离、最优特征选择以及决策树的构建。通过Python代码展示了决策树的构建,并探讨了其在预测隐形眼镜类型的应用。总结了决策树的优点和缺点,指出过度匹配可能带来的问题。
摘要由CSDN通过智能技术生成

本文记录的是《机器学习实战》和《统计学习方法》中决策树的原理和实现。

1、决策树

定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由节点(node)和有向边(directed edge)组成。节点有两种类型:内部结点和叶结点,内部结点表示一个特征或者属性,叶结点表示一个类。
用决策树进行分类,从根结点开始,对实例的某一特征进行测试,根据测试结构,将实例分配到其子结点;这时,每一个子结点对用着特征的一个取值,如此递归的对实例进行测试并分配,直至到达叶结点。最后将实例分到叶结点的类中。
这里写图片描述
决策树的一般流程:
(1)收集数据:可以使用任何方法。
(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化。
(3)分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。
(4)训练算法:构造树的数据结构。
(5)测试算法:使用经验树计算错误率。
(6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据
的内在含义。
目前常用的决策树算法有ID3算法、改进的C4.5算法和CART算法。

2、ID3 算法原理和实现

ID3算法最早是由罗斯昆(J. Ross Quinlan)于1975年在悉尼大学提出的一种分类预测算法,算法以信息论为基础,其核心是“信息熵”。ID3算法通过计算每个属性的信息增益,认为信息增益高的是好属性,每次划分选取信息增益最高的属性为划分标准,重复这个过程,直至生成一个能完美分类训练样例的决策树。
这里写图片描述
《统计学习方法》中该部分的描述:
这里写图片描述
这里写图片描述
下面是用python具体的实现:
1.首先创建一个数据集:

# -*- coding: utf-8 -*-
from math import log
import operator
import treePlotter
# 创建数据集
def createDataSet():
    dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
    labels = ['no surfacing', 'flippers']
    # change to discrete values
    return dataSet, labels

2.计算香农熵:

# 计算香农熵
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:  # the the number of unique elements and their occurance
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
        #print(labelCounts)
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries
        shannonEnt -= prob * log(prob, 2)  # log base 2
    return shannonEnt
myDat, labels = createDataSet()
print(calcShannonEnt(myDat))
myDat[0][-1] = 'maybe'
print(myDat, labels)
print('Ent changed: ', calcShannonEnt(myDat))

输出为:
这里写图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值