本节主要介绍数据挖掘中常见的分类方法决策树和朴素贝叶斯算法。
决策树算法
决策树(Decision Tree,DT)分类法是一个简单且广泛使用的分类技术。
决策树是一个树状预测模型,它是由结点和有向边组成的层次结构。树中包含3种结点:根结点、内部结点和叶子结点。决策树只有一个根结点,是全体训练数据的集合。
树中的一个内部结点表示一个特征属性上的测试,对应的分支表示这个特征属性在某个值域上的输出。一个叶子结点存放一个类别,也就是说,带有分类标签的数据集合即为实例所属的分类。
1. 决策树案例
使用决策树进行决策的过程就是,从根结点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子结点,将叶子结点存放的类别作为决策结果。
图 1 是一个预测一个人是否会购买电脑的决策树。利用这棵树,可以对新记录进行分类。从根结点(年龄)开始,如果某个人的年龄为中年,就直接判断这个人会买电脑,如果是青少年,则需要进一步判断是否是学生,如果是老年,则需要进一步判断其信用等级。
图 1 预测是否购买电脑的决策树
假设客户甲具备以下 4 个属性:年龄 20、低收入、是学生、信用一般。通过决策树的根结点判断年龄,判断结果为客户甲是青少年,符合左边分支,再判断客户甲是否是学生,判断结果为用户甲是学生,符合右边分支,最终用户甲落在“yes”的叶子结点上。所以预测客户甲会购买电脑。
2. 决策树的建立
决策树算法有很多,如 ID3、C4.5、CART 等。这些算法均采用自上而下的贪婪算法建立决策树,每个内部结点都选择分类效果最好的属性来分裂结点,可以分成两个或者更多的子结点,继续此过程直到这棵决策树能够将全部的训练数据准确地进行分类,或所有属性都被用到为止。
1)特征选择
按照贪婪算法建立决策树时,首先需要进行特征选择,也就是使用哪个属性作为判断结点。选择一个合适的特征作为判断结点,可以加快分类的速度,减少决策树的深度。
特征选择的目标就是使得分类后的数据集比较纯。如何衡量一个数据集的纯度?这里就需要引入数据纯度概念——信息增益。
信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。
1948 年,信息论之父 Shannon 提出了“信息熵”的概念,才解决了对信息的量化度量问题。通俗来讲,可以把信息熵理解成某种特定信息的出现概率。信息嫡表示的是信息的不确定度,当各种特定信息出现的概率均匀分布时,不确定度最大,此时嫡就最大。反之,当其中的某个特定信息出现的概率远远大于其他特定信息的时候,不确定度最小,此时熵就很小。
所以,在建立决策树的时候,希望选择的特征能够使分类后的数据集的信息熵尽可能变小,也就是不确定性尽量变小。当选择某个特征对数据集进行分类时,分类后的数据集的信息嫡会比分类前的小,其差值表示为信息增益。信息增益可以衡量某个特征对分类结果的影响大小。
ID3 算法使用信息增益作为属性选择度量方法,也就是说,针对每个可以用来作为树结点的特征,计算如果采用该特征作为树结点的信息增益。然后选择信息增益最大的那个特征作为下一个树结点。
2)剪枝
在分类模型建立的过程中,很容易出现过拟合的现象。过拟合是指在模型学习训练中,训练样本达到非常高的逼近精度,但对检验样本的逼近误差随着训练次数呈现出先下降后上升的现象。过拟合时训练误差很小,但是检验误差很大,不利于实际应用。
决策树的过拟合现象可以通过剪枝进行一定的修复。剪枝分为预先剪枝和后剪枝两种。
预先剪枝是指,在决策树生长过程中,使用一定条件加以限制,使得在产生完全拟合的决策树之前就停止生长。
预先剪枝的判断方法也有很多,例如,信息增益小于一定阈值的时候通过剪枝使决策树停止生长。但如何确定一个合适的阈值也需要一定的依据,阈值太高会导致模型拟合不足,阈值太低又导致模型过拟合。
后剪枝是指,在决策树生长完成之后,按照自底向上的方式修剪决策树。后剪枝有两种方式,一种是用新的叶子结点替换子树,该结点的预测类由子树数据集中的多数类决定,另一种是用子树中最常使用的分支代替子树。
预先剪枝可能会过早地终止决策树的生长,而后剪枝一般能够产生更好的效果。但后剪枝在子树被剪掉后,决策树生长过程中的一部分计算就被浪费了。
3. Spark MLlib 决策树算法
Spark MLlib 支持连续型和离散型的特征变量,也就是既支持预测也支持分类。
在 Spark MLlib 中、建立决策树时是按照信息增益选择划分特征的,它采用前向剪枝的方法来防止过拟合,当任意一个以下情况发生时,Spark MLlib 的决策树结点就终止划分,形成叶子结点。
- 树高度达到指定的最大高度 maxDepth。
- 当前结点的所有属性分裂带来的信息増益都小于指定的