简述决策树算法,决策树分类和预测算法的原理及实现

  简述决策树算法,决策树分类和预测算法的原理及实现

  1.决策树概念及应用场景

决策树概念

  决策树是一种以树型结构形式表达的预测分析模型,一般一棵决策树包含

一个根节点

若干个内部节点和叶节点

;叶节点对应决策结果,其他每个节点对应于一个属性;每个节点包含的样本集合根据属性测试被划分到子节点中;根节点包含样本全集,从根节点到每个叶节点的路径对应了一个判定测试序列。

决策树种类有两种:分类树对离散变量做决策树

;回归树对连续变量做决策树。决策树常常用来解决分类和回归问题,在实际工作中基本应用于给人群分类,最好的应用场景是要把人群分为互斥的两类,并找到两类人群的不同特征。

  2.决策树原理决策树主要分为两部分:创建决策树、使用决策树模型进行预测,如下图所示。

  熵

  

信息增益

  信息增益率

  基尼指数

  最小方差

  3.示例:

年龄

性别:

(3)收入

  

(4)婚姻

  如何确定第一个分支

  4.剪枝

  5.计算机编程语言做决策树步骤1)建立树模型

  2)剪枝

  3)输出结果

  以分类树为基准:

各个参数的意思

  

重要参数和剪枝

  ##6.世鹏科技电子

  

:决策树一般用于变量选择,决策树是后续学习随机森林的基础。

  代码部分实操: #获取数据来自sklearn.tree导入决策树分类器导入numpy作为NP导入pandas作为PD导入matplotlib。py绘图为PLT数据=PD。read _ table( C:/Users/lb/Desktop/test/吴钩。txt )# data=PD。read _ table( C:/用户/戴尔/台式机/吴钩。 txt ,sep=t ,engine=python ,encoding= utf-8 )数据。列。价值数据。头部()

  从sklearn.model_selection导入train _ test _ split data _ x=data。drop([留存标签],axis=1)data_y=data[留存标签]训练_x,测试_x,训练_y,测试_y=训练_测试_拆分(数据_x,数据_y,测试_大小=0.1,随机_状态=8) R^2

  clf=决策树分类器(criteria= Gini ,max_depth=2,min_samples_leaf=5,min_samples_split=2,random_state=0)clf.fit(train_x,train_y)score=clf.score(test_x,test_y)score

  PLT。RC params[ font。sans-serif ]=[ sim hei ]#显示中文标签PLT。RC params[轴。unicode _ MINUS ]=False #用来正常显示负号

树的可视化

  从IPython .显示器导入pydotplusfrom导入显示,图像点数据=树。export _ graphviz(clf,out_file=None,feature_names=train_x.columns,class_names=[留存,非留存],filled=True,rounded=True)graph=pydotplus。图形_从_点_数据(点_数据)显示(图片(图形。create _ png()))

网格搜索调参

  #网格搜索从sklearn.model_selection导入cross_val_score,GridSearchCVparamaters={ criterion :( Gini , entropy ), min_samples_split:[2,3,4,5], max_depth:range(1,5), class_weight:(balanced ,None), presort:(False,True) }tr=tree .决策树分类器()g search=GridSearchCV(tr,paramaters)gsearch.fit(train_x,train_y)

  型号=g搜索。最佳估计模型

  得分=模型.得分(训练_x,训练_y)分数

调参过后由 72%提升到 76%

  模型。特征_重要性_

  [*zip(train_x.columns,clf。feature _ importances _)]

学习曲线确定数的深度:

  #用学习曲线确定最优最大深度取值test=[]for I in range(100):clf=tree .决策树分类器(max _ depth=I 1,criterion=entropy ,random_state=30,splitter= random )clf=clf。fit(train _ x,train_y) score=clf.score(test_x,test _ y)测试。附加(得分)计划。plot(range(1,101),test,color=red ,label= max _ depth )。图例()工厂。显示()

EIL5

  从eli5。沙王导入Eli 5了解导入置换重要性#由到,进降序perm=排列重要性(模型,随机状态=1).fit(test_x,test_y)eli5.show_weights(perm,feature _ names=test _ x . columns。to list())#把电烫发加载进来

  绿色表示特征越重要

  世鹏科技电子

  导入shapexplainer=shap .TreeExplainer(型号)# #传入特征矩阵x,计算世鹏科技电子值shap _ values=解释者。shap _ values(train _ x)print( * " * 80)# #计算,共是2的数据,打印(形状值)形状。初始化js()#显示格式转换

  #返回的世鹏科技电子价值观中包括了否定和积极的两种情况,通常选择种(阳性)即可。 #显示shap。summary _ plot(shap _ values[1],train_x,plot_type=bar )

  shap.summary_plot(shap_values,train_x,plot_type=bar )

  #摘要图#我的型号最一开始训练的模型解释者=shap .树解释器(模型)#val_X表示测试集shap _ values=解释者。形状值(火车x)#阳性赢形状摘要图(形状值[1],训练x)

  这里用形状值[1]

  红色越多对模型(结果)的促进作用越强

  #随机森林# 随机森林来自sklearn.ensemble导入sk learn的RandomForestClassifier。韵律学导入roc _ AUC _ score score=[]for I in range(1,500,10):model=RandomForestClassifier(n _ estimators=I,criterion=gini ,bootstrap=True)模型。拟合(训练x,训练y)RF预测=模型。预测(test _ x)RF _ probs=模型。predict _ proba(test _ x)[:1]roc _ value=roc _ AUC _ score(test _ y,RF _ prob确定范围将matplotlib.pyplot导入为pltprint(max(score))#找到使得最大时候的决策树数的数量打印(分数。指数(最大值(分数))* 10 1)PLT。图(figsize=[20,5])plt.plot(范围(1,500,10),分数)

roc_auc_score 概率作为输入

  皇家对空观察队曲线

  世鹏科技电子可以得到方向性

促进作用还是抑制作用

简述决策树算法,决策树分类和预测算法的原理及实现