分类过程
预处理
为了提高分类模型的有效性及效率,需要对获取的数据进行预处理,预处理的过程包括清理数据、数据变换等。
数据清理
数据清理的过程包括去除噪声数据和重复数据,以及补充数据的缺失值。对于数据缺失的处理方法有:
常量代替法:所有数据中缺失的值都用同一个常量来填充·,比如“Error”。该方法最简单,但并不十分可靠。
平均值代替法:即采用数据集中某属性的平均值来代替该属性缺失的值。这种方法容易受到极端值的干扰。
众值代替法:使用同一属性中出现次数最多的值作为该属性缺失的值。可靠性较差,不过不受极端数据影响,同时能被用于非数值性的数据。
估算值代替法:采用回归算法预测缺失属性的可能值。
数据变换
数据变换是为了将数据转换成适合数据分析的形式,常使用规范化、离散化。常用规范化的方法有:
最大—最小规范化
min和max是数据集中某属性值的最小值和最大值。最大—最小规范化即是:
通过上式的运算就能将原先[min,max]线性映射到[new_min,new_max]。
Z—score规范化
n用来表示数据集中样本的数目,样本中第i个属性上的取值表示为{xi1,xi2,xi3,...,xin},分别为{xi1,xi2,xi3,...,xin}的平均值和标准值,即:
规范化之后
特征提取或选择
特征提取
通常通过映射(或变换)的方法获取最有效的特征。特征提取方法可以分为线性和非线性两种。线性特征提取方法现一般使用主成分分析法(principle component analysis,PCA),Fisher线性鉴别分析方法(fisher linier discriminant analysis,FLD)。PCA主要通过求解样本协方差矩阵的特征值和特征向量来找到方差最大的特征。FLD则主要保证样本在新空间有最大的类间距离和最小的类内距离,即是使样本在新空间有最佳的可分离性。线性自组织映射(self-organizing feature map,SOM),则是利用低维空间的样本点来表示原始高维空间的样本点,使得低维空间的样本之间尽可能保持原始空间中的距离和相似性关系。
特征选择
从全部特征中选择一个特征子集,其具体选择步骤是:
1.从特征全集中产生出一个特征子集;
2.用评价函数评价该特征子集;
3.将评价结果与停止特征选择的评判标准进行比较,若达到要求就停止,否则继续以上步骤;
4.验证所选择特征子集的有效性;
步骤1中产生特征子集的算法有3种:全局搜索、启发式搜索以及随机搜索。广度搜索是典型的全局搜索,需要遍历所有特征子集,然后选择最优,但是如果数据集特征维数过高,其所需时间太长。因此就产生了后面的启发式搜索,其又分为序列前向搜索和序列后向搜索,在序列前向搜索中,每次都选择使评价函数达到最优的特征加入,但是这种搜索方法存在一定缺陷,就是其不能删除子集中的特征。因此就有了序列后向搜索,每次删除一个特征。随机搜索则包括模拟退火算法、粒子群算法和遗传算法等。
根据不同的原理,步骤2中的评价函数可以分为筛选器和分装器。前者通过分析特征子集内部的特点来衡量其好坏,例如使用距离作为评判标准,则好的特征子集应该使同一类别的样本距离尽量小,而来自不同类别的样本距离尽量大。而后者是将模型的分类精度作为衡量特征子集的好坏标准。
模型评价
在实际中数据样本经常是不足的,为了选择好的模型,可以采用交叉验证方法。即是给定数据集一般会被划分为训练集和测试集。训练集用来训练模型,测试集用来评估模型对于新数据的分类效果。
交叉验证
简单交叉验证
首先随机地将给定数据分为两个部分,一部分作为训练集,另一部分作为测试集(例如,70%的数据作为训练集,剩下30%的数据作为测试集)。然后用训练集在各种条件下训练模型,在测试集上评价各个模型的测试误差,最后选择误差最小的那个。
n折交叉验证
数据被随机地分为n个部分(如n=10),注意每一部分中类比例与整个数据集的类比例基本一致。每个部分轮流作为测试集,其余n-1个部分作为训练集。
留一交叉验证
即是n折交叉验证的特殊情况,n=N(整个数据集的样本容量)。
其余指标
评价分类器的性能指标一般为分类准确率,其定义是:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。除此之外还有精确率、召回率和F1值。通常以关注的类为正类,其余类为负类,根据分类器在测试集上的表现可分为4种情况:
TP --- 将正类预测为正类数;
FN ---将正类预测为负类数;
FP ---将负类预测为正类数;
TN ---将负类预测为负类数;
召回率
精确率
F1值为召回率和精确率的调和平均
经典K-NN
k近邻算法实际上是对特征空间的划分,由三个基本要素组成——距离度量、k值的选择和分类决策规则。K-NN基于一个非常朴素的思想即“物以类聚,人以群分”。在训练集中寻找与待分类样本最相似的样本,直观地认为待分类样本与后者属于同一类别。
相似性度量
对于给定的两个样本X1 = <x11,x12,...,x1d>和X2 = <x21,x22,...,x2d>,二者之间的相似性可以用欧式距离、曼哈顿距离以及夹角余弦等方式来度量。
不同的距离度量指标会直接影响到最后的分类结果,因此要根据具体的需要选择合适的距离度量方式。
分类决策规则与K值的选择
kNN算法的核心思想是:
stp1:对于一个给定的未知样本X',首先在训练数据集中搜索与X‘最相似的k个样本{X1,X2,...,Xk},这些样本构成了X’的近邻集合。
stp2:在近邻集合内使用多数表决策略,即近邻集合类多数类决定了未知样本的类。
这里就可以感受到KNN中K值的选择是多么重要,实例如下图所示。
K = 3
K = 5
在应用中一般先将K初始化为一个较小的数值,再采用交叉验证法来选择最合适的K值。也可以使用智能优化算法来确定K值,如粒子群算法、遗传算法等。
KNN算法的改进
提高算法精度
- 特征加权
对于某个类别,样本中可能存在与其不相关的属性,这时就可以人为区别各个属性重要程度,即在距离度量时赋予不同属性不同的权值。
- 加权投票
即在近邻集合内,不再以统一的权重决定待分类样本的类别,通过给以不同的权值表现对待分类样本的影响程度。
提高算法效率
- 训练集优化
可以看出在经典KNN算法中,几乎是没有建立“模型”,大部分时间都是在待定样本分类,同时当数据量大了之后对空间存储也有很大的要求,要存储所有数据样本。因此在这种优化策略中主要限制样本的数量。通常有两种方法:
1.最近邻链(Temple Reduction for KNN,TRKNN)
TRKNN算法将原始训练集分为压缩集合和被约简集合两个部分。压缩集合内的样本为那些处于分类边界的样本,作为新的训练集,而被约简集合由那些处在各个类内部的样本组成。来自于类别i的某一样本Xi0的最近邻链构建过程如下:
Stp1:在属于类别j的样本中找到与Xi0最相似的样本,将其标记为Xi1,表示为Xi1 = NN(Xi0)。
Stp2:在来自类别i的样本中找到和Xi1最相似的样本Xi2 = NN(Xi1)。
Stp3:重复以上步骤(Xi,j+1 = NN(Xij)),直到最后两个样本彼此互为最近邻。
约简样本集合的具体做法是:对于样本Xi0的近邻链,设dij为近邻链上两个相邻样本Xij和Xi,j+1之间的距离。如有
那么删除该近邻链中的样本Xij。J取偶数是为了保证Xi0的近邻链中被约简的都是来自与Xij同一类别的样本。同时如果某个样本在一次约简中被删除,而在另一次约简中被保留,那么最终应保留这个样本以保证算法的分类正确率。
2.聚类约简
在原始训练集中,选择或生成一些样本,把这些样本作为各个类别的代表。常用的方法是对训练集进行聚类,保存聚类中心为代表。针对文档分类有K-means聚类算法,分别针对每个类别的文档进行聚类,设样本类别总数为k,各类别样本的聚类个数为m,其中:
k<m<样本数最少的类别中的文档数
保存这m个聚类的中心,来代替原始训练集,这种方法同样大大减少了需进行计算的训练集数目。