本系列目的在于总结每一个分类器的特点(优点、缺点、使用数据类型、使用时的注意事项等)。相关代码自己搜。
python:建议使用2.7
python常用函数库:NumPy、scikit-learn等
python集成环境:anaconda
优点:
1、容易理解,能给出数据的内在含义
2、对异常值不敏感
3、容易将树转换为规则
4、能够将训练好的决策树存储下来,所有测试样本使用同一个决策树来分类,而不用为每一个样本单独训练一个决策树
缺点:
1、倾向于选择特征取值情况更多的特征最为最有特征
2、分类平面是垂直于超坐标系的一块块组合,对于和超坐标系成45°或135°角分布的a数据不能较好的分类
3、容易造成过拟合
使用数据类型:
1、连续型(先做离散化处理)
2、离散型
使用时注意事项:
1、划分结束条件:
所有样本的类别一致、
没有可继续划分的特征(采用ID3的选择-移除法使用每个特征,C4.5和CART不一定消除特征)、
样本总数少于某个阈值(这样不用剪纸操作,可以防止过拟合)
2、深刻理解信息、熵、信息增益等含义:
信息:使用最有效的编码方式(哈夫曼编码)对信息X=i进行编码,至少需要 -log.2.P(X=i) 个bits,P(X=i) = number(X=i)/number(X)。
熵:编码一个随机变量X所需要的平均bits数量,所以 H(X) = SIGMA[ P(X=i)*(-log.2.P(X=i)), i=1,...,n ] 。
信息增益:IG是由于根据变量A进行分类后,目标变量Y的熵在整个数据集S上的期望减少,所以 IGain(S,A) = Hs(Y) - Hs(Y|A),
IGain(S,A) = Hs(Y) - Hs(Y|A) = H(Y) - SIGMA[ P(A=a)*H(Y|A=a), a∈values(A) ]
= SIGMA[ P(Y=i)*(-log.2.P(Y=i)), i=1,...,n ] - SIGMA[ P(A=a)*SIGMA[ P(Y=i|A=a)*(-log.2.P(Y=i|A=a)), i=1,...,n ], a∈values(A) ]
3、对于结束条件“没有可继续划分的特征”和“样本总数少于某个阈值”,如果此时结点的样本分类仍然不是纯的,则采用多数表决方法投票
4、注意,叶子节点不一定只存储分类结果1和0,还可以存储很多信息,如叶子节点的所有样本的年龄平均值等