初级算法打卡(3)

  1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度) 2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

https://blog.csdn.net/xbmatrix/article/details/56691137

https://blog.csdn.net/weixin_39750084/article/details/83449866

 

  1. 回归树原理

http://blog.jobbole.com/114261/

 

1.1 最简单的模型

如果预测某个连续变量的大小,最简单的模型之一就是用平均值。比如同事的平均年龄是 28 岁,那么新来了一批同事,在不知道这些同事的任何信息的情况下,直觉上用平均值 28 来预测是比较准确的,至少比 0 岁或者 100 岁要靠谱一些。我们不妨证明一下我们的直觉:

  1. 定义损失函数 L,其中 y_hat 是对 y 预测值,使用 MSE 来评估损失:
  2. 对 y_hat 求导:
  3. 令导数等于 0,最小化 MSE,则:
  4. 所以,
  5. 结论,如果要用一个常量来预测 y,用 y 的均值是一个最佳的选择。

1.2 加一点难度

仍然是预测同事年龄,这次我们预先知道了同事的职级,假设职级的范围是整数1-10,如何能让这个信息帮助我们更加准确的预测年龄呢?

一个思路是根据职级把同事分为两组,这两组分别应用我们之前提到的“平均值”模型。比如职级小于 5 的同事分到A组,大于或等于5的分到 B 组,A 组的平均年龄是 25 岁,B 组的平均年龄是 35 岁。如果新来了一个同事,职级是 3,应该被分到 A 组,我们就预测他的年龄是 25 岁。

1.3 最佳分割点

还有一个问题待解决,如何取一个最佳的分割点对不同职级的同事进行分组呢?

我们尝试所有 m 个可能的分割点 P_i,沿用之前的损失函数,对 A、B 两组分别计算 Loss 并相加得到 L_i。最小的 L_i 所对应的 P_i 就是我们要找的“最佳分割点”。

1.4 运用多个变量

再复杂一些,如果我们不仅仅知道了同事的职级,还知道了同事的工资(貌似不科学),该如何预测同事的年龄呢?

我们可以分别根据职级、工资计算出职级和工资的最佳分割点P_1, P_2,对应的Loss L_1, L_2。然后比较L_1和L2,取较小者。假设L_1 < L_2,那么按照P_1把不同职级的同事分为A、B两组。在A、B组内分别计算工资所对应的分割点,再分为C、D两组。这样我们就得到了AC, AD, BC, BD四组同事以及对应的平均年龄用于预测。

1.5 答案揭晓

如何实现这种1 to 2, 2 to 4, 4 to 8的算法呢?

熟悉数据结构的同学自然会想到二叉树,这种树被称为回归树,顾名思义利用树形结构求解回归问题。

 

  1. 决策树防止过拟合手段

https://blog.csdn.net/sinat_32043495/article/details/78729610

 

  • 合理、有效地抽样,用相对能够反映业务逻辑的训练集去产生决策树;          
  •  剪枝:提前停止树的增长或者对已经生成的树按照一定的规则进行后剪枝。

剪枝的方法

 剪枝是一个简化过拟合决策树的过程。有两种常用的剪枝方法:

  (1)先剪枝(prepruning):通过提前停止树的构建而对树“剪枝”,一旦停止,节   点就成为树叶。该树叶可以持有子集元组中最频繁的类;

先剪枝的方法

       有多种不同的方式可以让决策树停止生长,下面介绍几种停止决策树生长的方法:

  限制决策树的高度和叶子结点处样本的数目

   1.定义一个高度,当决策树达到该高度时就可以停止决策树的生长,这是一种最为简单的方法;

   2.达到某个结点的实例具有相同的特征向量,即使这些实例不属于同一类,也可以停止决策树的生长。这种方法对于处理数据中的数据冲突问题非常有效;

   3.定义一个阈值,当达到某个结点的实例个数小于该阈值时就可以停止决策树的生长;

   4.定义一个阈值,通过计算每次扩张对系统性能的增益,并比较增益值与该阈值的大小来决定是否停止决策树的生长。

(2)后剪枝(postpruning):它首先构造完整的决策树,允许树过度拟合训练数据,然后对那些置信度不够的结点子树用叶子结点来代替,该叶子的类标号用该结点子树中最频繁的类标记。后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类称为majority class .相比于先剪枝,这种方法更常用,正是因为在先剪枝方法中精确地估计何时停止树增长很困难。

