决策树原理
节点分裂,特征选择
从概率学角度,样本集中不同样本类别分布地越均匀,说明不确定性越大,比如投掷硬币,50%正,50%负,完全不确定,而决策树模型就是需要选取特征,通过特征取值对样本进行子集划分,使得子集中的不确定性减少。
描述不确定性的算法模型:1 gini纯度 2 信息熵 两个函数都是在样本分布越均匀时取值越大。 而gini纯度使用幂,信息熵使用对数,gini对于计算机计算量更小
特征选择的过程就是在所有候选特征中选择一个能够使得分裂后的不确定性变得更少的特征。
例如使用gini纯度计算不确定性,一共10个样本,分裂前不确定性,gini(root),分裂后两个子节点不确定性gini(left) 4个样本,gini(right) 6个样本,信息增益为,gini(root) - 4/10*gini(left) - 6/10*gini(right)。特征选择过程就是对所有特征计算信息增益。所以分裂节点的特征取值一定要能够化为离散取值。如果是连续性的取值,则需要对变量值排序后,从小到大寻找分裂点,使得信息增益最大。
不同算法
cart:二分树,一个特征可以参与多次二分分裂
id3:多分树,使用信息增益作为特征划分算法
c4.5: 多分树,使用信息增益率作为特征划分算法,对特征取值较多的特征能够通过除以一个描述特征取值个数的函数来抵消掉特征取值较多带来的信息增益增加。
最大矩形问题:
递增栈。
对于一个高度,如果能找到左边第一个比它小的和右边第一个比它小的,那就能计算这个高度的最大面积。
利用单调递增栈,栈中元素的前一个元素就是第一个比它小的,即将入栈的元素可以判断是否为右边第一个比它小的。
基本思路就是在框矩形过程中,对于一个高度的线条,如果找到左边和右边第一个比它小的边,那么就是这个线条的最大面积,在这个矩形内的组合都不用计算了。
剪枝
为了避免过拟合,有两种剪枝方法,预剪枝,后剪枝
预剪枝是在节点分裂过程设置一些规则,例如最小子节点个数,最大树深度,最小信息增益。
后剪枝是生成了完整决策树后,对每个叶子树进行尝试剪枝,如果剪枝后对验证集的验证效果比剪枝前好就执行剪枝。