KNN算法之图像处理一

KNN:

  1.数据挖掘分类技术中最简单的方法之一。

  2.也称为邻近算法,K最近邻分类算法

  3.每个样本都可以用它最接近的k个邻居来代表

  4.一般,距离使用欧式距离或曼哈顿距离(通常,k≤20)

python代码实现

  例子:

    已有的分类数据:

      A:(1.0,2.0)

      A:(1.2,0.1)

      B:(0.1,1.4)

      B:(0.3,3.5)

    测试数据:(1.1,0.3)

    推测结论(正确):A

  代码:

from array import array

from numpy import *
import operator

## 给出训练数据以及对应的类别
def createDataset():
    group = array([[1.0,2.0],[1.2,0.1],[0.1,1.4],[0.3,3.5]])
    labels = ['A','A','B','B']
    return group,labels

###通过KNN进行分类
def classify(input,dataSet,label,k):
    dataSize = dataSet.shape[0]
    ####计算欧式距离
    diff = tile(input,(dataSize,1))-dataSet
    sqdiff = diff ** 2
    squareDist = sum(sqdiff,axis=1)###行向量分别相加,从而得到新的一个行向量
    dist = squareDist ** 0.5

    ##对距离进行排序
    sortedDisIndex = argsort(dist)##argsort()根据元素的值从大到小对元素进行排序,返回下标

    classCount={}
    for i in range(k):
        voteLabel =label[sortedDisIndex[i]]
        ###对选取的k个样本所属的类别个数进行统计
        classCount[voteLabel] = classCount.get(voteLabel,0) + 1
    ###选取出现的类别次数最多的类别
    maxCount = 0
    for key,value in classCount.items():
        if value > maxCount:
            maxCount =value
            classes =key

    return classes



##函数入口
if __name__ == '__main__':
    dataSet,labels = createDataset()
    input = array([1.1,0.3])
    K=3
    output = classify(input,dataSet,labels,K)
    print("测试数据为:",input,"分类结果为:",output)

    运行结果:

    

 

posted @ 2018-09-10 16:15  风影我爱罗  阅读(756)  评论(0编辑  收藏  举报