决策树决策算法之ID3算法
ID3算法
在决策树各个节点上应用信息增益准则选择特征,每一次都选择是的信息增益最大的特征进行分裂,递归的构建决策树
具体计算可以参考
决策常用算法数学计算过程
ID3代码实现
import numpy as np
import math
a=[[2,3],[4,],[3,2]] # 原数据 参考上面链接里面的计算数据
x=np.sum(a[0])+np.sum(a[1])+np.sum(a[2])
# ID3算法计算
def Id3():
result_arr=[]
for i in a:
c=0
for j in range(len(i)):
p=i[j]/np.sum(i)
pi=p*math.log(p,2)
c+=pi
result_arr.append(c)
return result_arr
def arr_(result_arr):
d=0
for k in range(len(result_arr)):
h=-(np.sum(a[k])/x)*result_arr[k]
d+=h
return round(d,3)
id3=arr_(Id3())
C4.5算法 对ID3算法的改进
ID3算法 使用的是信息增益来判断,取值的时候会选择信息增益大的特征,也就是取值多的那些特征,容易过拟合 ,且只能够处理分类变量,不能够处理缺失值,
C4.5算法 是采用的悲观剪枝的方式 比较节点前后的分类错误率来进行判断剪枝
这弥补了ID3算法的偏向性 但由于是递归判断节点的错误率 也导致效率低下,避免过拟合,对缺失值可以处理
具体计算可以参考
决策常用算法数学计算过程
C4.5算法代码实现
# 计算原始的信息熵
def start_h():
a=y/x
a_p=a*(math.log(y,2)-math.log(x,2))
b=((x-y)/x)
b_p=b*(math.log(x-y,2)-math.log(x,2))
p=-a_p-b_p
return round(p,4)
# C4.5算法 计算信息熵
def c4_5(d):
d=0
for i in a:
p=np.sum(i)/x
d+=-p*(math.log(np.sum(i),2)-math.log(np.sum(x),2))
return d
c4_5(d)
id3=arr_(Id3()) # id3算法处理后的信息熵
w=start_h()-id3 # 计算信息增益
z=w/c4_5(d) # 计算信息增益率
CART算法 gini指数计算
gini指数反应数据的离散程度 越大表示越混乱
具体计算可以参考
决策常用算法数学计算过程
CART算法代码实现
#CART算法 gini 指数计算
def gini(a):
arr=[]
for i in a:
c=1
for j in range(len(i)):
c-=(i[j]/np.sum(i))**2
arr.append(c)
return arr
cart=arr_(gini(a))