kNN算法学习(一)

1、首先需要一些训练样本集,例如一道问题(数据)及答案(标签),可以看做一条样本,那么多条,就是样本集

当然这里应该是一条数据及该数据所属的分类,该类别称为标签

2、现在我们已经知道数据与所属类别的对应关系

3、那么当我们想要输入一条数据时,就可以通过KNN算法,根据已知的对应关系,判断该数据的类别。

 

具体步骤如下:

1、收集训练样本集(数据<->类别)

2、输入所要判断的数据

3、计算该数据与训练样本的距离

4、将这些距离升序排列,取前K条训练样本,这就是kNN,k的出处

5、统计这k条训练样本数据所属类别及其对应的个数,然后降序排列

6、第一个类别便是输入数据的计算结果

 

python3例子如下:

from numpy import *
import operator

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group,labels

def classify0(inX, dataSet, labels,k):
    # 欧式距离计算
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDisIndicies = distances.argsort()
    # 选择距离最小的k个点
    classCount={}
    for i in range(k):
        voteIlabel = labels[sortedDisIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    # 排序
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]


group, labels = createDataSet()
print(classify0([0,0],group,labels,3))

 

posted @ 2018-04-10 23:29  植入代码  阅读(419)  评论(0编辑  收藏  举报