我们有一组数据集合,该数据集合我们已经分好类了,知道哪个数据是属于哪个类别的。在这个数据集合基础上,我们拿到了一个新的数据,那么,我们如果认为这个数据应该是属于哪个类别呢?
在K-近邻算法中,我们把这个新的数据和已知的数据集合中的每一数据进行距离的计算,然后选择出K个距离最近的已知数据,在这K个距离最近的已知数据中,看哪些类别出现的概率是最大的。哪个类别概率最大,那么这个新的数据就最可以属于这个类别。
这就是:K-近邻算法。
看上去很简单,主要技术点在距离的计算 这块。
距离的计算主要使用欧式公式进行,可以google下相关算法。
K-近邻算法:
from numpyimport *
import operator
from os importlistdir
defclassify0(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
sortedDistIndicies =distances.argsort()
classCount={}
for i in range(k):
voteIlabel =labels[sortedDistIndicies[i]]
classCount[voteIlabel] =classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]