用于大数据分类的KNN算法研究

            随着信息技术的快速发展,大数据时代已经到来,人们迫切需要研究出更加方便有效的工具对收集到的海量信息进行J决速准确的分类,以便从中提取符合需要的、简洁的、精炼的、可理解的知识。口前关于这方而的研究已经取得了很大的进步。现有的分类算法有很多种,比较常用的有KNN,Native Bayes, Neural Net 、SVM,LLSF 等方法。

        针对这些算法处理大规模数据时存在的问题,国内外已经进行了很多相关方而的研究。文献【6】针对传统支持向量机方法处理大规模数据时时间复杂度和空间复杂度随数据量的增加直线上升的缺点,提出了核向量机(core vector machineCVM)方法,大大减小了算法的时间和空间复杂度;文献【Faster retrieval with a two-pass dynamic time warping lower bound】对向量机方法进行了进一步研究,提高了核向量机的分类速度和泛化能力,但是其分类精度依然没有得到改善;文献【time warp edit distance with stiffness adjustment for time series matching】提出了一种聚簇消减大规模数据的支持向量分类算法,提高了传统算法处理大规模数据时的速度,同时降低了算法的时间复杂度,但是精度也只有在阂值选择适当时才有可能达到既减少训练时间又提高精度的双赢目的。    KNN作为一种经典的统计模式识别方法,也是效果最好的分类方法之一,而且KNN方法主要靠周围有限的邻近样本,而不是靠判别类域的方法来确定所属类别,因此对于类域的交叉或重叠较多的大数据来说,KNN方法较其他方法更为适合,但KNN在分类时主要的不足是该算法只计算最近的邻居样本,某一类的样本数量很大,容易出现误判。现在主要采用权值的方法(与该样本距离小的邻居权值大)来改进,但是权值的设置针对不同的领域又要有不同的要求,实用性不是很高。该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。口前常用的解决方法是事先对已知样本点进行剪辑,但样本的剪辑经常带来后续的判别误差。本文针对大数据和KNN算法的特点,提出了DM-KNN算法,有效地解决了KNN算法对大数据的分类问题。

       一:KNN算法及其存在问题
       1. 1   KNN文本分类算法:KNN法由Cover和Hart于1968年提出,是一个理论上比较成熟的方法。该算法的基本思想是:根据传统的向量空间模型,文本内容被形式化为特征空间中的加权特征向量。对于一个测试文本,计算它与训练样本集中每个文本的相似度,找出K个最相似的文本,根据加权距离和判断测试文本所属的类别,具体算法步骤如下:
        a)对于一个测试文本,根据特征词形成测试文本向量。
        b)计算该测试文本与训练集中每个文本的文本相似度,按照文本相似度,在训练文本集中选出与测试文本最相似的k个文本。
        c)在测试文本的k个近邻中,依次计算每类的权重。
        d)比较类的权重,将文本分到权重最大的那个类别中。

       1. 2  KNN算法处理大数据时存在的问题
       KNN算法稳定性好、准确率高、简单易用,针对大数据的分类问题,它存在着如下缺点:a)对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点,而大数据的典型特点就是数据信息海量、价值密度低,这就显然出现了很大的无效计算量,在决定测试样本的类别时,该算法只计算最近邻的样本【neighbor-weighted K-nearest neighbor for unbalanced text corpus】,而大数据的另一个显著特点是涉及领域繁多、类别界限不明显,对于此类文本容易使判决结果产生偏差;c)随着信息爆炸时代的到来,各种新的事物层出不穷,出现新的类别的概率极大,而KNN算法的邻居都是已知的类别样本,也就导致了对新样本的无知或者误判。

       二:改进的KNN算法
       2.1分层模型的应用
    分层模型的基本思想是根据所属类别的不同对已知样本进行分层,第一层包含的类别数最少,最后一层包含的类别数最多,然后依层对未知样本进行分类。图1以社区民情民意信息的分层为例,图中共分了三层。


                                       图1

    第一层只有a和b两个类别,如果判断出来未知样本属于a类,那么在第二层时只需在a1,a2,a3类中进行比较,不需要在b类的其他文本进行比较。在第二层判断时,如果判断出来属于a1类,那么在第三层进行比较时只需要在a11,a12类中进行比较,依此类推即可。图1中菱形部分为分层模型需要比较的类别数,而传统的方法是需要对所有的数据进行比较。从图1中可见分层模型可以大大减少无效计算量。

      2. 2差分模型的应用
    本文用图示的方法来解释差分模型的思想。图2中,x是未知样本,a,b,c,d为已知类别,其中x到a ,b,c,d的距离分别
