由于之前对树这方面一直有所欠缺,特地做个总结
Tree:
Kd-tree:
1. 很奇怪我看有的csdn上说列的划分选取是找方差最大的列(因为方差大更可能不 是一个维度的),而又得则说 是按次序选取列,我认为前者更有说服力。
2.树的剪枝?(没有看到哪里说要剪枝的,就是说模型会有数据集大小的在用空间)
而模型优化的是寻找最近的那一部分
3.遍历:先二叉查找,再回溯,通过计算查找点到分割平面的距离(这个距离比较的是
分割维度上的值的差,并不是分割节点到分割平面上的距离,虽然两者的值是相等的)
与当前最短距离进行比较,决定是否需要进入节点的相邻子空间进行查找,
回归树:
- 每一列用二分法选取最大方差的划分,然后比较方差,按最最大方差列划分(不用
删除这列)
- 预剪枝:设置划分所需要的最小方差(一般以方差len倍来表示),设置最最小分 裂 的数据集大小
- 后剪枝,根据树来划分测试集,然后看按此节点切分和不按此节点切分所得方差的 大小来决定是否合并(一般来说合并方差会更大)
ID3:
- 信息增益,
- 预剪枝,设置树的深度,最小特征树,节点最小数据条数,纯度
- 后剪枝,看合并会不会降低误差率
C4.5:
- 信息增益比,就是上面求得信息增益除以该列的信息熵
- 预剪枝同上、后剪枝同上
- 连续值的处理,选取排序后相邻两值的均值做分割,选取到信息增益比最大的分割 阈值,然后和其他列的比较
Cart树:
- 基于基尼不纯度,选取不纯度最小的作为分割列,公式分:属性中不纯度,对标签 的 不纯度
- 树的剪枝和ID3,C4.5一样,
- 连续值得处理和上面一样,其实还有等频,等距,卡卡方
随机森林里的树:
- 基于bagging集成的原理,树之间的联系不能太大,保证完全随机(对深度,特征 列 的选取),然后以投票(可以加权投票吗?)的方式
Boosting(adaboost,GDBT,XGBoost)中的树:
- 拿adaboost来说和随机森林不同的是,每次都是创建最好的树,然后根据当前树 的错误率和在数据集上的错误的情况对数据进行加权,让后面的一棵树多关注自己犯的 错
- 然后根据错误率加权投票,回归就是求平均
还有其他关于树的算法比如
- 排序
- 查找
- 为了保证树的查找性能还有树平衡
- 图像压缩用到的哈夫曼编码(无损压缩)