KNN算法属于有监督学习中的分类算法
算法原理:
1 计算未知点与已知点的距离
2 列出前K个与此未知点最近的已知点(已经归好类有标签)
3 统计此K个中出现最多次数的归类并把未知点归为此类。
实例:
有4个带标签的点
[0,10] A
[0,8] A
[10,0] B
[7,0] B
求未知点[9,6]应该归为哪类
python实现如下:
from numpy import *
import operator
from os import listdir
def createDataSet():
group = array([[0,10],[0,8],[10,0],[7,0]])
labels = ['A','A','B','B']
return group, labels
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]#查看有几行标签
print('dataSetSize',dataSetSize)
diffMat = tile(inX, (dataSetSize,1)) - dataSet #每行复制一个未知点-每个已知点
print('diffMat\n',diffMat)
sqDiffMat = diffMat**2 #得到的差进行平方消除负数
sqDistances = sqDiffMat.sum(axis=1) #把每个点得到的两个数如(25,16)进行相加得到 4