a,b,c,d,如图2所示。

                                                                                       

    如果a=max {a, b, c, d},△b=max { △b , △c , △d},那么按照传统KNN算法的思想,只需要把未知样本分配到a类中,根据分层思想,此时只需要在把未知样本x与a类中的子类a1,a2,a3,a4、再次利用KNN算法进行分类即可;但是如果利用差分模型,当且仅当|a|-|△b|>m时,才能将x判别到a类中,否则将x判别到a和b类中,然后对a和b类的子类再次进行KNN算法,如图3 (b)所示。

     2. 3改进的KNN算法—差分多层KNN (DM-KNN)算法
    针对大数据的自身特点以及KNN算法的缺点,算法主要在以下几个方而进行了改进:a)构建树状分层结构,针对KNN算法计算量比较大的缺点,本文改进后的算法采用构建树状分层结构首先对高层进行比较,然后依据高层比较结果的不同,再依次对下一层次进行比较,相比直接对所有文本进行距离计算,计算量明显减少,同时提高了运算速度;b)差分比较,由于大数据具有类域交叉性的特点,该算法不是在权重比较结束后直接进行判断,而是又针对大数据的类域交叉性进行了一次差分比较,可以有效地防止最近邻和次近邻误判的情况;c)动态增加类别,由于大数据中信息的不可预知性,该算法针对最终比较结果不能判断隶属于哪个类别的情况,在算法最后可以动态增加新类别。具体算法步骤如下:

a)对于一个测试文本,根据特征词形成测试文本向量。

b)对于训练文本集,利用专业领域知识,通过文本数据的分析定义出分层类别,将其构建成n层树状形式。

c)依次计算该测试文本与第1一n层训练集中每个文本的文本相似度(以下以第1层为例):1.文本相似度计算式为


上式中:di为测试文本的特征向量;d1j为第1层第J类的中心向量;M为特征向量的维数;wk为向量的第k维;K值的确定一般
先采用一个初始值,然后根据实验测试的结果调整K值。按照文本相似度,在训练文本集中选出与测试文本最相似的K个文本。2.在测试文本的K个近邻中,依次计算每类的权重3.对计算的权重进行排序4.对排序后的权重进行差分比较:
    ①D12=P11-P12。如果D12D0,(D0为阂值,有待于优化选择),则测试文本属于第1类,在对第二层进行相似度比较的时候,只需要比较第二层中第1类的子类;如果D12D0,则继续进行判断。
    ②Dk(k+1)=P1k-P1(k+1) 如果Dk(k+1)D0,则测试文本属于第1一k类中的其中一类,在对第二层进行比较时,只需要
比较第二层中第1类中第k类的子类;如果Dk(k+1)D0则继续进行判断。
    d)第n层,对于权重的差分比较结果,若比较结果不是单一的,采用动态增加类别的方法,在文本第,;层增加一个类;若比较结果单一,就将文本分到权重最大的那个类别中。
       2. 4时间复杂度分析

       由算法可知,KNN算法在时间上的代价主要在于测试样本与训练样本库中样本之间的相似度训计算。按照传统的KNN算法中直接计算测试样本与训练集中每个样本的相似度的方法,其时间复杂度为O(n2);而DM-KNN算法中构建树状分层结构,计算相似度时不需要对n个样本集都进行计算,只需要与分层之后相似层下的样本进行相似度计算,算法的复杂度降为O (nlogn)。也就是说改进后的算法时间复杂度远小于KNN算法或者类似于KNN算法的时间复杂度。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值