我们都已经熟悉了用 来表示特征(feature)和 来表示目标(target),KNN 作为一个监督性学习算法,也就是我们有一个带有目标结果的数据集 (X,y)
,并且我们想要研究他们其中的关系,也就是习得一个方程 从而能用 来预测 。
KNN 分类器也是一种 non parametric 并且 instance-based 算法.
值得注意的是,KNN的最小的训练阶段不仅要花费一个 “内存成本”(因为我们必须在测试期间存储一个巨大数据集)还要一个**“计算成本”**(因为对给定观察值进行分类需要消耗整个数据组)。实际上,这是不可取的。
在进行分类时,K近邻算法本质上归结为在给定 “看不见” 的 K 个最相似实例之间根据少数服从多数来表决(所以也称为投票算法)。
如何定义相似度呢?我们根据两个数据点之间的距离度量来定义相似性。经常选用欧几里得距离来定义:
但是也有其他的选择例如:Manhattan、Chebyshev以及Hamming 距离。
给定一个正整数 K、一个未知的观测值 和一个衡量具体的方法 ,KNN 通过下列步骤进行分类:
它跑遍整个数据集计算 和每个训练集观测值之间的距离。我们将训练数据集中最接近 的 K 个点称为集合 。注意,为了防止出现平局情况,K 通常是奇数。
接下来,它估计每个类别的条件概率,即具有给定类别标签的集合 中点的比例。(注意 是个 indicator 函数,其参数 为 true 时返回 1,否则为 0)
最后,我们输入的 根据最大的概率被分到对应的类别中。
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.
那么现在,KNN 算法你应该了解了,但是关于 K 的选取还是很重要的,类似于其他的机器学习算法,K 是一个超参数,是用来控制决策边界的形状的。
当 K 较小时,我们将 “眼光” 局限在给定预测的区域,并对我们的分类器对整体分布“视而不见”,它将具有低偏差但高方差的性质(也就是overfitting)。在图形上,决策边界将更加参差不齐。
另一方面,较大的 K 表示每个预测情况中的平均 “选民” 更多(也就是我们更偏重全局的考虑,每次考虑的数据点更多,模型有更强的泛化能力),因此对异常值的适应性更高。较大的 K 值将具有较平滑的决策边界,这意味着方差较小,但偏差增加(K 过大会 underfitting)
优点
缺点
面经
其他资料
K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同。