消息详情

从决策树到随机丛林:树型算法的道理取实现
作者:admin 发布于:2019-04-14

  因而,更好的策略是建立一个很是大的树 T_0,然后再剪枝,获得一棵子树。剪枝能够利用多种策略。价格复杂度剪枝(Cost complexity pruning),又叫最弱毗连剪枝(weakest link pruning),就是此中一种行之无效的策略。除了考虑每一个可能的子树之外,还需要考虑由非负调参(nonnegative tuning parameter)α 索引的树序列。每一个 α 值都对应一个尽可能小的子树 T⊂T_0。

  因为决策树容易对数据发生过拟合,因而分支更少(即削减区域 R_1, … ,R_J)的小树虽然误差略微高一点,但其发生的方差更低,可注释性更强。处置上述问题的一种方式是建立一棵树,每个分支跨越某个(高)阈值形成叶结点误差率 Qm 下降,则竣事建立。可是,因为算法的素质,它其实很短视。决策树晚期看似无用的一次有可能会导致之后一次优良的,并使得 Qm 大幅下降。

  若是某些类别占领从导地位,则决策树进修器建立的决策树会有误差。因而保举做法是正在数据集取决策树拟合之前先使数据集连结平衡。

  即便没有任何优化,我们仍然发觉模子机能能够和已优化决策树分类器相媲美,而且测试分达到了 85.1%。按照下面的混合矩阵,我们发觉简单的随机丛林和颠末优化的树型分类器表示差不多,其正在次要类别(=50K 收入)的预测精度达到了 92.1%,而正在少数类别(50K 收入)上达到了 62.6%。

  比来,有良多关于性别对收入差距的影响的相关说法。我们能够别离看见男性和女性的教育程度和种族间的影响。

  如下所示,我们还需要做一些数据清洗。我们需要将所有列的的特殊字符移除,此外任何空格或者「.」都需要移除。

  让我们看一下调校此简单分类器的方式。我们能利用带有 5 折交叉验证的 GridSearchCV() 来调校树分类器的各类主要参数。

  父结点和子结点:若是一个结点往下,该结点称之为父结点而父结点所出来的结点称之为子结点。

  2. 对进入区域 R_J 的每一个样本不雅测值都进行不异的预测,该预测就是 R_J 中锻炼样本预测值的均值。

  分类树的生成和回归树的生成十分类似。正如正在回归树中那样,我们一般利用递归性的二元朋分来生成分类树。然而正在分类树中,RSS 不克不及做为二元朋分的尺度。我们需要定义叶结点的不纯怀抱 Q_m 来替代 RSS,即一种能够正在子集区域 R_1,R_2,...,R_j 怀抱方针变量同质性的方式。正在结点 m 中,我们能够通过 N_m 个样本察看值暗示一个区域 R_m 所呈现类此外频次,第 k 个类别正在第 m 个区域下锻炼所呈现的频次可暗示为:

  CART 模子包罗选择输入变量和那些变量上的朋分点,曲到建立出恰当的树。利用算法(greedy algorithm)选择利用哪个输入变量和朋分点,以使成本函数(cost function)最小化。

  结点的最小样本数:正在结点中所要求的最小样本数量(或察看值数量)。这种方式凡是能够用来防止过拟合,较大的最小样本数能够防止模子对特定的样本进修过于具体的关系,该超参数该当需要利用验证集来调整。

  随机丛林通过随机扰动而令所有的树去相关,因而随机丛林要比 Bagging 机能更好。随机丛林不像 Bagging,正在建立每一棵树时,每一个结点朋分前都是采用随机样本预测器。由于正在焦点思惟上,随机丛林仍是和 Bagging 树一样,因而其正在方差上有所削减。此外,随机丛林能够考虑利用大量预测器,不只由于这种方式削减了误差,同时局部特征预测器正在树型布局中充任主要的决策。

  正在锻炼集和测试集中,我们发觉 =50K 的类别要比50K 的多 3 倍。从这里我们就能够看出来样本数据并不是平衡的数据,可是正在这里为了简化问题,我们正在这里将该数据集看做常规问题。

  决策树进修算法正在实践中凡是基于式算法,如算法,正在每一个结点做出局部最优决策。此类算法无法确保前往全局最优决策树。

  此中 yhat_R1 为区域 R_1(j,s) 中察看样本的平均预测值,yhat_R2 为区域 R_2(j,s) 的察看样本预测均值。这一过程不竭反复以搜索最好的预测器和切分点,并进一步分隔数据以使每一个子区域内的 RSS 最小化。然而,我们不会朋分整个预测器空间,我们只会朋分一个或两个前面曾经认定的区域。这一过程会一曲持续,曲达到到遏制原则,例如我们能够设定遏制原则为每一个区域最多包含 m 个察看样本。一旦我们建立了区域 R_1、R_2、...、R_J,给定一个测试样本,我们就能够用该区域所有锻炼样本的平均预测值来预测该测试样本的值。

  若是我们但愿以数学的体例理处理策树,我们起首需要领会决策树和树型进修算法的一般概念。理解以下的术语同样能帮帮我们调整模子。

  叶结点最小样本数:叶结点所要求的最小样本数。和结点的最小样本数一样,该超参数同样也能够用来节制过拟合。对于不均衡类别问题来说,我们该当取较小的值,由于属于较少类此外样本可能数量上很是少。

  通过利用单一树,Bagging 凡是会提拔预测的切确度。可是,注释最终的模子可能很坚苦。当我们袋拆大量的树时,就不再可能利用单一的树表征最终的统计进修流程,因而,Bagging 是以阐释机能力为价格来提拔预测切确度的。风趣的是,一小我可利用 RSS(用于 bagging 回归树)或者基尼指数(用于 bagging 分类树)获得每一个预测器的全体总结。正在 bagging 回归树的环境中,我们能够记实因为所有的 B 树上平均的给定预测而形成的 RSS 削减的所无数量。一个大的值暗示一个主要的预测器。类似地,正在 bagging 分类树的环境下,我们能够添加因为所有的 B 树上平均的给定预测而形成的基尼系数降低的所无数量。一旦锻炼完成,sklearn 模块的分歧袋拆树(bagged tree)进修方式可间接拜候特征的主要性数据做为属性。

  正在统计学中,Bootstrap 是依托替代随机采样的肆意试验或怀抱。我们从上文能够看见,决策树会遭到高方差的搅扰。这意味着若是我们把锻炼数据随机分成两部门,而且给二者都安设一个决策树,我们获得的成果可能就会相当分歧。Bootstrap 堆积,或者叫做袋拆,是削减统计进修方式的方差的通用过程。

  颠末优化,我们发觉精度上升到了 85.9%。正在上方,我们也能够看见最优模子的参数。现正在,让我们看一下 已优化模子的混合矩阵(confusion matrix):

  正在消息论里面,交叉熵函数用来权衡系统的紊乱度。对于二元系统来说,若是系统包含了一个类此外所有内容,那么它的值为零,而若是两个类此外数量一样多,那么交叉熵达到最大为 1。因而,和 Gini 指数一样,交叉熵函数同样能用于怀抱结点的不纯度:

  这里∣T∣代表树 T 中叶结点的数量,R_m 代表第 m 个叶结点对应的矩形(预测器空间的子集),yhat_Rm 是 Rm 的预测值,即 Rm 中锻炼样本预测值的均值(或分类树中的模式响应)。调整参数 α 节制子树复杂度之间的衡量,对锻炼数据进行拟合。当 α= 0 的时候,子树 T 等同于 T_0。当α的值增加时,建立具备多个子结点的树需要付出价格,如许,要想获得更小的子树,上述公式将达到最小化。我们能够利用某种交叉验证方式选择剪枝参数 α 。

  虽然袋拆手艺(Bagging)通过降低方差而提高了一般决策树的预测机能,但它还碰到了其他错误谬误:Bagging 要求我们正在自帮样本上生成整棵树,这就添加了 B 倍计较复杂度。此外,由于基于 Bagging 的树是相联系关系的,预测精度会按照 B 而饱和。

  曲到现正在,我们仅关心了非数值特征(non-numeric)的彼此关系。现正在我们看一下本钱收益(CapitalGain)和本钱丧失(CapitalLoss)对收入的影响。

  为了建立 J 个区域 R_1,R_2,...,R_J,预测器区域被分为高维度的矩形或盒形。其目标正在于通过下列式子找到可以或许使 RSS 最小化的盒形区域 R_1,R_2,...,R_J,

  正如前面所切磋的,随机丛林模子还供给了特征主要性的怀抱方式。我们能够鄙人图中看到目前模子分歧特征的主要性:

  结点规模:随机丛林不像决策树,每一棵树叶结点所包含的察看样本数量可能十分少。该超参数的方针是生成树的时候尽可能连结小误差。

  基于树(Tree based)的进修算法正在数据科学竞赛中是相当常见的。这些算法给预测模子付与了精确性、不变性以及易注释性。和线性模子分歧,它们对非线性关系也能进行很好的映照。常见的基于树的模子有:决策树(decision trees)、随机丛林(random forest)和提拔树(boosted trees)。

  这就叫做袋拆(bagging)。留意,堆积(aggregating)正在回归和分类问题中可能有分歧的均值。当平均预测值正在回归问题中的结果很好时,我们将会需要利用大都票决(majority vote):因为分类问题中的堆积机制,全体预测就是正在 B 个预测值中最常呈现的阿谁次要类别。

  某些类此外函数很难利用决策示范型来建模,如 XOR、奇偶校验函数(parity)和数据选择器函数(multiplexer)。

  决策树是一种监视进修算法。它合用于类别和持续输入(特征)和输出(预测)变量。基于树的方式把特征空间划分成一系列矩形,然后给每一个矩形安设一个简单的模子(像一个)。从概念上来讲,它们是简单且无效的。起首我们通过一个例子来理处理策树。然后用一种正轨阐发方式来阐发建立决策树的过程。考虑一个简单的假贷公司顾客的数据调集。我们给定了所有客户的查询账户余额、信用记实、任职年限和先前贷款情况。相关使命是预测顾客的风险品级能否可托。该问题能够利用下列决策树来处理:

  鉴于这种空间朋分正在计较上是不成行的,因而我们常利用方式(greedy approach)来划分区域,叫做递归二元朋分(recursive binary splitting)。

  总的来说,随机丛林正在良多使命上一般要比提拔方式的精度差,而且运转时间也更长。所以正在 Kaggle 竞赛上,有良多模子都是利用的梯度提拔树算法或其他优良的提拔方式。

  现正在我们理解了我们数据中的一些关系,所以就能够利用 sklearn.tree.DecisionTreeClassifier 建立一个简单的树分类器模子。然而,为了利用这一模子,我们需要把所有我们的非数值数据成数值型数据。我们能够间接正在 Pandas 数据框架中利用eEncoder 模块和 sklearn_pandas 模块就能够轻松地完成这一步调。

  它是的(greedy),这是由于正在建立树过程中的每一步调,最佳朋分城市正在每个特定步调选定,而不是对将来进行预测,并拔取一个将会正在将来步调中呈现且有帮于建立更好的树的分隔。留意所有的划分区域 R_j 都是矩形。为了进行递归二元朋分,起首拔取预测器 X_j 和切割点 s

  考虑到该函数不成微,因而它不克不及实现数值优化。此外,该函数正在结点概率改变上并不,因而这种分类误差率对于生成树十分低效。我们一般利用 Gini 指数和交叉熵函数来权衡结点的误差怀抱。

  现正在,让我们以图像的形式看一下锻炼数据中的分歧特征的分布和彼此依存(inter-dependence)关系。起首看一下关系(Relationships)和婚姻情况(MaritalStatus)特征是若何彼此联系关系的。

  不纯性怀抱 Q_m 一个比力天然的方式是分类误差率。分类误差率描述的是锻炼察看值正在某个区域内不属于最常见类此外概率:

  给定一组 n 个的样本不雅测值 Z_1,Z_2,...,Z_n,每一个值的方差均为 *σ^*2,样本不雅测值的均值方差为 *σ^*2/*n*。换句话说,对一组不雅测值取平均会减小方差。因而一种减小方差的天然体例,也就是添加统计进修方式预测精度的体例,就是从总体中取出良多锻炼集,利用每一个锻炼集建立一个分手的预测模子,而且对预测成果求取平均值。

  Age 和 EdNum 列是数值型的,我们能够将持续数值型为更高效的体例,例如将春秋换为 10 年的整数倍,教育年限换为 5 年的整数倍,实现的代码如下:

  叶结点的最大数量:叶结点的最大个数能够替代数的最大深度这一设定。由于生成一棵深度为 n 的二叉树,它所能发生的最大叶结点个数为 2^n。

  我们能够看到现正在的模子要显著地比前面的更好一些,而且预测率达到了 86.6%。按照下面的混合矩阵,新模子正在次要类此外预测精度上有显著的提拔,而且正在少数类此外预测上精度只稍微降低了一点。这均衡数据遍及存正在的问题。

  1. 把预测器空间,即一系列可能值 X_1,X_2,...,X_p 分成 J 个分歧的且非堆叠的区域 R_1,R_2,...,R_J。

  分类树和回归树十分类似,只不外它是定性地预测响应值而非定量预测。从上文可知,回归树对一个察看值所预测的持续型数值就是属于统一叶结点锻炼样本察看值的均值。可是对于分类树来说,我们所预测的类别是锻炼样本察看值正在某区域下最常见的类别,即锻炼察看值的模式响应(mode response)。为了达到分类目标,良多时候系统并不会只预测一个类别,它常常预测一组类别及其呈现的概率。

  树的最大深度(垂曲深度):该超参数同样能够用来节制过拟合问题,较小的深度能够防止模子对特定的样本进修过于具体的关系,该超参数同样需要正在验证集中调整。

  所需要考虑的最大特征数:即当我们搜刮更好分手方案时所需要考虑的特征数量,我们常用的方式是取可用特征总数的平方根为最大特征数。

  凡是我们会有一些预测器能从导决策树的拟合过程,由于它们的平均机能一直要比其他一些合作预测器更好。因而,其它很多对局部数据特征有用的预测器并不会选定做为朋分变量。跟着随机丛林计较了脚够多的决策示范型,每一个预测器都至多有几回机遇能成为定义朋分的预测器。大大都环境下,我们不只仅只要从导预测器,特征预测器也无机会定义数据集的朋分。

  大部门能够通过改善决策树等闲处理。鄙人面的内容中,我们将引见相关的几个概念,沉点引见袋拆和随机丛林。

  正在本篇文章中,我们将会引见决策树的数学细节(以及各类 Python 示例)及其优错误谬误。你们将会发觉它们很简单,而且这些内容有帮于理解。然而,取最好的监视进修方式比拟,它们凡是是没有合作力的。为了降服决策树的各类错误谬误,我们将会聚焦于各类概念(附有 Python 实例),好比自帮堆积或袋拆(Bootstrap Aggregating or Bagging),还有随机丛林(Random Forests)。另一种普遍利用的提拔朴直在当前进行零丁会商。每种方式都包罗生成多种树,这些树被结合起来,生成一个单一的分歧性预测成果,而且经常带来预测精度的显著提拔。

  最简单的且没有优化的概率分类器模子能够达到 83.5% 的精度。正在分类问题中,混合矩阵(confusion matrix)是权衡模子精度的好方式。利用下列代码我们能够绘制肆意基于树的模子的混合矩阵。

  Bagging 方式最大的劣势是我们能够欠亨过交叉验证而求得测试误差。回忆一下,Bagging 方式的精髓是多棵树能够反复地拟合察看样本的自帮子集。平均而言,每一个袋拆树能够操纵 2/3 的察看样本。而剩下的 1/3 察看样本就能够称为 out-of-bag (OOB) 察看样本,它们并不会拟合逐个棵给定袋拆树。我们能够利用每一棵树的 OOB 察看样本而计较第 i 个察看样本的预测值,这将会导致大约有 B/3 的预测值能够预测第 i 个察看样本。现正在我们能够利用和 Bagging(平均回归和大大都投票分类)雷同的堆积手艺,我们能获得第 i 个察看样本的单一预测值。我们能够用这种体例获得 n 个察看样本的 OOB 预测,因而总体的 OOB MSE(回归问题)和分类误差率(分类问题)就能计较出来。OOB 误差成果是 Bagging 模子测试误差的无效估量,由于每一个样本的预测值都是仅仅利用不会进行拟合锻炼模子的样本。

  正如上图所示,有两行描述了小我的教育:Eduction 和 EdNum。我们假设这两个特征十分相关,因而我们能够移除 Education 列。Country 列对预测收入并不会起到什么感化,所以我们需要移除它。

  正在的代码中,我们起首需要导入所有需要的库和模块,然后再读取数据和布局到锻炼数据和验证数据中。我们同样去除 fnlgwt 列,由于该数据行对于模子的锻炼并不主要。

  随机丛林能够利用巨量的预测器,以至预测器的数量比察看样本的数量还多。采用随机丛林方式最显著的劣势是它能获得更多的消息以削减拟合数值和估量朋分的误差。

  当我们需要揣度超出范畴的变量或非变量,随机丛林做得并欠好,我们最好利用如 MARS 那样的算法。

  预测器采样的数量:一般来说,若是我们一共有 D 个预测器,那么我们能够正在回归使命中利用 D/3 个预测器数做为采样数,正在分类使命中利用 D^(1/2) 个预测器做为抽样。

  为了展现分歧的前文所述的决策示范型,我们将利用 Kaggle 上的美国收入数据集,我们都能够正在上下载该数据集。下面的代码能够展现该数据集的导入过程和部门内容:

  现正在我们能够测验考试优化我们的随机丛林模子,如下我们能够利用带 5-折交叉验证的 GridSearchCV() 操做来优化随机丛林:

  这里有一个问题,即我们不克不及获取多个锻炼数据集。相反,我们能够通过从(单一)锻炼数据集提取反复样本进行自(bootstrap)操做。正在这种方式中,我们生成了 B 个分歧的自帮锻炼数据集。我们随后正在第 b 个自帮锻炼数据集获得了一个预测成果

  相关链接:

Copyright 2018-2019 www.ddzwj003.com 版权所有 未经授权,严禁转载,违者将被追究法律责任。