1.k最近邻
k最近邻(k-nearest neighbor,kNN)分类算法是一种常用的分类算法,是比较简单的机器学习算法之一。其主要思想是根据一个样本的k个最近邻样本类别来决定其类别归属,即如果一个样本的k个近邻中的大多数属于X类,则样本属于X类。它是基于实例的一种惰性学习算法,即没有训练阶段,所提供的样本集已经有了样本的类别,当新样本到来时,直接与样本集中的样本进行比较获得其k个最近邻并判定类别。
设文本集合C={C1,C2,…,CM}和待分类文本ti,采用kNN算法实现分类时,大致可分为两个阶段:文本集准备阶段,包括文本特征的提取、特征集缩减,将文本以特征向量的形式定义到实数域中;文本分类阶段,按与文本集准备阶段同样的方法将待分类文本ti表示为特征向量,在训练集中找出与ti最相似的k个文本,以这k个近邻文本的类别作为候选类别,将ti与这k个文本的相似度作为k近邻文本所在类的类别权重,把ti归入到相似性最高的类别中。KNN算法的具体步骤如下:
(1)根据训练文本最终特征集合,将训练文本表示为向量空间中的特征向量。
(2)将待分类文本ti表示为和训练文本一致的特征向量di。
(3)根据距离函数计算待分类文本向量di和训练文本向量的相似度,可以使用两向量之间欧氏距离计算,选择与di相似度最大(距离最小)的k个文本作为di的k个最近邻,也可以使用向量夹角余弦计算。
利用欧氏距离计算公式为:
其中xil和xjl分别指di和dj的第l个属性。
利用夹角余弦计算公式为:
其中θ是两个向量di和dj的夹角,||di||和||dj||表示向量长度。
(4)根据di的k个最近邻,计算文本类别相应的权重,计算公式为:
其中S( di,dj)表示文本向量di与文本向量dj之间的相似度,类别属性函数为:
(5)比较各类的权重,将待分类文本ti归入权重最大的类别。
2.kNN文本分类实现过程
为了实现基于kNN算法的文本分类,我们定义了如下函数:
参数:
train_corpus_dir:训练集所在路径。
test_corpus_dir:测试集所在路径。
fs_method:特征选择方法,包括BOW、TF-IDF、IG、CHI、MI等。
fs_num:需要选择特征数量。
f_weight:特征权值计算方法,包含BOW、TF-IDF。
k:kNN算法中的近邻个数。
返回值:
返回kNN算法分类结果。
我们以清华大学自然语言处理与社会人文计算实验室提供的语料库为例,分别采用两种特征选择方法进行kNN分类效果分析。
1)采用IG的特征选择方法实现kNN文本分类
参数:
特征选择方法:IG。
选择特征数量:1000。(www.xing528.com)
特征权值计算:BOW。
K值:10。
采用IG的特征选择方法进行kNN分类,其结果混淆矩阵见表8-4。
表8-4 采用IG特征选择方法的kNN分类混淆矩阵
采用IG的特征选择方法进行kNN分类,分类的查准率、查全率和F1值等评价结果见表8-5。
表8-5 分类报告
续表8-5
采用IG的特征选择方法进行kNN分类,对分类结果从微平均、宏平均和带权平均三个方面进行了对比分析,其结果如下:
查准率对比:
查全率对比:
F1得分对比:
2)采用CHI的特征选择方法实现kNN分类
参数:
特征选择方法:CHI。
选择特征数量:1000。
特征权值计算:BOW。
n:10。
采用CHI的特征选择方法进行kNN分类,其结果混淆矩阵见表8-6。
表8-6 采用CHI特征选择方法的kNN分类混淆矩阵
采用CHI的特征选择方法进行kNN分类,分类的查准率、查全率和F1值等评价结果见表8-7。
表8-7 分类报告
采用CHI的特征选择方法进行kNN分类,对分类结果从微平均、宏平均和带权平均三个方面进行了对比分析,其结果如下:
查准率对比:
查全率对比:
F1得分对比:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。