文章迁移说明:此文已由lightinglei于2019-02-15发布,是本人的另外一个账号,现同步迁移至本账号
1、决策树的定义
决策树是一种基本分类与回归的方法,本文主要讲述的是分类的决策树,决策树模型呈树型结构,如下图1所示,
决策树主要由节点和有向边组成,节点主要分为内部结点和叶节点,内部节点表示一个特征或属性,内部节点包括:根节点、父节点、子节点,叶节点表示一个类。
根节点无父节点,子节点是父节点依据某种规则分类而来,然后子节点会作为新的父节点继续分类,直至不能分裂为止,不能再继续分裂的节点称之为叶节点。
图1
举个例子:比如我们根据用户的年龄、有无工作、有无自己的房子以及信贷情况来判断是否贷款给这个用户,这里共有4个特征分别为年龄、有无工作、有无自己的房子、信贷情况,而类别为是否贷款
2、特征选择问题
拿到上表的数据集,若先看信贷情况、是否有工作2个特征即可判断是否提供贷款;若是先看年龄、其次信贷情况,最后看工作,则需要3个特征才能判断是否通过贷款,那么问题来了,如何让系统自动找到最优的划分节点呢?比如信贷情况,为了解决这个问题,需要引入信息熵、信息增益
信息熵(经验熵):
条件熵:
信息增益:
表示的是得知特征X的信息使得类别Y的不确定性的减少程度
信息增益的算法及步骤:
输入:训练数据集D,特征A
输出:特征A对训练集的信息增益g(D,A)
步骤:
某个特征的信息增益越大,选择该特征优先划分的决策效率则越高。
二、决策树案例实践
本文采用scikit-learn库,先介绍下决策树的API:class.sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random_state=None)
决策树分类器,其主要参数及表示为:
criterion:默认为'gini'系数,也可以选择信息增益的熵'entropy'
max_depth:树的深度的大小
random_state:随机数种子
案例背景介绍:利用决策树模型判断是否鸢尾花,数据集为sklearn的鸢尾花数据集,共150个样本,4个特征
from sklearn import datasets
from sklearn.model_selection import train_test_split #划分数据集
from sklearn.tree import DecisionTreeClassifier # 引入决策树
from sklearn.tree import export_graphviz #决策树的可视化
def decision_tree():
# 1.获取数据
data=datasets.load_iris()
# 2.数据集划分
x_train,x_test,y_train,y_test=train_test_split(data.data,data.target,random_state=22)
# 3.决策树模型
# 1)实例化对象
estimate=DecisionTreeClassifier(criterion="entropy") #entropy代表信息增益;gini代表基尼系数
# 2)调用模型
estimate.fit(x_train, y_train)
predict_y=estimate.predict(x_test)
print("测试集的预测值为:",predict_y)
print("预测值与真实值的对比:", predict_y == y_test)
accuracy=estimate.score(x_test,y_test)
print("测试集的准确率为:", accuracy)
return None
# 4.决策树的可视化
export_graphviz(estimate,out_file="iris_decisionTree.dot")
if __name__=="__main__":
#sklearn数据集的使用
decision_tree();
返回的结果如下:
测试集的预测值为: [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
三、决策树的总结
优点:简单易于理解,可解释能力强,树木可视化
缺点:不适合数据过于复杂的树,容易过拟合
缺点改进方案:1)CART减枝 2)随机森林(RF)
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【原创】机器学习算法原理与实践-决策树(文章迁移) - Python技术站