KNN算法的补充
文本自动分类技术是文字管理的基础。通过快速、准确的文本自动分类,可以节省大量的人力财力;提高工作效率;让用户快速获得所需资源,改善用户体验。本文着重对KNN文本分类算法进行介绍并提出改进方法。
一、相关理论介绍
文本分类技术的研究由来已久,并且取得了很多可喜的成果,形成了一套完整的文本自动分类流程。
(1)文本分类
文本分类是根据训练样本集中的样本来进行训练,找到一定的分类规则和规律,然后根据这些规则和规律对需要进行分类的文本进行判断,自动将其归类。
(2)文本表示
要实现依据内容的自动分类,需要将文本表示成机器能够“理解”的形式。目前最为成熟的就是向量空间模型(VSM: Vector Space Model)。将文本转化为一个个的文本向量,然后通过计算个个向量间的相似度来进行分类判断。
(3)文本分词
使用一定的规则方法,将中文文本内容分割为一个一个具有基本语义的词,以供提取特征项。
(4)去停用词
在文本提取特征项的过程中,需要将那些词频非常高,对于分类又没有任何表征作用而且会影响分类结果的停用词过滤掉,以提高分类准确度。例如:介词、连词等。
(5)特征选择和权重计算
特征选择是按照一定的选择方法从经过分词、去停用词处理的词组中挑选出一些对分类具有表征意义的词,用作构建文本向量空间的特征项。然后将各个文本表示成这个向量空间中的向量,再选择合适的权重算法,计算各个特征项的权重,将文本向量化。
(6)分类算法
分类算法是通过使用一定的规则对向量化的文本进行判断,自动对其进行归类。其过程可以分为两个阶段:训练阶段和分类阶段。
训练阶段是根据给定的已经归好类的训练样本集进行训练,学习分类的规则和规律,建立分类器。分类阶段是使用训练阶段建立的分类器对待分类文本进行判断,实现自动分类。
训练阶段是根据给定的已经归好类的训练样本集进行训练,学习分类的规则和规律,建立分类器。分类阶段是使用训练阶段建立的分类器对待分类文本进行判断,实现自动分类。
二、KNN算法分析
KNN算法的提出最早可以追溯到半个世纪以前,由Cover和Hart于1968年提出。KNN算法是一个比较成熟的算法,应用的范围很广。
KNN分类算法可以简单将其分类过程描述为:
(1)进行文本预处理,即文本分词、去停用词、特征选择、权重计算,将训练集中的文本表示成文本向量并进行存储。
(2)计算待分类文本向量与训练集中的所有文本向量的相似度,从训练集中选出相似度排名前K的文本。
(3)依据这个K个文本对待分类文本进行分类。K篇文本中哪个类别的文本多,则待分类文本就属于这个类别。
KNN算法的优点主要集中在两个方面。首先,KNN算法成熟、稳定、易于实现。其次训练过程很快,只需对新加入的文本进行训练就好。
KNN算法的缺点也是很明显的。其中一点就是需要大量的时间开销。KNN算法之所以在分类阶段需要耗费大量的时间是因为KNN算法并没有实际的分类 器。在训练阶段,KNN算法只是将样本集的文本进行了处理,而并没有进行实际的训练学习,而是将这种学习放到了分类阶段,在分类阶段需要计算待分类文本与 所有训练样本集文本间的相似度,使得分类阶段的计算量相当的大,从而影响了分类时间。
由于现在网络中的数据量越来越大,对于分类时间的要求也越来越高,因此通过改进KNN算法以降低时间开销是非常有意义的。
三、算法改进
可以从以下几个方向入手对KNN算法进行改进,以降低时间开销:
(1)样本集剪裁。为了降低KNN算法的空间以及时间开销,对初始的样本集进行筛减是最简单,也最有效的方法。但在筛减的同时一定要保证不以牺牲分 类的准确性为代价,所以就一定要选取那些特征性强,能很好的代表这个分类的文本,从而将其他特征不明显,代表性不强的文本删去,从而减少分类时需要比对的 文本数量,缩短分类时间。
(2)获得K篇近邻文本方法的改进。要获得最终的K篇近邻文本,需要待分类文本与训练集中的所有文本进行相似度计算,通过比较计算结果才能得到。如果能够避开与所有文本进行相似度计算而直接找出这K篇文本,那就能大幅提升分类速度。
本文采取第一种方法,来对KNN进行改进。
KNN算法之所以在分类阶段需要耗费大量的时间是因为KNN算法并没有实际的分类器。要使得KNN算法拥有较好的分类性能,需要在训练阶段建立起分 类器,将大量的计算放到学习阶段,从而减少分类阶段的时间开销。考虑到类中心向量法拥有非常好的分类速度,因此将类中心向量和KNN算法相结合,以达到分 类精度趋近于KNN算法,分类速度趋近于类中心向量法的效果。结合后的算法可简单描述入下:
(1)对样本集中的所有文本进行处理,将计算后得到的文本向量保存下来。
(2)采用类中心向量法,计算个各类的中心向量。
(3)分类时,首先将待分类文本与各个类中心向量进行相似度计算并排序。然后确定一个阀值m,取排名前m个类中的文本作为使用KNN算法的样本集。
(4)在新的样本集上使用KNN算法进行分类计算,将D归类。
四、改进分析
通过对KNN算法和类中心向量法的结合,使得KNN算法在训练阶段也能够建立起简单的分类器,其好处是显而易见的:
当需要对待分类文本进行分类时,通过训练阶段获得的类中心向量,可以快速的获得待分类文本与个类中心向量间的距离,从而确定需要使用KNN算法进行 计算的m个类。最后实际参与KNN算法的样本集即为这m个类中的文本,变相减少了样参与相似度计算的样本集,使得计算量大幅下降。如果m取值为分类数的一 半,那么就可以直接减少一半的计算量。阀值m的选择对于最终速度的提升有决定性作用。如果m过小会直接影响到分类的精度,过大对于分类速度的提升效果不明 显,需要通过实验确定。一般情况下m可取分类数的一半。
最后通过实验验证改进后的KNN算法较之传统的KNN算法,在保证分类准确度的基础上,分类时间大幅缩短超过一半。说明改进取得了不错的成效。
KNN算法的补充的更多相关文章
- 机器学习笔记--KNN算法1
前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...
- KNN算法介绍
KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- KNN算法
1.算法讲解 KNN算法是一个最基本.最简单的有监督算法,基本思路就是给定一个样本,先通过距离计算,得到这个样本最近的topK个样本,然后根据这topK个样本的标签,投票决定给定样本的标签: 训练过程 ...
- kNN算法python实现和简单数字识别
kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单 ...
- 什么是 kNN 算法?
学习 machine learning 的最低要求是什么? 我发觉要求可以很低,甚至初中程度已经可以. 首先要学习一点 Python 编程,譬如这两本小孩子用的书:[1][2]便可. 数学方面 ...
- 数据挖掘之KNN算法(C#实现)
在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅 ...
- 机器学习笔记--KNN算法2-实战部分
本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...
- 学习OpenCV——KNN算法
转自:http://blog.csdn.net/lyflower/article/details/1728642 文本分类中KNN算法,该方法的思路非常简单直观:如果一个样本在特征空间中的k个最相似( ...
随机推荐
- nodejs 实现简单的文件上传功能
首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传 ...
- 用 yo aspnet 生成.net项目
yo指的是Yeoman 官网:http://yeoman.io/ 因为安装yo需要nmp 因此 要先到node官网下载node并按装 安装之后就可以下一步了 $ npm install -g yo g ...
- mysql安装和基本配置-redhat
1.redhat yum替换参考 url:http://blog.csdn.net/zcyhappy1314/article/details/17580943 2.yum卸载mysql rpm -qa ...
- javascript语言学习笔记。
js类创建方法 var DogKing = function(dogName){ this.dogName = dogName; }; var myDogKing = new DogKing(&quo ...
- iScroll屏幕滑动函数封装总结
//iScroll.js屏幕滚动函数 function funScroll(a,b) { var d; function beforload() { d = new iScroll(a, { chec ...
- C# 泛型 Func<object, string, bool> filter
Func<object, string, bool>是泛型,你可以先把他看成一个普通类型,比如stringpublic class Func{ } // 自定义个普通类. Func fil ...
- ZZNU 1988: Sn
题目描述 给你两个数 n, p(0 < n,p <= 10^15); a1 = 1; a2 = 1+2; a3 = 1+2+3; ... an = 1+2+3+...+n Sn ...
- 打开新世界的第一步:学习servlet
什么是servlet? 是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 创建servlet 一.创建一个web project 1)流程:eclipse-F ...
- 在Eclipse中安装testNG插件
1. 选择菜单:Help->Install New Software,点击Add按钮输入框中输入相应的Name:testNG和Location:http://beust.com/eclipse. ...
- zoj 1508 poj 1201 Intervals
差分约束系统. #include<cstdio> #include<cstring> #include<cmath> #include<vector> ...