机器学习KNN

“k 近邻算法”综述

2018-11-18  本文已影响1人  李威威

“k 近邻算法”综述

本来题目想叫“白话 k 近邻算法”,后来想想,“k 近邻算法” 的描述几乎就是“白话”,所以就不故弄玄虚了,接下来的就是一篇笔记呀。

image

图片来自周志华《机器学习》第 10 章第 1 节。

想说一说“k 近邻算法”在机器学习中的地位

“k 近邻算法” 可以说是最容易理解的机器学习算法,所以可以用“k 近邻算法”来作为入门机器学习算法的基本流程的最好材料,因为我们在理解算法上不须要花太多时间。

下面简单说说,“k 近邻算法” 给我们带来了什么。

k 近邻算法的核心思想

k 近邻算法的三要素

1、超参数:k

2、距离的定义(例如:欧氏距离);

3、决策的规则(例如:投票表决,或者加权投票)。

算法执行的步骤:

1、选择 k 和距离的度量;
2、计算待标记的数据样本和数据集中每个样本的距离,取距离最近的 k 个样本。待标记的数据样本所属的类别,就由这 k 个距离最近的样本投票产生。

理解 k 近邻算法的部分核心代码

distances = [np.linalg.norm(point - X) for point in X_train]
print("打印每个点距离待测点的距离:")
for index, distance in enumerate(distances):
    print("[{}] {}".format(index, np.round(distance, 2)))

sorted_index = np.argsort(distances)
print(y_train[sorted_index])

k = 6
topK = y_train[sorted_index][:k]
print(topK)

from collections import Counter

votes = Counter(topK)
mc = votes.most_common(n=1)
print(mc)
print("根据投票得出的点 X 的标签为:", mc[0][0])

k 近邻算法的训练过程,即是利用训练数据集,对特征向量空间进行划分

李航《统计学习方法》P37

说明:从这张图中,你可以看到决策边界。

k 近邻算法的应用领域

文本分类、模式识别、聚类分析,多分类领域。

要注意的地方

image

标准化的训练数据集 = \cfrac{原始训练数据集数据-训练数据集的平均值}{训练数据集的标准差}

标准化的测试数据集 = \cfrac{原始训练测试集数据-训练数据集的平均值}{训练数据集的标准差}

<b><font size='3' color='ff0000'>测试数据集在标准化的时候,一定也要使用“训练数据集的平均值”和“训练数据集的标准差”,而不能使用测试数据集的。</font></b>

原因其实很简单:

1、标准化其实可以视为算法的一部分,既然数据集都减去了一个数,然后除以一个数,这两个数对于所有的数据来说,就要一视同仁;
2、训练数据集其实很少,在预测新样本的时候,新样本就更少得可怜,如果新样本就一个数据,它的均值就是它自己,标准差是 0 ,这根本就不合理。

k 近邻算法的优点

k 近邻算法的缺点

k 近邻算法说开

维基百科最近邻居法词条中是这样介绍的:

无论是分类还是回归,衡量邻居的权重都非常有用,使较近邻居的权重比较远邻居的权重大。例如,一种常见的加权方案是给每个邻居权重赋值为 \cfrac{1}{d},其中 d 是到邻居的距离。

扩展

参考资料

上一篇下一篇

猜你喜欢

热点阅读