我们之前学习了knn分类器,贝叶斯分类器,今天来学习一种新的模型,决策树分类器
决策树分类器,顾名思义是利用树形结构进行多次判断,从而达到分类的目的,我们先来看示例一,判断是否能通过面试
第一步我们先要生成决策树,现在有三列数据,1.是否为985 2.学历 3.技能,我们生成决策树时,要先对这些条件信息进行求熵值,若熵值最小则证明,波动性较小,信息更稳定,可信度更高,因此要先进行求熵,在求熵时,需要提出每一列的数据,因此我们要先得到每一列数据的编号,可以利用X.shape[1],代码如下
class Decision_Tree:
# 决策树初始化
def __init__(self):
self.Tree = {}
def fit_Decision_Tree(self):
# 信息熵列的表示
Column = list(range(X.shape[1]))
print(Column)
self.Tree.update(self.get_Decision_Tree(Column,X,y))
def get_Decision_Tree(self,Column, X, y):
# 假定最小的信息熵(初值要尽可能大的赋)
comentropy_min = 100
# 假定最小的信息熵的列
min_Column = Column[0]
# 提取出第i个熵值
for i in Column:
Col = X[:, i]
enti = sum(self.calculate_comentropy(y[Col == standard])for standard in set(Col))
if enti < comentropy_min:
comentropy_min = enti
min_Column = i
# 新建子树
subtree = {}
# 将当前最小熵值的这一列数据存储起来
min_Col = X[:, min_Column]
# 将最小熵值列这一列的编号删去
Column.remove(min_Column)
for d in set(min_Col):
current_comentropy = self.calculate_comentropy(y[min_Col == d])
if current_comentropy < 1e-10: # 可完全分开的情况
subtree[d] = y[min_Col == d][0]
else:
subtree[d] = self.get_Decision_Tree(Column.copy(),X[min_Col == d,:],y[min_Col == d])
return {min_Column: subtree}
def calculate_comentropy(self,Y_DS_index):
counter = Counter(Y_DS_index)
counter.values()
entropy = 0