机器学习—决策树3

例:建树

∙ \bullet 根据蘑菇属性判断蘑菇有毒还是可食用:mushroom.csv
在这里插入图片描述
P代表有毒,e代表可食用。
∙ \bullet 将类别型特征进行标签编码:LabelEncoder。Scikit-Learn要求输入为数值特征。
在这里插入图片描述Scikit-Learn中需要的是数字输入,所以就转换为数字了。对于颜色这样本身无序的特征,如果是线性回归、Logistic回归,由于是要与w进行乘积的,是不能用LabelEncode编码乘有序数字。那如果不能这样,又该怎么做呢?但在决策树里,由于只需要判断是否等于大于小于,所以变成数字也没关系,因为数字不同就是原来的取值是不同的,所以不一定要用独热编码,用LabelEncode也是可以的,若非要用OneHot编码也是可以的。那么问题来了,LabelEncode、OneHot的使用场景是什么?线性回归、Logistic回归里对颜色一类的应该如何编码?

∙ \bullet 对连续属性进行升序排序,只有在决策属性(即分类发生了变化)发生改变的地方才需要切开,这可以显著减少运算量。
  1)对特征的取值进行升序排序
  2)两个特征取值之间的中点作为可能的分裂点,将数据集分成两部分,计算每个可能的分裂点的Gini指数。
  3)选择Gini指数最小的分裂点作为该特征的最佳分裂点。
  若特征有12个取值,则会有11个分裂点,我怎么觉得应该是12个分裂点呢。排序后,原则上是特征不同取值间都作为一个分裂点进行检测,但为了提高性能,可以在y发生变化的地方,才进行检测。PPT里的决策属性,指的就是y
  在这里插入图片描述
在计算按特定特征和特定阈值分裂的Gini指数,应该是将分裂后的两个节点各自的Gini指数按照各自样本占比进行加权组合吧?
在这里插入图片描述
各节点选取样本最多的那个分类作为本节点的预测分类。

建树停止条件

建树过程是一个自顶向下的递归过程。
递归的停止条件:
   ∙ \bullet 分裂带来的损失的减小太小:损失的减少量可定义为: Δ = c o s t ( D ) − ( ∣ D L ∣ ∣ D ∣ c o s t ( D L ) + ∣ D R ∣ ∣ D ∣ c o s t ( D R ) ) \Delta = cost(D) - (\frac{|D_L|}{|D|}cost(D_L) + \frac{|D_R|}{|D|}cost(D_R)) Δ=cost(D)(DDLcost(DL)+DDRcost(DR))
   ∙ \bullet 树的深度超过了最大深度
   ∙ \bullet 左/右分支的样本分布足够纯净
   ∙ \bullet 左/右分支中样本数目足够少
除了上述四点,老师还讲到了gini指数最少减少量,叶子节点数目。那个计算公式没讲。

剪枝

∙ \bullet 分类回归树算法容易过拟合,通过剪枝取出部分分支,降低模型复杂度。
∙ \bullet 剪枝:给定一个完全树,自底向上进行剪枝,直到根节点。
∙ \bullet 剪枝准则:在这里插入图片描述
  1)形式同机器学习模型的目标函数: J ( θ , λ ) = ∑ i = 1 N L ( f ( x i ; θ ) , y i ) + λ R ( θ ) J(\theta, \lambda) = \sum_{i=1}^{N}L(f(\mathbf x_i;\theta), y_i) + \lambda R(\theta) J(θ,λ)=i=1NL(f(xi;θ),yi)+λR(θ)
  2)当 α \alpha α从0开始增大,树的一些分支被剪掉,得到不同 α \alpha α对应的树
  3)采用交叉验证得到最佳的 α \alpha α
  剪枝可以看目标函数是否更小,如果更小可以去除子节点。目标函数大的形式跟之前的线性、 Logistic回归都差不多,分别是误差项和复杂度(正则项)。T可以是树节点的数目,也可以是叶子节点的数目,T是复杂度。ERR(T),对于分类可以是错分率,也可以是交叉熵损失,对于回归可以是L2、L1损失等。

树模型的优点

∙ \bullet 容易解释
∙ \bullet 对特征预处理要求少
  1)能处理离散值和连续值得混合的输入(理论上是这样的,实际依赖于工具包的实现情况)
  2)对特征的单挑变换不敏感(只与数据的排序有关)
  3)能自动进行特征选择
  4)可处理缺失数据
∙ \bullet 可扩展到大数据规模
  能处理离散值,可能是说 能处理部分非数字类输入,因为老师特别强调,这时理论上,但Scikit-Learn种实际上是需要要求数字输入,也就是取决于工具。
  对特征单调变换不敏感,意味着不需要做指数变换、Log变换、标准化等,因为考虑分裂点的时候只与排序有关系。
  自动进行特征选择,刚才有棵树22个特征,实际只用到了6个,类似于之前模型的L1正则。
  可处理缺失数据没有怎么讲,只讲到以后的什么什么boost会如何。
  可扩展到大规模数据,是因为不用计算梯度。
对这些优点的理解还不深,比如很具体的为什么的问题?

树模型的确定

∙ \bullet 正确率不高:建树过程过于贪心。可作为Boosting的弱学习器(深度不太深)
∙ \bullet 模型不稳定(方差大):输入数据小的变化会带来树结构的变化。Bagging:随机森林。
∙ \bullet 当特征数目相对样本数目太多时,容易过拟合。
  选择最佳特征和最佳分裂点,这就是过于贪心的表现。
过早停止(预剪枝)、后剪枝、Boosting、Bagging都是减少过拟合的方法。模型不稳定,为什么是方差大,方差是如何计算的呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值