文本自动分类技术是文字管理的基础。通过快速、准确的文本自动分类,可以节省大量的人力财力;提高工作效率;让用户快速获得所需资源,改善用户体验。本文着重对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算法的补充的更多相关文章

  1. 机器学习笔记--KNN算法1

    前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...

  2. KNN算法介绍

    KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...

  3. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  4. KNN算法

    1.算法讲解 KNN算法是一个最基本.最简单的有监督算法,基本思路就是给定一个样本,先通过距离计算,得到这个样本最近的topK个样本,然后根据这topK个样本的标签,投票决定给定样本的标签: 训练过程 ...

  5. kNN算法python实现和简单数字识别

    kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单 ...

  6. 什么是 kNN 算法?

    学习 machine learning 的最低要求是什么?  我发觉要求可以很低,甚至初中程度已经可以.  首先要学习一点 Python 编程,譬如这两本小孩子用的书:[1][2]便可.   数学方面 ...

  7. 数据挖掘之KNN算法(C#实现)

    在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅 ...

  8. 机器学习笔记--KNN算法2-实战部分

    本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...

  9. 学习OpenCV——KNN算法

    转自:http://blog.csdn.net/lyflower/article/details/1728642 文本分类中KNN算法,该方法的思路非常简单直观:如果一个样本在特征空间中的k个最相似( ...

随机推荐

  1. chrome devtools

    Elements chrome devtools 中 Elements panel 是审查 dom 元素和 css 的, 可以实时修改 dom/css. windows: ctrl + shift + ...

  2. HTTP状态码(HTTPStatusCode)

    HTTP状态码(HTTPStatusCode) 祓焘铺 布稍酡 盛坭馆 距熏屿砥 女装出来扔了套到床上然后自己穿了套 跎徨鼻卩 权术埭 悌颞 蔹咽诹ㄒ 椿酣漂作 钱是小事关键是没有老师耸了 ...

  3. python 学习 [day7]面向对象

    编程模式概念 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向对象的三大 ...

  4. cocos2d-js引擎学习笔记

    cocos2d-js3.0实用语法 /*初始化继承类*/ var Enemy = cc.Sprite.extend({ hp: 0, fileName: "enemy.png", ...

  5. freemarker + spring mvc + spring + mybatis + mysql + maven项目搭建

    今天说说搭建项目,使用freemarker + spring mvc + spring + mybatis + mysql + maven搭建web项目. 先假设您已经配置好eclipse的maven ...

  6. -webkit-overflow-scrolling

    -webkit-overflow-scrolling 属性 控制元素在移动设备上是否使用滚动回弹效果. 取值 auto    使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止. touch   使 ...

  7. LogFactory缺包异常

    抛出异常: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/loggin ...

  8. .NET架构师

    闲话不多扯,关于.NET架构师的培训  架构师的知识体系总结:7大重点,对7大重点作为细节的阐述将再后面陆续展开!架构师的体系纲领主要来着这7点.(必须严格记下) 1:现代软件开发过程及架构策略 1. ...

  9. HDU 1248 寒冰王座

    完全背包 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  10. SLF4J 教程

    转自:SLF4J 教程 一.介绍:简单日记门面(simple logging Facade for java)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署 ...