1、k近邻算法
k近邻算法的一般流程:
(1)收集数据:可以使用任何方法。
(2)准备数据:距离计算所需要的数值,最好是结构化的数据格式。
(3)分析数据:可以使用任何方法。
(4)测试算法:计算错误率。
(5)使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k近邻算法判定输入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理。
两点间距离公式
import numpy as py
group = py.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) #标签位置
labels = ['A','A','B','B'] #标签
# inX:输入的测试向量
# k:代表频率,选择前k个距离最近的点,计算出k个点的频率,取频率最高的作为预测分类
def kNN(inX,group,labels,k):
dataSize = group.shape[0] #取行
diffMat = py.tile(inX,(dataSize,1))-group #生成与group相同大小的列表,元素都是inX,然后减去group
sqDiffMat = diffMat**2 # 对列表平方
sqDistances = sqDiffMat.sum(axis=1) #平方值相加
distances = sqDistances ** 0.5 #开方
sortedDis = distances.argsort() #返回从小到大的排序值下标 [1,43,2] 返回 [0,2,1]
classCount={}
for i in range(k):
voteiLabel = labels[sortedDis[i]] #取出前K个距离最近的标签
classCount[voteiLabel] = classCount.get(voteiLabel,0)+1 #统计出现频率
sortedclassCount = sorted(classCount.items(),key=lambda x : x[1],reverse=True) #按照频率降序排列
return sortedclassCount[0][0] #返回第一个