决策树与随机森林均属于分类算法,所预测的结果应为离散数据(特征值可以为连续的)
信息论基础
信息熵
信息增益
信息增益表示得知特征X的信息而使得Y的信息的不确定性减少的程度
信息增益的计算
条件熵
Ck表示属于某个类别的样本数
信息增益是确定决策树优先级的重要指标,信息增益越大,其优先级越高
决策树API
class sklearn.tree.DecisionTreeClassifier(criterion='gini', max_depth=None, random_state=None)
- 决策树分类器
- criterion:默认是'gini'系数,也可以选择信息增益的熵'entropy'
- max_depth:树的深度大小
- random_state:随机数种子
决策树优点
- 准确率高
- 适用于各种数据
- 可解释性强
- 不需要归一化
决策树缺点
容易过拟合——树的建立太深
决策树的使用
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
iris = datasets.load_iris()
X = iris['data']
y = iris['target']
feature_names = iris.feature_names
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1024)
# 数据清洗比较花时间
# 特征工程重要
# 使用模型进行训练
# 模型参数调优
# sklearn的所有算法都已经封装好,直接用,使用规则如下
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(X_train, y_train)
y_ = clf.predict(X_test)
print(accuracy_score(y_test, y_))
# 1.0
# 画出树的结构
plt.figure(figsize=(18, 12))
tree.plot_tree(clf, filled=True, feature_names=feature_names, max_depth=1)
plt.savefig('./tree.jpg')
树结构的解释
分类器的解释
在决策树的API中,有以下参数可以进行改变
DecisionTreeClassifier( *, criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort='deprecated', ccp_alpha=0.0, )
- criterion中有'gini'(默认)和'entropy',这是两种选择特征进行分类的方法。其中,entropy就是上述的“信息增益的熵”
- 树的结构中第一层中的entropy=1.584的计算如下
-((39/120)*np.log2(39/120) + (42/120)*np.log2(42/120) + (39/120)*np.log2(39/120))
- gini算法如下
39/120*(1 - 39/120)*2 + 42/120*(1 - 42/120)
-
这两种算法其实效果类似
- 树的结构中第一层中的entropy=1.584的计算如下
- max_depth=None,树的最深深度设置,有时不一定越深越好,浅一些的效果也可能相同但效率更高
- min_samples_split=2,最小样本数量划分,与上面设置树深度的效果类似,这个设置了每一个分支最少容纳的样本数量,达到此数量,就不再往下分了。此值越大,树的深度越浅
- max_features,计算的最多的特征值的数量
- class_weight,类别权重,默认都是1,如需指定,输入一个与y相对应的字典列表
[{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}
树结构的解释
- entropy,上面已解释
- value = [39, 42, 39],是指三种类别的数量,鸢尾花的三种类别在训练集中的数量
- 在之后的每次分类中,一部分被分走,剩下的继续划分
- petal length(cm)<=2.6,鸢尾花数据集中的特征值有四个,分别是'sepal lenth (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)',在第一个分类中是根据petal length的数值大小进行分类的,<=2.6的直接被分为鸢尾花三类中的其中一类,>2.6的就继续分类
- 这个分类的标准有很多,比如像第一级的分类,使用petal length作为分类标准,是因为在petal length中的特征值大小差别较大,方差大,说明数据比较分散,易于分类,选择了相邻数据差距十分明显的1.9和3.3,取二者的平均值2.6作为第一级的分类阈值
- 在后面级别的分类标准选择中,在方差相似的情况下,又会有不同的分类标准
决策树模型,不需要对数据进行去量纲化,归一化,标准化
决策树的模型很重要,但不会去使用它,通常使用的都是随机森林(集成算法,决策树的升级版)