0 写在前
kNN作为自监督学习算法中分类算法的基础算法之一.是传统机器学习中通过距离和概率的一种判定结果的方法
1 以例讲解
假设有样本空间[x1,x2,x3,x4] x1=[2,0.5],x2=[1.5,0.8],x3=[2,3],x4=[3,2],其对应的标签为y=[1,1,0,0]
首先我们通过图像查看其分布:
然后有一个预测分类点x6=[1.2,0.9],现在任务是需要判断该点属于哪一类.
2 通过代码实现分类预测
对于数据而言,眼睛其实很好将其预测为1,那么接下来我们要做的是用理论来实现它.这里就不进行归一化了.直接表示实现方法:
- 计算该需要预测点与训练样本点之间的欧式距离.
- 进行排序,并查找对应的位置,这样方便配对标签
- 设置k值,k的目的是为了通过预测频率得到预测分类
第一步:
[ s u m ( x 6 − x 1 ) 2 = 0.894427 s u m ( x 6 − x 2 ) 2 = 0.316228 s u m ( x 6 − x 3 ) 2 = 2.24722 s u m ( x 6 − x 4 ) 2 = 2.1095 s u m ( x 6 − x 5 ) 2 = 2.28035 ] \begin{bmatrix} \sqrt{sum(x6-x1)^{2}}=0.894427 \\ \sqrt{sum(x6-x2)^{2}}=0.316228 \\ \sqrt{sum(x6-x3)^{2}} =2.24722\\ \sqrt{sum(x6-x4)^{2}}=2.1095 \\ \sqrt{sum(x6-x5)^{2}}=2.28035 \\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡sum(x6−x1)2=0.894427sum(x6−x2)2=0.316228sum(x6−x3)2=2.24722sum(x6−x4)2=2.1095sum(x6−x5)2=2.28035⎦⎥⎥⎥⎥⎤
第二步:
[ 0.894427 1 0.316228 0 2.24722 3 2.1095 2 2.28035 4 ] \begin{bmatrix} 0.894427 & 1 \\ 0.316228 & 0 \\ 2.24722&3\\ 2.1095&2 \\2.28035&4 \\ \end{bmatrix} ⎣⎢⎢⎢⎢⎡0.8944270.3162282.247222.10952.2803510324⎦⎥⎥⎥⎥⎤
第三步:
如果k=1,那么出现最近的距离为0.316228,而x2的标签为1,标签1出现1次,标签0出现0次,这时预测为1
如果k=2,那么出现最近的距离为0.316228,0.894427而x2,x1的标签为1,标签1出现2次,标签0出现0次,这时预测为1
如果k=3,那么出现最近的距离为0.316228,0.894427,2.1095&2而x2,x1的标签为1,x4的标签为0,标签1出现2次,标签0出现1次,这时预测为1
但是接下来就会出现无法预测的结果,所以k值得选择至关重要.太大,可能使得直接误判.太小由于其频率太绝对,使得预测也可能出错.
其理论就是这样.接下来就是代码
def classify0(inX, dataSet, labels, k):
""" inX:预测样本
dataset:训练样本集
labels:数据标签
k:k近邻算法的k值
"""
dataSetSize = dataSet.shape[0]
# np.tile作用是产生inX形式的矩阵
diffMat = np.tile(inX, (dataSetSize,1)) - dataSet
#数据平方
sqDiffMat = diffMat**2
# 计算平方和,矩阵的每一行向量相加
sqDistances = sqDiffMat.sum(axis=1)
# 欧式距离公式的体现,开根号
distances = sqDistances**0.5
# 找出list中的index,首先排序distances,然后找出对应的位置
sortedDistIndicies = distances.argsort()
# 计算标签对应下的个数
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
# 对应标签的计数
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
# 计算 对应标签出现的频率
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
其项目代码见<机器学习实战>Peter Harrington著