0415学习笔记:3决策树

1.决策树--》处理分类问题。最常使用的数据挖掘算法。专家系统中经常使用

2.优势:数据形式容易理解,计算复杂度不高,对中间值缺失不敏感,可处理不相关特征数据。

缺:可能过度匹配

3.信息增益:

    划分数据集:无序数据变得有序--》》使用信息论度量信息

如何计算信息增益?(集合信息的度量方式称为熵--信息的期望值)

3-1计算给定数据的熵

#coding:utf-8
from math import log

def calcShannonEnt(dataSet):
    numEntries = len(dataSet) #数据集的总数
    labelCounts = {} #建立数据字典
    for featVec in dataSet:
        currentLabel = featVec[-1] #键:最后一列的数值
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1 #每个键都记录当前类别出现的字数
    shannonEnt = 0.0
    for key in labelCounts: #计算熵
        prob = float(labelCounts[key])/numEntries #类别出现的概率
        shannonEnt -= prob * log(prob,2)
    return shannonEnt #返回熵

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

测试:

import sys
sys.path.append('/home/yang/Software/pycharm-community-2017.3.4/bin/桌面/PycharmProjects/untitled/k18')
import trees
reload(trees)
myDat,labels = trees.createDataSet() 
myDat
trees.calcShannonEnt(myDat)

Out[36]: 0.9709505944546686
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
阅读更多
个人分类: MLiA学习笔记
上一篇0415学习笔记:2.3手写识别系统-k近邻算法
下一篇0417学习笔记:3.1决策树的构造-划分数据集
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