机器学习实战笔记-二.KNN
基于《机器学习实战-Peter Harrington》的学习笔记,整理学习中的想法,仅作参考
使用python3.8
机器学习
1.分类
2.机器学习开发步骤
1)收集数据
2)准备输入数据
3)分析输入数据
4)训练算法
5)测试算法
6)使用算法
关于KNN
KNN,k-近邻算法,属于监督学习的一种,采用测量不同特征值之间的距离进行分类:
训练样本集中每个数据都有一个标签,新的无标签数据A输入后,计算A与样本集中每个样本的距离并排序,得到前k名样本的标签,其中出现最多次的将成为A的标签分类。(通常k不大于20)
图中样本集有两类点,用红蓝代表其标签分类,设黑色点为输入数据,计算其与样本集中各点的距离并递增排序,设k为6,距离排名前6的点的标签分别为(b,r,b,r,r,r),其中red占多数,由此可以认为黑色点为“红”类。
k-近邻算法开发
依照本书提供的思路:
KNN算法伪代码:
对输入数据集中的每个点依次进行如下操作:
1)计算当前未知类别的点与样本数据集中每个点之间的距离
2)对距离递增排序
3)选择与当前未知点距离最近的k个点
4)得到这k个点所属类别(标签)出现的频率
5)返回出现频率最高的标签作为当前未知点的分类。
python代码
def classify0(inx,dataSet,labels,k): #inx:要分类的数据(向量) dataset:训练样本集 labels:样本集对应的标签(向量) k:选取前k个 knn
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(clas