KNN算法
(机器学习实战)
K-近邻算法采用测量不同特征值之间的距离方法进行分类。
工作原理:
- 已有一个样本数据集,即训练集,并且训练集的每个数据都有其对应的分类标签。输入没有标签的新数据后,将新数据的每个特征与样本集中的数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签。也就是看最相近的k个数据的标签,通过多数表决的方式进行。
- 这里的k-NN的k即为选择的样本数据集中的前k个最相似的数据,通常k设置为不大于20的整数
通过距离度量来计算查询点(query point)与每个训练数据点的距离,然后选出与查询点(query point)相近的K个最邻点(K nearest neighbors),使用分类决策来选出对应的标签来作为该查询点的标签。
例子:
-
电影分类
现在已知电影分类为动作电影和爱情电影,其中已有数据为每部电影的打斗镜头和接吻镜头的数量。如何通过已有数据对未知电影分类呢?
可以先对已有数据进行大致的绘图:
很显然我们猜测未知电影应该是属于爱情片的。实际上kNN算法的思想就是如此简单,通过查看离未知点最近的k个点的标签来推测该点的标签
用数学的方法表示:
可以定义一种距离,根据具体的情况定义即可。在此用普通的欧拉距离(当然我觉得可以给每种属性一个权重,但是如何定义权重应该用先验知识和已知数据去共同决定)
d = ( A 1 − A 2 ) 2 + ( B 1 − B 2 ) 2 d=\sqrt{(A_{1}-A_{2})^2+(B_1-B_2)^2} d=(A1−A2)2+(B1−B2)2