KNN算法学习笔记
KNN算法:
1.计算已知类别数据集中的的点与当前点之间的距离
2.按照距离递增次序排序
3.选取与当前点距离最小的k个点
4.确定与前k个点所在类别的出现频率
5.返回前k个点出现的频率最高的类别作为当前点的预测分类
算法源码:
import numpy
from numpy import *
import operator
def classify0(inX,dataSet,labels,k):
dataSetSize=dataSet.shape[0] #numpy shape()函数
diffMat=tile(inX,(dataSetSize,1))-dataSet #numpy tile()函数
sqDiffMat =diffMat**2
sqDistances=sqDiffMat.sum(axis=1) #sum(axis) axis=0表示按列相加,axis=1表示按照行的方向
distances=sqDistances**0.5
sortedDistIndicies=distances.argsort() #sortedDistIndicies=[2 3 1 0] #numpy argsort()函数
classCount={ }
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]] # B B A
#下面统计出现的次数
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #{'B': 1} {'B': 2} {'B': 2, 'A': 1}
#此处对上面统计好的次数进行排序
sortedClassCount=sorted(classCount.items( ), key = operator.itemgetter(1),reverse=True) #[('B', 2), ('A', 1)]
return sortedClassCount[0][0]
#以下为实验数据
b=['A','A','B','B']
a=array([[1,1.1],[1,1],[0,0],[0,0.1]])
asd=classify0([0,0],a,b,3)
KNN算法实例(1)--约会网站数据:
apache cn讲解
(1)numpy 切片与索引
(2)Matplolib入门