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)
运行结果: