决策树
原理
计算数据集中的熵,寻找最优方案划分数据集,直到所有数据属于同一分类,并在此过程建决策树
熵
我们用于判断如何划分数据集的依据,是信息的期望值
代码
from math import log
import os
'''
参数:
data:数据集,包含分类
返回:
该数据集的熵
'''
def calS(data):
l = len(data)
label = {
}
for i in data:
cur = i[-1]
if cur not in label.keys():
label[cur] = 0
label[cur] += 1
s = 0
for i in label:
p = label[i]/l
s -= p*log(p,2)
return s
'''
参数:
data:数据集
axis:特征id
value:特征对应的值
返回:
数据集按照某特征为某值切片后的子数据集
'''
def splitS(data,axis,value):
ydata = []
for i in data:
x = i[:axis]
x.extend(i[axis+1:])
if i[axis] == value:
ydata.append(x)
return ydata
'''
参数:
data:数据集
返回:
特征id
备注:
通过穷举所有可能,选择熵最小的切片方式
'''
def chooseSplit(data):
num = len(data[0]) - 1
id