分类和预测
分类和预测
分类和数值预测是预测问题的两种主要类型。分类是预测分类(离散、无序的)标号,而预测则是建立连续值函数模型。
一、分类问题的步骤:
1、使用训练集建立描述预先定义的数据类或概念集的分类器。
第一步也称之为“学习步”或者“训练模型阶段”,使用特定的分类算法通过分析从训练集中学习来构造相应的分类器或者分类模型。这一步也可以看做是,通过训练样本学习一个映射或者函数,它可以用来预测给定元组X的类标号y。
训练集是由数据元组和与之相关联的类标号组成,数据元组X由n维属性向量组成,
表示该元组在第i个属性上的取值。
由于训练集中每个元组都有其对应的类标号,因此分类模型的训练过程也称为监督学习(Supervised Learning),即分类器的学习是在被告知每个训练元组的属于哪个类的监督下进行。
与之对应的是聚类,也称为无监督学习(Unsupervised Learning),在学习的过程中,每个训练元组的类标号是未知的,并且通过学习所形成的类的个数或集合也可能实现不知道。
2、使用第一步建立的分类模型对新的数据进行分类。
建立起相应的分类模型后就可以应用该模型对新数据进行分类。对于一个特定的模型衡量其性能的主要指标是:准确率(Accuracy)
(1)、分类器的准确率度量
准确率Acc(M),在模式识别文献中也称为分类器的总体识别率(Recognition Rate),是分类器M正确分类的的元组所占的百分比,它反映分类器对各类元组的识别情况。
混淆矩阵(Confusion Matrix)是分析分类器识别不同类元组的一种有效工具。给定m个类,则混淆矩阵是一个m*m的二维表,表示类i用被分类器标记为类别j的元组数量。理想地,对于具有高准确率的分类器,大部分的元组都集中在混淆矩阵的对角线上。
给定两类,可以使用术语正元组(感兴趣的主类元组)和负元组。真正(True Positives)表示分类器正确分类的正元组,真负(True Negatives)是分类器正确标分类的负元组。假正(False Positives)是分类错误的负元组,即实际为负元组预测分类为正元组。假负(False Negatives)是错误标记的正元组,即实际为正元组被分类器分类为负元组。
(2)、分类器的灵敏性(Sensitivity)度量和特效性(Specificity)度量
假设已经训练的分类器将医疗数据元组分类为“cancer”和“not_cancer”。90%的准确率使该分类器看上去相当准确,但是,如果只有3%~4%的训练元组是“cancer”,显然90%的准确率是不可以接受的(比如该分类器只能对“not_cancer”类的元组正确分类,对“cancer”类的元组全部分类错误)。
我们希望有某种度量能够对分类器识别“cancer”元组(设为正元组)和“not_cancer”元组(设为负元组)进行分别评估,为此引入灵敏性(Sensitivity)度量和特效性(Specificity)度量。
灵敏度也称为真正率,是指分类器正确识别正元组的百分比。特效性也称为真负率,是指分类器正确识别负元组的百分比,具体计算方法如下两个公式:
不难证明,准确率是灵敏性和特效性的函数:
(3)、分类问题中的过度拟合(Overfit)现象
Overfit是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集上却不能很好的拟合数据。此时我们就叫这个假设出现了overfit的现象。出现这种现象的主要原因是训练数据中存在噪音或者训练数据太少。而解决overfit的方法主要有两种。提前停止树的增长或者对已经生成的树按照一定的规则进行后剪枝。
我们将训练好的模型检验训练集数据,得到的误差率称之为训练误差。将该模型用于检验测试样本,得到的误差率称之为泛化误差。一个好的分类模型不仅要能够很好的拟合训练数据,而且应该对未知样本能够准确分类。也就是说,一个好的分类模型必须同时具有低训练误差和泛化误差。对训练数据拟合过好的模型,其泛化误差可能比具有较高训练误差的模型高,这种情况就是所谓模型的过度拟合。
过度拟合产生的原因:
① 噪声数据导致过度拟合
在现实中,噪声数据往往是难以完全避免的,使用这些噪声数据拟合得到的模型,在将其应用于分类中就可能产生错误分类。
② 缺乏代表性样本导致过度拟合
在训练数据缺乏具有代表的样本的情况下,往往需要继续细化模型才能得到较好拟合训练集的模型,这样得到的模型同样可能具有较高的泛化误差。
避免过度拟合的策略:
与上述两个导致模型过度拟合的因素同时出现的是模型的复杂度。模型越复杂出现过度拟合的概率就越高。因此,对于给定具有相同泛化误差的模型,我们往往更倾向于较为简单的模型,这就是所谓的Occam剃刀(Occam’s Razor)原则。为了避免过度拟合,降低决策树的复杂度,通常的策略是剪枝,该策略采用统计方法删除最不可靠的分支,以提高对未来分类识别的速度和分类识别新数据的能力。
① 先剪枝(pre-pruning)法
先剪枝法是通过提前停止分支的生长过程,即通过在当前结点上就判断是否需要继续划分该结点所包含训练样本集来实现的。这就需要更为限制性的约束条件,如当观察到衡量不纯性的度量低于某个确阈值就停止分支的生长。
该方法的优点在于避免产生过分拟合训练数据的过于复杂的子树。但是我们很难为提前终止选择正确的阈值,阈值太高将导致拟合不足,阈值太低则不能充分解决过度拟合问题。
② 后剪枝(post-pruning)法
后剪枝法从一个“充分生长”的树中,按照自底向上的方式修剪多余的分支。修剪的方法有两种:
(1)用新的叶子节点替换子树,该叶子节点的类标签由子树记录中的多数类确定;
(2)用子树中最常用的分支代替子树。
J48决策树算法采用了子树提升(Subtree Raising)与子树替换(Subtree Replacement)的修剪策略。计算修剪前后的预期分类错误率,如果修剪导致预期分类错误率变大,则放弃剪枝,保留该结点的相应分支,否则就将相应节点分支修剪删除。在产生一系列经过修剪的决策树候选之后,利用一个独立的测试数据集对这些经过修剪的决策树的分类的准确性进行评价,保留下那些预期分类错误率最小的决策树。与先剪枝相比,后剪枝倾向于产生更好的结果。
二、为分类和预测准备数据
可以对数据使用下面的预处理步骤提高分类或预测步骤的准确性、有效性和可伸缩性。
1、数据清理:
用于消除或减少数据噪声和处理缺失值(最简单的处理方式是用最常出现的值替换缺失值)。
2、相关分析:
可能存在某些属性是冗余的,使用相关分析来识别任意两个给定的属性是否是统计相关的。数据集中还可能包含不相关的属性,可以使用属性子集选择找出属性的规约子集,使得数据类的结果概率分布与使用所有属性得到的原分布尽可能接近。因此可以使用相关分析和属性子集选择,探测对分类或预测任务不起作用的属性,将其从数据集的属性中删除。
3、数据变换与归约:
数据可以通过规范化进行变换,在学习阶段使用神经网络或涉及距离度量的方法时尤为重要。规范化涉及将所给属性的所有值按比例进行缩放,使得它们落入较小的指定区间,如-1.0到1.0,或者0.0到1.0。
数据也可以通过泛化到较高层概念进行变换。对于连续值属性,这种变换非常有用。例如,属性income的数值可以泛化为离散的区间,如low,medium和high。泛化可以压缩原来的训练数据,使得学习时的输入输出得以减少。
还可以采用其他方法对数据进行规约,这些方法包括从小波变换和主成分分析到诸如分箱、直方图分析和聚类的离散化技术。