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