[易懂机器学习(1)]KNN,k-Nearest Neighbor (k近邻算法)[分类算法]
k- Nearest Neighbor (k个最相似的邻居)算法
kNN算法到底是什么?它未知参数k到底是什么?
问题来了,如何用数学量化两个样本之间的相似度?
现在我们知道怎么量化相似度。剩下就是遇到一个新数据我想对它进行分类,那就遍历训练集带标签的已知数据。计算所有带标签数据和新数据之间的相似度。找到前k个相似度最大的数据,看他们的分类标签出现的次数。假如这k个数据出现的分类标签次数最多的是A类,那么算法就认为新数据它是属于A类。
编程实践:
from numpy import *
# 弄带标签的数据
data = array([[1.0, 1.1],[1.0, 1.0],[0,0],[0, 0.1]])
labels = ['A','A','B','B']# data各元素的类别标签
newdata = array([1.0, 0.9])
'''
:newdata 来了一个新样本数据,
现在问题是要knn根据已有的数据data和标签lables判断它属于哪个类.
'''
# 设定knn的参数。
# 只根据k个最相似的样本,统计他们的标签哪个分类出现次数最多就认为新数据属于这个类。
k = 3
# 1. 计算已知的所有样本与新数据的相似度
# 相似度:用两点间的距离来量化样本间的相似度.(距离越大越不相似))
# sum()中参数axis=1,表示按行把每行所有列累加起来
distance = sqrt(sum((data-newdata)**2, axis=1))
print('各样本与新数据之间的距离为:',distance)Last updated