后剪枝的方法

   1)REP方法是一种比较简单的后剪枝的方法,在该方法中,可用的数据被分成两个样例集合:一个训练集用来形成学习到的决策树,一个分离的验证集用来评估这个决策树在后续数据上的精度,确切地说是用来评估修剪这个决策树的影响。这个方法的动机是:即使学习器可能会被训练集中的随机错误和巧合规律所误导,但验证集合不大可能表现出同样的随机波动。所以验证集可以用来对过度拟合训练集中的虚假特征提供防护检验。

   该剪枝方法考虑将书上的每个节点作为修剪的候选对象,决定是否修剪这个结点有如下步骤组成:

       1:删除以此结点为根的子树

       2:使其成为叶子结点

       3:赋予该结点关联的训练数据的最常见分类

       4:当修剪后的树对于验证集合的性能不会比原来的树差时,才真正删除该结点

      因为训练集合的过拟合,使得验证集合数据能够对其进行修正,反复进行上面的操作,从底向上的处理结点,删除那些能够最大限度的提高验证集合的精度的结点,直到进一步修剪有害为止(有害是指修剪会减低验证集合的精度)。

     REP是最简单的后剪枝方法之一,不过由于使用独立的测试集,原始决策树相比,修改后的决策树可能偏向于过度修剪。这是因为一些不会再测试集中出现的很稀少的训练集实例所对应的分枝在剪枝过如果训练集较小,通常不考虑采用REP算法。

    尽管REP有这个缺点,不过REP仍然作为一种基准来评价其它剪枝算法的性能。它对于两阶段决策树学习方法的优点和缺点提供了了一个很好的学习思路。由于验证集合没有参与决策树的创建,所以用REP剪枝后的决策树对于测试样例的偏差要好很多,能够解决一定程度的过拟合问题。

   2)PEP,悲观错误剪枝,悲观错误剪枝法是根据剪枝前后的错误率来判定子树的修剪。该方法引入了统计学上连续修正的概念弥补REP中的缺陷,在评价子树的训练错误公式中添加了一个常数,假定每个叶子结点都自动对实例的某个部分进行错误的分类。它不需要像REP(错误率降低修剪)样,需要用部分样本作为测试数据,而是完全使用训练数据来生成决策树,又用这些训练数据来完成剪枝。决策树生成和剪枝都使用训练集, 所以会产生错分。

     把一棵子树(具有多个叶子节点)的分类用一个叶子节点来替代的话,在训练集上的误判率肯定是上升的,但是在测试数据上不一定,我们需要把子树的误判计算加上一个经验性的惩罚因子,用于估计它在测试数据上的误判率。对于一棵叶子节点,它覆盖了N个样本,其中有E个错误,那么该叶子节点的错误率为(E+0.5)/N。这个0.5就是惩罚因子,那么对于该棵子树,假设它有L个叶子节点,则该子树的误判率估计为:

 

    剪枝后该子树内部节点变成了叶子节点,该叶子结点的误判个数J同样也需要加上一个惩罚因子,变成J+0.5。那么子树是否可以被剪枝就取决于剪枝后的错误J+0.5在

 

的标准误差内。对于样本的误差率e,我们可以根据经验把它估计成伯努利分布,那么可以估计出该子树的误判次数均值和标准差

 

    使用训练数据,子树总是比替换为一个叶节点后产生的误差小,但是使用校正的误差计算方法却并非如此。剪枝的条件:当子树的误判个数大过对应叶节点的误判个数一个标准差之后,就决定剪枝:

     这个条件就是剪枝的标准。当然并不一定非要大一个标准差,可以给定任意的置信区间,我们设定一定的显著性因子,就可以估算出误判次数的上下界。

  1. 模型评估

https://www.jianshu.com/p/498ea0d8017d

为什么要评估模型?

一句话,想找到最有效的模型.模型的应用是循环迭代的过程,只有通过持续调整和调优才能适应在线数据和业务目标.这跟我们买鞋子有一比,鞋子是模型,左挑右选,好吗,选了个合适的,可是这脚,它不断有变化,怎么办,持续调呗.

选用模型开始都是假设数据的分布是一定的,然而数据的分布会随着时间的移动而改变,这种现象称为分布漂移(Distribution Drift)。验证指标可以对模型在不断新生的数据集上进行性能跟踪。当性能开始下降时,说明该模型已经无法拟合当前的数据了,因此需要对模型进行重新训练了。 模型能够拟合新的数据称为模型的泛化能力。

怎么检验和评估模型?

机器学习过程分为原型设计阶段(Prototyping)与应用阶段(Deployed), 其中有原型设计阶段(Prototyping)的离线评估与应用阶段(Deployed)的在线评估(online evaluation).

Prototyping阶段是使用历史数据训练一个适合解决目标任务的一个或多个机器学习模型,并对模型进行验证(Validation)与离线评估(Offline evaluation),然后通过评估指标选择一个较好的模型。我们上面的例子就是Prototyping.

Deployed阶段是当模型达到设定的指标值时便将模型上线,投入生产,使用新生成的在线数据来对该模型进行在线评估(Online evaluation),在线测试不同于离线测试,有着不同的测试方法以及评价指标。最常见的便是A/B testing,它是一种统计假设检验方法。

离线评估和在线评估采用不同的评估指标,在对模型进行离线评估时是采用偏经验误差的方法,在在线评估时会采用业务指标,如设备使用效率(OEE), 用户点击率等.

通过检验和评估可能选择单一模型,也能使用多个模型混合.那到底怎么选呢?

  1. sklearn参数详解,Python绘制决策树

https://blog.csdn.net/yyy430/article/details/80535845

https://blog.csdn.net/u010084228/article/details/78112946

(python代码还没实现)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值