文章目录
决策树的构造
包括三个过程:特征选择、决策树生成和决策树剪枝
特征选择问题
特征选择问题:构建决策树的过程中, 这个根节点怎么选择,也就是这个特征要怎么选择。
解决方法:
纯度
纯度换一种方式来解释就是让目标变量的分歧最小。
信息熵
信息熵表示了信息的不确定度,理解起来就是衡量一组样本的混乱程度,样本越混乱,越不容易做出决定。
公式:
H
=
−
∑
i
=
1
k
p
i
log
(
p
i
)
H=-\sum_{i=1}^{k} p_{i} \log \left(p_{i}\right)
H=−i=1∑kpilog(pi)
信息熵能帮我们反映出来这个信息的不确定度。当不确定性越大时,它所包含的信息量也就越大,信息熵也就越高
信息增益
信息增益就是其中的一种方式,在得知特征X的信息后,而使得类Y的信息的不确定性减少的程度。
决策树生成过程中的问题
决策树生成过程中的问题:我们构建的时候并不是选择所有的特征进行划分,因为那样的话,每 个叶子节点只对应了一个实例, 这样的结果就是对训练集拟合的非常好,但是泛化能力比较差,容易造成过拟合。所以过拟合问题怎么解决?我们应该分到什么程度的时候就停止,不继续分下去了?
信息增益(ID3算法)
信息增益比(C4.5算法)
基尼指数(CART算法)
基尼系数:
G
=
1
−
∑
i
=
1
k
p
i
2
G=1-\sum_{i=1}^{k} p_{i}^{2}
G=1−i=1∑kpi2
二分类时:
G
=
−
2
x
2
+
2
x
G=-2 x^{2}+2 x
G=−2x2+2x
基尼系数越高,不确定性越高
CART(二叉树)
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
# 准备数据集
iris=load_iris()
# 获取特征集和分类标识
features = iris.data
labels = iris.target
# 随机抽取33%的数据作为测试集,其余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
# 创建CART分类树
clf = DecisionTreeClassifier(criterion='gini')
# 拟合构造CART分类树
clf = clf.fit(train_features, train_labels)
# 用CART分类树做预测
test_predict = clf.predict(test_features)
# 预测结果与测试集结果作比对
score = accuracy_score(test_labels, test_predict)
print("CART分类树准确率 %.4lf" % score)
决策树的剪枝问题
决策树的剪枝问题:假如我们真的生成了一棵决策树了,因为我们是根据训练集进行生成的,事先也不知道它的泛化能力怎么样,万一,我们拿过真的实例来测试,还是过拟合怎么办呢?
sklearn 调用决策树
# 导入数据集
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X, y = datasets.make_moons(noise=0.25, random_state=666)
# 导入决策树
from sklearn.tree import DecisionTreeClassifier
dt_clf = DecisionTreeClassifier()
dt_clf.fit(X, y)