KNN

什么是 k 近邻算法

我们都已经熟悉了用 XX 来表示特征(feature)和 yy 来表示目标(target),KNN 作为一个监督性学习算法,也就是我们有一个带有目标结果的数据集 (X,y),并且我们想要研究他们其中的关系,也就是习得一个方程 h(x)h(x) 从而能用 XX 来预测 yy

h:Xyh: X \rarr y

KNN 分类器也是一种 non parametric 并且 instance-based 算法.

值得注意的是,KNN的最小的训练阶段不仅要花费一个 “内存成本”(因为我们必须在测试期间存储一个巨大数据集)还要一个**“计算成本”**(因为对给定观察值进行分类需要消耗整个数据组)。实际上,这是不可取的。

核心思想:K 近邻

在进行分类时,K近邻算法本质上归结为在给定 “看不见” 的 K 个最相似实例之间根据少数服从多数来表决(所以也称为投票算法)。

如何定义相似度呢?我们根据两个数据点之间的距离度量来定义相似性。经常选用欧几里得距离来定义:

d(x,x)=(x1x1)2++(xnxn)2d(x, x') = \sqrt{\left(x_1 - x'_1 \right)^2 + \dotsc + \left(x_n - x'_n \right)^2}

但是也有其他的选择例如:Manhattan、Chebyshev以及Hamming 距离。

给定一个正整数 K、一个未知的观测值 xx 和一个衡量具体的方法 dd,KNN 通过下列步骤进行分类:

P(y=jX=x)=1KiAI(y(i)=j)P(y = j | X = x) = \frac{1}{K} \sum_{i \in \mathcal{A}} I(y^{(i)} = j)

最后,我们输入的 xx 根据最大的概率被分到对应的类别中。

KNN searches the memorized training observations for the K instances that most closely resemble the new instance and assigns to it the their most common class.

K的影响

那么现在,KNN 算法你应该了解了,但是关于 K 的选取还是很重要的,类似于其他的机器学习算法,K 是一个超参数,是用来控制决策边界的形状的。

K 较小时,我们将 “眼光” 局限在给定预测的区域,并对我们的分类器对整体分布“视而不见”,它将具有低偏差但高方差的性质(也就是overfitting)。在图形上,决策边界将更加参差不齐

另一方面,较大的 K 表示每个预测情况中的平均 “选民” 更多(也就是我们更偏重全局的考虑,每次考虑的数据点更多,模型有更强的泛化能力),因此对异常值的适应性更高。较大的 K 值将具有较平滑的决策边界,这意味着方差较小,但偏差增加K 过大会 underfitting

KNN的优缺点

改进

KNN面经和其他资料

小结

K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同。