机器学习-圣诞日历-第-2-天-Excel-中的-k-NN-分类器

机器学习“圣诞日历”第 2 天:Excel 中的 k-NN 分类器

原文:towardsdatascience.com/the-machine-learning-advent-calendar-day-2-k-nn-classifier-in-excel/

在探索了 k-NN 回归器和基于距离的预测思想之后,我们现在来看看 k-NN 分类器。

原理相同,但分类允许我们引入几个有用的变体,例如半径最近邻、最近质心、多类预测和概率距离模型。

因此,我们将首先实现 k-NN 分类器,然后讨论如何改进它。

图片

Excel 中的 k-NN 分类器 – 图片由作者提供

泰坦尼克号生存数据集

我们将使用泰坦尼克号生存数据集,这是一个经典示例,其中每一行描述了一位乘客,具有诸如阶级、性别、年龄和船票等特征,目标是预测乘客是否幸存。

图片

泰坦尼克号生存数据集 – 图片由作者提供 – CC0: 公共领域许可

k-NN 分类原理

k-NN 分类器与 k-NN 回归器非常相似,我几乎可以写一篇文章来解释它们两个。

事实上,当我们寻找最近的 k 个邻居时,我们根本不使用值 y更不用说它的性质了。

但是,关于分类器(二进制或多类)是如何构建的,以及特征如何被不同处理,还有一些有趣的事实。

我们从二元分类任务开始,然后是多元分类。

二元分类的一个连续特征

因此,非常快地,我们可以用这个数据集对单个连续特征进行相同的练习。

对于 y 的值,我们通常使用 0 和 1 来区分两个类别。但你可以注意到,或者你会注意到,这可能会引起混淆。

图片

Excel 中的 k-NN 分类器 – 一个连续特征 – 图片由作者提供

现在,想想看:0 和 1 也是数字,对吧?所以,我们可以完全像做回归一样进行相同的过程。

没错。计算过程中没有任何变化,正如你在下面的截图中所看到的。当然,你也可以尝试修改新观察值的值。

图片

Excel 中的 k-NN 分类器 – 对一个连续特征的预测 – 图片由作者提供

唯一的区别是我们如何解释结果。当我们取邻居的 y 值的“平均值”时,这个数字被理解为新观察属于类别 1 的概率。

因此,在现实中,“平均值”并不是一个好的解释,而是更接近于类别 1 的比例。

我们也可以手动创建这个图,以展示预测概率在一系列x值范围内的变化。

传统上,为了避免得到 50%的概率,我们选择一个奇数作为k,这样我们就可以总是通过多数投票来做出决定。

图片

Excel 中的 k-NN 分类器 – 对一个连续特征的预测 – 图片由作者提供

二特征用于二分类

如果我们有两个特征,操作也几乎与 k-NN 回归器相同。

图片

Excel 中的 k-NN 分类器 – 两个连续特征 – 图片由作者提供

单特征用于多分类

现在,让我们以目标变量 y 的三个类别为例。

然后我们可以看到,我们不能再使用“平均”这个概念了,因为代表类别的数字实际上并不是一个数字。我们最好把它们称为“类别 0”、“类别 1”和“类别 2”。

图片

Excel 中的 k-NN 分类器 – 多类分类器 – 图片由作者提供

从 k-NN 到最近中心点

当 k 变得太大时

现在,让我们让 k 变得很大。有多大?尽可能大。

记住,我们也用 k-NN 回归器做了这个练习,结论是如果 k 等于训练数据集中的观察值总数,那么 k-NN 回归器就是简单平均值估计量。

对于 k-NN 分类器,几乎也是一样的。如果 k 等于观察值的总数,那么对于每个类别,我们将在整个训练数据集中得到其整体比例。

有些人从贝叶斯的角度来看,把这些比例称为先验

但这并不能在很大程度上帮助我们分类新的观测值,因为这些先验对每个点都是相同的。

中心点的创建

因此,让我们再迈出一步。

对于每个类别,我们也可以将属于该类别的所有特征值x分组在一起,并计算它们的平均值。

这些平均特征向量就是我们所说的中心点

我们可以用这些中心点做什么?

我们可以用它们来分类新的观测值。

而不是为每个新点重新计算到整个数据集的距离,我们只需测量到每个类别中心点的距离,并将类别分配给最近的那个。

使用泰坦尼克号生存数据集,我们可以从一个单一的特征开始,年龄,并为两个类别计算中心点:幸存乘客和未幸存乘客。

图片

Excel 中的 k-NN 分类器 – 最近中心点 – 图片由作者提供

现在,也可以使用多个连续特征。

例如,我们可以使用两个特征:年龄和票价。

图片

Excel 中的 k-NN 分类器 – 最近中心点 – 图片由作者提供

