机器学习--决策树python实现案例

注:文中相关截图或内容取自《统计学习方法》李航编
简介:
决策树(decision tree)是基本的分类与回归方法。对分类和回归的理解,通俗的讲就是最终结果是离散的为分类任务,结果是连续的是回归任务。决策树中每个非叶节点用一个(多个)特征进行选择向下探索的分支(每个节点相当于“switch 特征i:”的语句或者多个if 、else if的组合),最后探索至叶节点将实例判定为其分类。
如图为关于是否批准贷款的简单决策树:
这里写图片描述
决策树中节点的分支数根据该节点所选取的特征的值域确定。

信息增益

1.熵

在节点的特征选择上,需要现了解熵、条件熵和信息增益的概念。当前节点的划分特征选择信息增益最大的特征。
这里写图片描述
其中pi=训练集中该特征值为xi的样本的数量 / 总数。熵越大,随机变量的不确定性越大。

2.条件熵

这里写图片描述
pij = 在类yi的样本集中该特征值为xi的样本的数量 / 类yi的样本数量

3.信息增益

这里写图片描述

生成决策树的步骤

  1. 载入数据,抽象数据特征(数据集D,特征A)
  2. 计算熵
    这里写图片描述
  3. 计算每个特征的信息增益,选择信息增益最大的特征作为划分子树集的依据
    这里写图片描述
  4. 递归构建决策树
    这里写图片描述
    其中(1)(2)(4)为构建叶节点的三种情况,(5)(6)递归构建内节点。

  5. 给样本分类

案例:

下面通过一个实例来实现这个算法。
项目数据下载及说明,如下链接:
http://archive.ics.uci.edu/ml/datasets/Car+Evaluation
请自行下载数据,以及了解数据的相关内容。

数据样例:

Class Values:
unacc, acc, good, vgood

Attributes:
buying: vhigh, high, med, low.
maint: vhigh, high, med, low.
doors: 2, 3, 4, 5more.
persons: 2, 4, more.
lug_boot: small, med, big.
safety: low, med, high.

样本:

vhigh,vhigh,2,2,small,low,unacc
vhigh,vhigh,2,2,small,med,unacc
vhigh,vhigh,2,2,small,high,unacc
vhigh,vhigh,2,2,med,low,unacc
vhigh,vhigh,2,2,med,med,unacc
vhigh,vhigh,2,2,med,high,unacc
,,,

代码实现

部分函数

1、载入数据,抽象数据特征

#从文档中读取数据,每条数据转成列表的形式
def readData(path):
    dataList = []
    with open(path,'r') as f:
        dataSet = f.readlines()

    for d in dataSet:
        d = d[:-1]
        d = d.split(',')
        dataList.append(d)

    return dataList


#映射属性值,方便代码处理
Cls = {
  'unacc':0, 'acc':1, 'good':2, 'vgood':3}   #分类值映射
#特征值映射,共6个特征值,每个特征表示为X[i],X[i][xiv]表示特征Xi的取值。
X = [{
  'vhigh':0, 'high':1, 'med':2, 'low':3},
         {
  'vhigh':0, 'high':1, 'med':2, 'low':3},
         {
  '2':
  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值