机器学习算法第十篇

主要内容:决策树算法+CART(回归树)

回归树排序 回归树的生成_回归树排序

CART算法概念

CART(classification and regression tree) 故英文名思意:分类和回归树.
CART算法包含决策树生成和决策树剪枝两部分
CART决策生成树部分主要分为生成回归树和生成分类树
本篇主要讲生成回归树
回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

算法目的

构建一棵可以对输入样本进行很好预测,并输出预测值的二叉决策回归树

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

恩, 开始测试的时候,它是这样做的…
  • 把一个样本放入节点
    比较自身与节点的特征,选择一个分支: ‘下去’
    循环 ‘下去’ , 直到叶子节点为止
    当一个测试样本a落入某叶子时, 该叶子的c值作为该样本a的预测值输出
    (某叶子的c值是该树在训练时候, 训练集划分到该叶子的所有样本的输出值的平均值)
    (每个节点都有一个特征选择,如:长头发向左分支,短头发向右分支,该选择是决策树生成的时候遗留的)

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

那问题来了, 训练的时候如何生成一棵树?
  • 算法一开始将所有训练样本丢到根节点
    然后通过某准则将它们切成两份,分别丢入左节点与右节点
    然后对每个节点按照该准则继续切分,直到某个情况发生,停止切分,直接生成叶子节点
    (某情况是指:例如节点内样本数不能低于10个,树的层数不超过11层…参数设置的问题啊)

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

那问题又来了,什么准则可以很好的切分?
  • 算法这样做滴:
    我们针对一个节点D, 定义一个误差函数J 它可以计算该节点内所有样本的的总误差J(D)
    然后取节点内某特征m与该特征的某个取值n,
    再按照每个样本的的回归树排序 回归树的生成_回归树排序_10,将样本集切成两份回归树排序 回归树的生成_机器学习_11
    回归树排序 回归树的生成_回归树_12的值,即此切法的总误差P
    所以: 我们只需要遍历节点内的所有特征,并在该特征内再遍历所有可能取值,取得一大堆总误差P
    最后取最小的总误差回归树排序 回归树的生成_CART_13所对应的特征与取值,进行切分就好

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

那问题又又来了,误差函数怎么定才好?
  • 算法说:单个节点所有样本的预测值与平均值之差的平方的和(总方差)作为该叶子节点误差
  • 回归树排序 回归树的生成_CART_16

回归树排序 回归树的生成_回归树排序

  • 这个式子可以很好表达我们对误差的定义,
  • 同时每个叶子内部所有样本输出值y的总方差越小,其平均值c的代表性就越高
    (在样本容量相同的情况下,方差越大,说明数据的波动越大,越不稳定)

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序

回归树排序 回归树的生成_回归树排序
回归树排序 回归树的生成_回归树排序