我们可以讨论这个模型的一些重要特性:

  • 规模很重要,正如我们之前在 k-NN 回归器中讨论的那样。

  • 缺失值在这里不是问题:当我们按类别计算质心时,每个都是用可用的(非空)值计算的

  • 我们从最“复杂”和“大”的模型(在这个意义上,实际模型是整个训练数据集,因此我们必须存储整个数据集)到最简单的模型(我们只使用每个特征的一个值,并且我们只存储这些值作为我们的模型)

从高度非线性到天真线性

但是现在,你能想到一个主要的缺点吗?

而基本的 k-NN 分类器是非线性的,最近邻质心方法则是极其线性的。

在这个 1D 示例中,两个质心仅仅是类别 0 和类别 1 的平均 x 值。因为这两个平均值很接近,决策边界就变成了它们之间的中点。

因此,我们得到的不是依赖于许多训练点确切位置的阶梯状、锯齿状的边界(如 k-NN),而是一个只依赖于两个数的直线截断。

这说明了最近邻质心如何将整个数据集压缩成简单且非常线性的规则。

Excel 中的 k-NN 分类器 – 最近邻质心线性 – 图像由作者提供

关于回归的一个注释:为什么质心不适用

现在,这种改进对于 k-NN 回归器是不可能的。为什么?

在分类中,每个类别形成一组观察值,因此计算每个类的平均特征向量是有意义的,这给了我们类质心。

但是在回归中,目标y是连续的。没有离散的组,没有类别边界,因此没有计算“类别质心”的有意义的方法。

连续目标有无限多个可能的值,所以我们不能通过它们的y值来分组观察值以形成质心。

在回归中,唯一可能的“质心”是全局均值,这对应于 k-NN 回归器中的 k = N 的情况。

而这个估计量过于简单,以至于没有用处。

简而言之,最近邻质心分类器是分类的自然改进,但在回归中并没有直接的等效方法。

进一步的统计改进

我们还能用基本的 k-NN 分类器做些什么?

平均值和方差

使用最近邻质心分类器,我们使用了最简单的统计量,即平均。在统计学中,一个自然的反应是添加方差

现在,距离不再是欧几里得距离,而是马氏距离。使用这种距离,我们根据每个类别的均值和方差特征来获取概率。

类别特征处理

对于类别特征,我们无法计算平均值或方差。而对于 k-NN 回归器,我们看到了进行独热编码或顺序/标签编码是可能的。但尺度很重要,并且不容易确定。

这里,我们可以做一些同样有意义的概率相关的事情:我们可以计算每个类别内部的每个类别的比例

这些比例完全像概率一样,描述了每个类别在每个类别中出现的可能性。

这个想法直接关联到如分类朴素贝叶斯等模型,其中类别由频率分布在类别上定义。

加权距离

另一个方向是引入权重,使得邻近的邻居比远处的邻居更重要。在 scikit-learn 中,有一个“权重”参数允许我们这样做。

我们也可以从“k 个邻居”切换到新观察点周围的固定半径,这导致了基于半径的分类器。

半径最近邻

有时候,我们可以找到以下图形来解释 k-NN 分类器。但实际上,这样的半径反映了半径最近邻的概念。

一个优点是控制邻域。当我们知道距离的具体含义时,例如地理距离,这尤其有趣。

图片

半径最近邻分类器 – 作者图片

但缺点是你必须事先知道半径。

顺便说一下,这个半径最近邻的概念也适用于回归。

不同变体的回顾

所有这些小的变化都产生了不同的模型,每个模型都试图通过更复杂的距离定义来改进比较邻居的基本思想,并通过控制参数来获取局部邻居或更全局的邻域特征。

我们不会在这里探索所有这些模型。当一个小小的变化自然地导致另一个想法时,我实在无法阻止自己走得有点太远。

目前,请把这视为我们将在本月底实施的模型的一个公告。

图片

k-NN 分类器的变体和改进 – 作者图片

结论

在这篇文章中,我们探讨了从 k-NN 分类器的最基本形式到几个扩展。

核心思想并没有真正改变:一个新观察结果是通过查看它与训练数据的相似性来进行分类的。

但这个简单的想法可以采取很多不同的形式。

对于连续特征,相似性基于几何距离。

对于分类特征,我们关注每个类别在邻居中出现的频率。

当 k 变得非常大时,整个数据集会折叠成只有几个总结统计量,这自然地导致了最近邻质心分类器

理解这一系列基于距离和基于概率的想法有助于我们认识到许多机器学习模型只是以不同的方式回答同一个问题:

这个新观察结果最像哪个类别?

在接下来的文章中,我们将继续探索基于密度的模型,这些模型可以理解为观察和类别之间相似性的全局度量。

posted @ 2026-03-27 10:32  布客飞龙III  阅读(0)  评论(0)    收藏  举报