决策树 Decision Tree是一个重要Supervise Learning算法。
0 相关基础知识
0.1 Machine Learning对于分类和预测算法的评估:
准确率Accuracy:顾名思义,监督学习说明已有标签
速度Velocity:一定程度上体现了复杂率
鲁棒性Robustness:如果缺失部分数值,是否还能效果好
规模性Scale:数据集大小规模
可解释性Interpretability:特征值的解释和归类
eg. 属性(特征)的描述可以是离散的,比如颜色可以是红黄蓝,或者用数字理解可以为0与1;但标签也可能是连续的,譬如数值,这时需要连续变量离散化,即设置阈值。
0.2 熵 Entropy
Wiki:熵被用于计算一个系统中的失序现象,也就是计算该系统混乱的程度。
变量不确定性越大,熵越大。
单个属性值的熵的计算:P(x)*log2(P(x)) - (P(x)为相应概率)
1 几种决策树算法
决策树顾名思义就是把原始的sample转变为一棵树。
原始的信息是一张表格,每个样本对于不同的属性有不同的描述,问题是,如何知道把哪一种属性当作每一层树叶,即,如何选择树的节点?
不同的属性选择度量方法也就形成了不同的决策树算法。
针对一个属性,classification一致。
属性全部用完,最后一个用多数表决(majority)的方法确定classification。
1.1 决策树归纳算法(ID3)
ID3引入了Information Gain的概念: 信息获取量/增益
Gain(A) = Infor(D) - Infor_A(D)
Infor(D):针对最终的classification,计算一个信息数值。
Infor(D)=-sum(P*log2(P))
Infor_A(D):针对属性A,计算一个信息数值。
最终选择当前最大的Gain(A)作为当前节点,并且在下一个分类中就不再考虑这个节点啦。
1.2 C4.5
引入概念gain ratio
1.3 CART(Classification and regression trees)
引入概念gini index
2 决策树算法overfitting问题
overfitting问题体现在属性分类太细,在训练集上表现地好,但是测试机上效果不完美。
解决方法:
先剪枝(准确率/纯度达到一定的数值,就不再分了) - 这里有点疑问,我会再研究一下,晚点来解释。
后剪枝(画完整张图,再整体剪去一部分)
3 决策树算法优缺点
直观,便于理解,小规模数据集有效
连续变量不太好(对阈值选择敏感度大),类别较多时效果不好,大规模数据集不太好
==============
后面会进行对应的python实操,至于会不会更新在这里,我也不知道,就看我觉得有没有必要吧hhhh。
欢迎讨论(虽然我知道这玩意儿这么简单也没啥讨论的)。