KNN分类算法的实现

KNN分类算法的实现

摘  要  KNN算法是数据挖掘技术中比较常用的分类算法, 由于其实现的简单性, 在很多领域得到了广泛的应用。本文介绍了传统的KNN算法,并用MATLAB将其实现。

关键词  数据挖掘,分类算法,KNN分类

 

Implementation of K Nearest Neighbors Algorithm

ABSTRACT  KNN algorithm has been widely used in many data mining areas due to its simplicity.This paper introduces the traditional KNN algorithm, using MATLAB to realize it.

KEYWORDS  Data mining ,sorting Algorithm,KNN classification

 

1.引言

  分类是数据挖掘领域中一种重要的技术, 它是从一组已知的训练样本中发现分类模型, 并且使用这个分类模型来预测待分类样本。目前比较常用的分类方法有:决策树、神经网络、KNN、SVM 和贝叶斯方法等, 其中KNN 算法以其实现的简单性及较高的分类准确性在各领域得到了广泛的应用。

2.KNN算法概述

  KNN算法是一个理论上比较成熟的方法,最初由Cover和Hart于1968年提出,其思路非常简单直观,易于快速实现,以及错误低的优点。KNN 分类算法的主要思想是:先计算待分类样本与已知类别的训练样本之间的距离或相似度, 找到距离或相似度与待分类样本数据最近的K 个邻居;再根据这些邻居所属的类别来判断待分类样本数据的类别。如果待分类样本数据的K个邻居都属于一个类别, 那么待分类样本也属于这个类别。否则, 对每一个候选类别进行评分, 按照某种规则来确定待分类样本数据的类别。

3.KNN算法分析

  K近邻法是由Cover Hart 1968 年提出的是当k = 1 时的一种特定的NN (NearestNeighbor) , NN 强调最近点的重要性KNN 则从整体考虑是一种更为普遍的方法理论上认为错误率比NN 低。K近邻算法的思想很简单给一篇待识别的文章系统在训练集中找到最近的个近邻看这个近邻中多数属于哪一类就把待识别的文章归为那一类。下面介绍k近邻法的数学模型。K近邻算法描述如下:

1) 根据特征项集合重新描述训练文本向量。

2) 在新文本到达后根据特征词分词新文本确定新文本的向量表示。

3) 在训练文本集中选出与新文本最相似的个文本。

4) 在新文本的个邻居中依次计算每类的权重。

5) 比较类的权重将文本分到权重最大的类别中。

4实验与结果分析

     在MATLAN中先设定两类数据,第一类数据用以下代码实现:

mu1=[0 0];  %均值

S1=[0.3 0;0 0.35];  %协方差

data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据

plot(data1(:,1),data1(:,2),'+');

label1=ones(100,1);

hold on;

第二类数据用一下代码实现:

mu2=[1.25 1.25];

S2=[0.3 0;0 0.35];

data2=mvnrnd(mu2,S2,100);

plot(data2(:,1),data2(:,2),'ro');

label2=label1+1;

data=[data1;data2];

label=[label1;label2];

设定待测试数据:

for ii=-3:0.1:3

    for jj=-3:0.1:3

        test_data=[ii jj];  %测试数据

        label=[label1;label2];

使用KNN算法,设定k=11,结果如下图:

图1 KNN算法实现结果1

设定K=3,结果如下图:

图2 KNN算法实现结果2

设定K=30,实验结果如下图:

图3 KNN算法实现结果3

 

5结语

KNN算法简单直观,易于实现,通过以上实验在MATLAB平台下实现了KNN算法,也可以看出K值得选取对KNN算法影响很大。

参考文献

[1] 潘丽芳,杨炳儒.基于簇的K最近邻(KNN)分类算法研究.计算机工程与设计,2009,30(18):4260-4262.

[2] 张著英,黄玉龙,王翰虎.一个高效的KNN分类算法.计算机科学,2008,35(3):170-172.

[3] 张运良,张全.柔性KNN算法研究[J].计算机工程与应用,2007,43(34):25-28.

[4]陈安, 陈宁, 周龙骧, 等.数据挖掘技术及应用.北京:科学出版社,2006


附录

源代码:

 

clear all;

close all;

clc;

 

%%第一个类数据和标号

mu1=[0 0];  %均值

S1=[0.3 0;0 0.35];  %协方差

data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据

plot(data1(:,1),data1(:,2),'+');

label1=ones(100,1);

hold on;

 

%%第二个类数据和标号

mu2=[1.25 1.25];

S2=[0.3 0;0 0.35];

data2=mvnrnd(mu2,S2,100);

plot(data2(:,1),data2(:,2),'ro');

label2=label1+1;

 

data=[data1;data2];

label=[label1;label2];

 

K=11;   %两个类,K取奇数才能够区分测试数据属于那个类

%测试数据,KNN算法看这个数属于哪个类

for ii=-3:0.1:3

    for jj=-3:0.1:3

        test_data=[ii jj];  %测试数据

        label=[label1;label2];

        %%下面开始KNN算法,显然这里是11NN。

        %求测试数据和类中每个数据的距离,欧式距离(或马氏距离) 

        distance=zeros(200,1);

        for i=1:200

            distance(i)=sqrt((test_data(1)-data(i,1)).^2+(test_data(2)-data(i,2)).^2);

        end

 

        %选择排序法,只找出最小的前K个数据,对数据和标号都进行排序

        for i=1:K

            ma=distance(i);

            for j=i+1:200

                if distance(j)<ma

                    ma=distance(j);

                    label_ma=label(j);

                    tmp=j;

                end

            end

            distance(tmp)=distance(i);  %排数据

            distance(i)=ma;

 

            label(tmp)=label(i);        %排标号,主要使用标号

            label(i)=label_ma;

        end

 

        cls1=0; %统计类1中距离测试数据最近的个数

        for i=1:K

           if label(i)==1

               cls1=cls1+1;

           end

        end

        cls2=K-cls1;    %类2中距离测试数据最近的个数

        

        if cls1>cls2    

           plot(ii,jj);     %属于类1的数据画小黑点

        end

        

    end

End

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: KNN分类算法可以根据身高和体重对体型进行分类。具体来说,我们可以将身高和体重作为特征,将体型作为标签,然后使用KNN算法对不同的数据点进行分类。KNN算法会根据不同数据点之间的距离来确定它们的相似度,然后将它们分为不同的类别。在这个例子中,我们可以将不同的体型分为瘦、正常和胖三类,然后使用KNN算法对新的身高和体重数据进行分类,从而确定它们属于哪一类体型。 ### 回答2: KNN算法即k-Nearest Neighbor算法,是一种基本的分类算法。其主要思想是通过度量不同数据点之间的距离,将样本空间划分为多个区域,并将未知样本分类到最近的K个训练样本中。在本文中,我们将使用KNN算法将身高和体重作为特征,将体型作为标签进行分类。 首先,我们需要收集大量的身高、体重和对应的体型标签数据。然后将数据集划分为训练集和测试集,其中训练集用于训练分类器,测试集用于验证分类器的性能。 接着,我们需要对训练集中的所有样本计算与测试样本之间的距离。在计算距离时,我们可以使用欧式距离或曼哈顿距离等距离公式。然后,根据距离从小到大排序,在前K个最近的训练样本中,我们统计各种体型的出现频率。最后,我们将测试样本分类为具有最高频率的体型。 最后,我们需要对分类器的性能进行评估。我们可以使用准确率、召回率、F1分数等指标来评估分类器的性能。如果分类器的性能不好,我们可以尝试使用特征选择、特征缩放、样本平衡等技术来提高模型的性能。 在整个过程中,我们需要注意一些问题,如如何选取最佳的K值、如何处理缺失数据、如何处理异常值等。但总的来说,KNN算法是一种比较简单有效的分类算法,特别适用于小规模数据集的分类问题。 ### 回答3: KNN(K-最近邻)是一种基于特征相似度进行分类的算法,即当要分类一个新的数据对象时,根据其邻近(最相似的)若干个已知分类数据对象的类别,来确定该新数据对象的分类。在本例中KNN算法可以实现根据身高和体重两个特征对体型进行分类。具体实现步骤如下: 1.确定K值。K值即在求距离时需要取多少个最近邻的点,需要进行尝试,以达到最优的效果。 2.读入训练集数据。将已有的身高、体重、体型数据组成一个二元组。为了方便计算,可以将身高、体重标准化。 3. 计算已知数据点与待分类点的距离。距离根据数据点的身高、体重进行计算。可以使用欧几里得距离或其他距离度量公式。 4.根据最邻近K个数据点中的体型进行分类,假设取出的K个样本数据中,m个属于小胖子,n个属于中等身材,p个属于大瘦子,则认为该待分类点属于(m+n+p)中比例最大的一类。 5.验证算法。将测试集数据划分出来,用KNN分类算法进行分类,用实际标签与分类器预测标签进行比对,计算预测准确率。 KNN算法是一种简单实用的分类算法实现起来也比较容易。其准确性与K值大小、数据分布等都有关系,需要进行尝试调参以达到更好的效果。当然,KNN算法也并不是万能的,它的缺点包括无法处理特征值缺失的情况,且计算量大,分类速度较慢,不适合大数据量的分类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值