简述决策树算法,决策树分类和预测算法的原理及实现
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 概率作为输入
皇家对空观察队曲线
世鹏科技电子可以得到方向性促进作用还是抑制作用
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。