决策树分类算法及python实现

目标值是分类型变量,特征值(属性值/自变量)可以是分类型,也可以是连续型。

1、决策树概括

思想:划分某个特征变量判断类别,接着在该特征变量的条件下继续划分下一个特征变量,一直到特征变量划分完或者确定有好的分类结果后结束划分,最终确定属于哪个分类,也就是if...elif...else...的思想。

问题:众多的特征变量中,先进行哪些特征变量的划分效果/效率会更高呢?需要引入基尼系数、信息熵、信息增益、信息增益比等。

  • 基尼系数、信息熵衡量节点(特征变量)的纯度:
  • python数据分析—决策树分类算法及python实现_决策树

    python数据分析—决策树分类算法及python实现_信息增益_02

  • 信息增益、信息增益比—决策树的划分依据
  • python数据分析—决策树分类算法及python实现_决策树_03

    python数据分析—决策树分类算法及python实现_信息增益_04

  • 决策树的生成:
  • 贪婪算法:只能局部最优(具有单一属性分类的节点最佳,到此节点认为分类达到准确)。
  • 根据某一属性对数据进行分裂,以达到某一标准的最优值。

2、3种决策树的原理

  • ID3:准则:信息增益最大的准则。
  • C4.5:信息增益比最大的准则。
  • CART(分类树):基尼系数(GINI)最小的准则。在sklearn中可以选择划分的默认原则,优势是划分更加细致(从后面例子的树显示来理解)。

3、python决策树分类API

语法:sklearn.tree.DecisionTreeClassifier(criterion='gini',max_depth=None,random_state=None)

  • tree.DecisionTreeClassifier():决策树分类器
  • criterion:默认是'gini'系数,也可以选择信息增益的'entropy'
  • max_depth:树的深度大小
  • random_state:随机数种子

4、tree可视化

win10安装GraphViz:

  • 下载路径:https://www2.graphviz.org/Packages/stable/windows/10/cmake/Release/x64/
  • 下载安装包:graphviz-install-2.44.1-win64.exe
  • 按照提示安装完成--重要步骤
  • python数据分析—决策树分类算法及python实现_决策树_05

    python数据分析—决策树分类算法及python实现_决策树_06

    python数据分析—决策树分类算法及python实现_交叉验证_07

  • 安装完成后,将bin目录加入到系统path环境变量中。

安装graphviz的python库

cmd下conda install python-graphviz(或 pip install graphviz)命令安装即可

安装pydotplus

cmd下pip install pydotplus

生成树文本的API:

  • sklearn.tree.export_graphviz(estimator,out_file='tree.dot',feature_names=["","",...]) #该函数能够导出DOT格式
  • tree.export_graphviz(模型预估器,导出目录,特征值(变量)名称)

可视化展现API

  • 网站:http://webgraphviz.com/,然后粘贴tree.dot,并执行(需要安装和配置环境变量)
  • 或者:打开cmd,切换到tree.dot目录下,执行:dot -Tpdf tree.dot -o output.pdf,打开pdf

5、案例

from sklearn import datasets      #机器学习数据集库
from sklearn.model_selection import train_test_split  #数据集划分
from sklearn.tree import DecisionTreeClassifier   #可以按照ginf系数或者信息增益entropy的决策树算法
from sklearn.model_selection import GridSearchCV    #网格搜索和交叉验证
from sklearn.tree import export_graphviz  #决策树可视化文件生成

'''# 1 获取数据:使用datasets.load_iris的数据'''
#sklearn.datasets.load_*()        # *:表示某个数据集的名称,load_:获取小规模数据集
df = datasets.load_iris()       #iris:花儿的数据集
# display(df.data)  #返回特征值(自变量)数组
# display(df.target) #返回目标值(因变量)数组
# print(df["DESCR"]) #返回描述信息
# display(df["feature_names"]) #返回特征值的字段名称
# display(df.feature_names) #返回特征值的字段名称
# display(df.target_names) #返回目标值数字对应解释

'''# 2 数据清新(略)'''

'''# 3 特征工程(略)'''

'''# 4 数据集划分'''
x_train,x_test,y_train,y_test = train_test_split(df.data,df.target,test_size=0.25,random_state=11)
print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)

'''# 5、tree预估器训练模及型选择'''
#实例化一个转换器类
#estimator = DecisionTreeClassifier(criterion='gint',max_depth=None,random_state=11)

#加入模型选择与调优,网格搜索和交叉验证
#网格搜索和交叉验证
estimator = DecisionTreeClassifier(random_state=11)
#准备参数
param_dict = {"criterion":['entropy','gini']}
estimator = GridSearchCV(estimator,param_grid=param_dict,cv=10) #cv=10是10折交叉验证

#执行预估器
estimator.fit(x_train,y_train)

'''# 6、模型评估选择'''
#方法1:比对真实值和预测值
y_predict = estimator.predict(x_test)  #计算预测值
print(y_predict)
#方法2:直接计算准确率
accuracy=estimator.score(x_test,y_test)
print(accuracy)

# 3、查看网格搜索和交叉验证返回结果
# 最佳参数:best_params_
print("最佳参数k:",estimator.best_params_)
# 验证集的最佳结果:best_score_
print("验证集的最佳结果准确率:",estimator.best_score_)
# 最佳估计器:best_estimator_
print("最佳估计器",estimator.best_estimator_)
# 交叉验证结果:cv_results_
# print(estimator.cv_results_)  #比较长这里就不输出了

'''tree可视化文件.dot的生成'''
export_graphviz(estimator.best_estimator_,out_file=r'tree.dot',feature_names=df.feature_names)
#estimator.best_estimator_ :使用最终估计器
# 然后打开cmd,执行:dot -Tpdf D:\jupyter代码\python脚本\tree.dot -o  D:\jupyter代码\python脚本\output.pdf

python数据分析—决策树分类算法及python实现_信息增益_08

python数据分析—决策树分类算法及python实现_交叉验证_09

更多相关内容扫描下方二维码



python数据分析—决策树分类算法及python实现_信息增益_10

更多数据分析数据运营

干货在此,随时学习!



阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python