您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 揭秘Python中的模型集成_光环大数据python培训(PDF40页)
光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com揭秘Python中的模型集成_光环大数据python培训集成方法可将多种机器学习模型的预测结果结合在一起,获得单个模型无法匹敌的精确结果,它已成为几乎所有Kaggle竞赛冠军的必选方案。那么,我们该如何使用Python集成各类模型呢?本文作者,曼彻斯特大学计算机科学与社会统计学院的在读博士SebastianFlennerhag对此进行了一番简述。在Python中高效堆叠模型集成(ensemble)正在迅速成为应用机器学习最热门和流行的方法。目前,几乎每一个Kaggle冠军的解决方案都使用了集成,很多数据科学pipeline也使用集成。简单来说,集成把不同模型的预测结果结合起来,生成最终预测,集成的模型越多,效果就越好。另外,由于集成结合了不同的基线预测,它们的性能至少等同于最优的基线模型。集成使得我们几乎免费就获得了性能提升!集成图示。输入数组X通过两个预处理pipeline输入至多个基学习器f(i)。集成将所有的基学习器的预测结果结合起来,导出最终的预测数组P。(图片来源:)本文介绍集成的基础知识:定义及工作原理,并提供构建基础集成的实践教程。阅读本文,你将:理解集成的基础知识;光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com了解如何编写集成;理解集成的主要优缺点。预测共和党和民主党的捐款在本文中,我们将使用美国政治捐款数据集来解释集成的工作原理。该数据集最初由FiveThirtyEight的BenWieder制作,他查阅美国政府的政治捐款记录,发现科学家向政治家们捐款时,通常会选择民主党。该论断基于向共和党和民主党捐款数额的比例。但是,我们还可以从中看出更多事情:比如,哪个学科最可能捐款给共和党,哪个州最可能捐款给民主党。我们将更进一步,预测捐款更可能的流向。此处使用的数据经过稍微修改()。我们删除了捐款给共和党和民主党之外的其他党派的捐款信息,以使过程更加清晰,并且还去除了重复信息和不太有趣的特征。数据脚本地址:。数据如下:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotasplt%matplotlibinline光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com###Importdata#AlwaysgoodtosetaseedforreproducibilitySEED=222np.random.seed(SEED)df=pd.read_csv(‘input.csv’)###Trainingandtestsetfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportroc_auc_scoredefget_train_test(test_size=0.95):“””SplitDataintotrainandtestsets.”””y=1*(df.cand_pty_affiliation==“REP”)X=df.drop([“cand_pty_affiliation”],axis=1)光环大数据--大数据培训&人工智能培训://hadoop.aura-el.comX=pd.get_dummies(X,sparse=True)X.drop(X.columns[X.std()==0],axis=1,inplace=True)returntrain_test_split(X,y,test_size=test_size,random_state=SEED)xtrain,xtest,ytrain,ytest=get_train_test()#Alookatthedataprint(“nExampledata:”)df.head()df.cand_pty_affiliation.value_counts(normalize=True).plot(kind=”bar”,title=”ShareofNo.donations”)plt.show()上图是Ben的论断的数据依据。确实,75%的捐款是给民主党的。我们来看一下可以使用的特征,我们具备捐款人、交易详情和捐款接受者的数据信息:光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com我们使用ROC-AUC来评估模型性能。如果你之前没用过该指标,随机猜测可以是0.5分,完美的召回率和精确率是1.0。什么是集成?想象一下你在玩常识问答游戏。一个人玩时,可能会有一些题你完全不了解。如果我们想获得高分,就需要组建一个团队来覆盖所有相关主题。这就是集成的基本概念:结合多个模型的预测,对特异性误差取平均,从而获得更好的整体预测结果。一个重要问题是如何结合预测。以常识问答游戏为例,我们很容易想象到团队成员可能会使用多数投票的方式确定选择哪个答案。机器学习的分类问题也是一样:作出最常见的类别标签预测相当于多数投票规则。但是也有很多其他方式可以结合预测,通常我们会使用一个模型来学习如何最好地结合预测结果。基础集成的结构。输入输送至一系列模型中,元学习器将多个模型的预测结果结合起来。(图片来源:)通过决策树理解集成我们用一个简单的可解释性模型来解释集成:使用if-then规则的决策树。决策树越深,可以捕捉的模式就越复杂,不过也更有可能出现过拟合。因此,我们需要另一种方式来构建决策树的复杂模型,而不同决策树的集成就是这样一种方式。光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com我么使用下列辅助函数来可视化决策树:importpydotplus#youcaninstallpydotpluswith:pipinstallpydotplusfromIPython.displayimportImagefromsklearn.metricsimportroc_auc_scorefromsklearn.treeimportDecisionTreeClassifier,export_graphvizdefprint_graph(clf,feature_names):“””Printdecisiontree.”””graph=export_graphviz(clf,label=”root”,proportion=True,impurity=False,out_file=None,光环大数据--大数据培训&人工智能培训://hadoop.aura-el.comfeature_names=feature_names,class_names={0:“D”,1:“R”},filled=True,rounded=True)graph=pydotplus.graph_from_dot_data(graph)returnImage(graph.create_png())在训练数据上用决策树拟合一个节点(决策规则),查看它在测试集上的性能:t1=DecisionTreeClassifier(max_depth=1,random_state=SEED)t1.fit(xtrain,ytrain)p=t1.predict_proba(xtest)[:,1]print(“DecisiontreeROC-AUCscore:%.3f”%roc_auc_score(ytest,p))光环大数据--大数据培训&人工智能培训://hadoop.aura-el.comprint_graph(t1,xtrain.columns)决策树的ROC-AUC得分:0.672每个叶节点记录它们在训练样本中的比例、类别分布和类别标签预测。我们的决策树根据捐款金额是否超过101.5进行预测:它竟然作出了同样的预测!鉴于75%的捐款都给了民主党,这个结果并不令人惊讶。但是这没有充分利用我们已有的数据,下面我们使用三层决策规则,看看会得到什么:t2=DecisionTreeClassifier(max_depth=3,random_state=SEED)t2.fit(xtrain,ytrain)p=t2.predict_proba(xtest)[:,1]print(“DecisiontreeROC-AUCscore:%.3f”%roc_auc_score(ytest,p))print_graph(t2,xtrain.columns)决策树的ROC-AUC得分:0.751该模型并不比简单的决策树好太多:预测到的共和党捐款金额比例只有5%,远远低于25%。仔细观察会发现该决策树使用了很多不确定的分割规则(splittingrule)。观察结果中高达47.3%的结果在最左边的叶节点中,而光环大数据--大数据培训&人工智能培训://hadoop.aura-el.com35.9%在右二的叶节点中。因此大量叶节点没有关联。使该模型更深只会导致过拟合。在深度固定的情况下,决策树可以通过增加「宽度」的方式来增加复杂度,即创建多个决策树,并将其连接起来。也就是决策树的集成。想了解这个集成模型为什么会起作用,先要考虑我们如何让决策树探索出比上层树更多的其他模式。最简单的解决方案就是删除树中较早出现的特征。假如我们删除了转账金额特征(transaction_amt),树的根节点,则新的决策树如下:drop=[“transaction_amt”]xtrain_slim=xtrain.drop(drop,1)xtest_slim=xtest.drop(drop,1)t3=DecisionTreeClassifier(max_depth=3,random_state=SEED)t3.fit(xtrain_slim,ytrain)p=t3.predict_proba(xtest_slim)[:,1]print(“DecisiontreeROC-AUCscore:%.3f”%roc_auc_score(ytest,p))光环大数据--大数据培训&人工智能培训://hadoop.aura-el.comprint_graph(t3,xtrain_slim.columns)决策树的ROC-AUC得分:0.740ROC-AUC得分与上树得分类似,但是共和党捐款比例增加至7.3%。还是很低,但比之前稍高一些。重要的是,与第一个树相反(第一个树大部分规则与转账本身相关),这棵树更专注于候选人的居住地。现在我们有两个模型,二者预测能力相近,但基于不同的规则运行。因此,它们可能出现不同的预测误差,我们可以使用集成方法取其平均数。为什么平均预测有作用假如我们要基于两个观察结果生成预测。第一个观察结果的真正标签为共和党,第二个是民主党
本文标题:揭秘Python中的模型集成_光环大数据python培训(PDF40页)
链接地址:https://www.777doc.com/doc-29376 .html