决策树整体上就是类似于一棵充满if-else的树。
信息:用来消除随机不确定性的东西。
信息熵,单位是比特,可以用来代表不确定性
策略树一种划分的依据是:信息增益
:知道某种特征之后,不确定性减少的最多,就可以先看这个特征,即这个特征的信息增益最大
g(D,A)=H(D)-H(D/A)
H(D)是信息熵,H(D/A)是条件熵,g(D,A)可以看成特征A的信息增益。
决策树太大,太深,会过于拟合,造成泛化能力不强
优点:简单,可视化-可解释能力强,不像深度学习,那么深,很多都在做特征提取,都不知道提取的是什么,所以深度学习会被叫成黑盒子。
缺点:容易产生过拟合。
改进:1.剪枝cart算法
2.随机森林
下面以决策树对鸢尾花进行分类
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier,export_graphviz
def decision_iris(): """ 用决策树对鸢尾花进行分类 :return: """ #1.获取数据集 iris=load_iris() #2.划分数据集 x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target) #3.使用决策树 estimator=DecisionTreeClassifier(criterion="entropy")#entropy 表示以信息增益的方式 estimator.fit(x_train,y_train) #4.模型评估 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) #可视化决策树 export_graphviz(estimator,out_file="iris_tree.dot",feature_names=iris.feature_names) return None
结果为:
除此之外,结果还有一个可视化文件iris_tree.dot,会在文件列表中,打开之后是这样的形式:
这个可视化文件并没有以树的方式进行展示,这时需要打开一个网站:webgraphviz.com
然后粘贴到里面,点击Generate Graph,会生成树的形状,如