K—近邻算法分析
K—近邻算法采用测量不同特征之间的距离方法进行分类
特点:
-
对异常值不敏感
-
精度高
-
计算复杂度高
-
空间复杂度高
K—近邻算法的一般流程
-
收集数据
-
准备数据
-
分析数据
-
测试算法
-
使用算法
示例代码如下
# K近邻算法
# 调用numpy和operator包
from numpy import *
import operator
# dataSet数据集合 没有标签
# labels 标签
# k 最近邻近的数目
# inX 分类的输入向量
def classify0(inX, dataSet, labels, k):
# 提取数据的特征数量
# shape[0]提取一维长度
# shape[1]提取二维长度
dataSetSize = dataSet.shape[0]
# 使用了欧式距离
diffMat = tile(inX, (dataSetSize, 1))-dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
# argsort()为大小排序
sortedDistIndicies = distances.argsort()
classCount = {}
for i in range(k):
voteIlable = labels[sortedDistIndicies[i]]
classCount[voteIlable] = classCount.get(voteIlable, 0) + 1
sortedClassCount = sorted(classCount.iteritems(),
key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]