3.5 决策树
3.5.1 认识决策树
如何高效的进行决策?
特征的先后顺序
3.5.2 决策树分类原理详解
已知 四个特征值 预测 是否贷款给某个人
先看房子,再工作 -> 是否贷款 只看了两个特征
年龄,信贷情况,工作 看了三个特征
理解公式的例子:信息熵其实就是衡量不确定性的大小
xi其实就是最后目标类的个数,只有是或者否两类,是概率为9/15.否概率为6/15
信息增益
条件熵的作用是:确定那个条件相对来说更能消除不确定性
公式理解:比如我要算年龄作为条件的条件熵,那么年龄下有三类所以首先分每个三分之一,再看青年,在青年下是和否两类,所以用信息熵公式是如上图所示
最终计算也可见下图:计算结果就为信息增益
API
树的深度大小的意思就是,若默认就会设置的很精细,但是可能导致过拟合,因此,有些时候不必这么精细
代码实现:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
def decision_iris():
"""
用决策树对鸢尾花进行分类
:return:
"""
# 1)获取数据集
iris = load_iris()
# 2)划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
# 3)决策树预估器
estimator = DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train, y_train)
# 4)模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)
# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
结果:
y_predict:
[0 2 1 2 1 1 1 1 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 2 2 2 1 0 0 1 1 1 0 0
0]
直接比对真实值和预测值:
[ True True True True True True True False True True True True
True True True True True True False True True True True True
True True True True True False True True True True True True
True True]
准确率为:
0.9210526315789473
可以看到,在小样本量中KNN算法是准确率最高的
决策树可视化:
# 可视化决策树
export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)
feature_names=iris.feature_names把输出前缀改成特征名
可视化效果大致如图: