美文网首页
MATLAB的KNN实现

MATLAB的KNN实现

作者: 淇漯草 | 来源:发表于2018-11-27 08:58 被阅读0次

    KNN算法概述:
    1.KNN算法是通过已有的数据,已有的标签,对新数据进行分类。
    2.分类依据:找最近的K个点,大部分人所在的集合,就是我所在的集合。
    3.K的意思:最近的K个点。
    举例:2(a类),8(b类),11(a类),30(c类),45(c类),70(a类)
    我的值为15,取K=3。
    最近的点为:2,8,11
    a类2个,b类1个,c类0个
    那么我是a类的


    一、数据
    以矩阵形式存储,此处采用二维(即特征值两个)
    一、训练数据,标签,测试数据
    我们得到矩阵,形式如下

    trainData  = [1.0,2.0;1.2,0.1;0.1,1.4;0.3,3.5]; %为4×2矩阵,每一个数据为横向
    trainClass = [1; 1; 2; 2];                                 %标签4×1
    testData   = [0.5, 2.3];
    

    二、距离表示
    采用欧氏距离

    先将testData扩展到与trainData同等形式的矩阵,使得每个值直接相减

    temp = repmat(testData, [size(trainData,1), 1]); %将测试点分化为训练集的数量
    dist = (temp - trainData).^2; %计算距离各个点的距离,采用欧式距离法
    dist = sqrt(sum(dist, 2)); 
    

    三、对距离进行排序

    [sorted, sortedIndex] = sort(dist); %此时得到sorted 为4×1的矩阵, 而Index下标为4*1
    

    四、第四步我们是对其类别进行思考
    采用k个临近点,此处采用k=3
    我们用count数组(与标签对应),记录K个相近顶点中相应标签的个数

    k = 3; 
    count = zeros(1, length(unique(trainClass)));
    for i = 1:k
        count(trainClass(sortedIndex(i))) = count(trainClass(sortedIndex(i))) + 1;
    end
    

    五、找出count数组中的最大值,也就是其分类结果

    [Max, result] = max(count);
    

    Max为最大值,result为最大值在count的下标,(恰好代表标签)。


    相关文章

      网友评论

          本文标题:MATLAB的KNN实现

          本文链接:https://www.haomeiwen.com/subject/ozywqqtx.html