Part 1:监督学习
在说到机器学习的时候,往往我们说的是一类算法,这些算法让机器能够模拟出人的行为,去进行一些有意义的操作。简单的来讲,我们可以让它判断,面前这张照片中的小动物是猫还是狗,从病人的CT照片中判断病人是否有潜在的病灶,或者,判断一块数据中是否包含有恶意的代码,等等。
而当我们形容某一种机器学习算法,或者说,当我们给无数机器学习算法进行分类时,我们可以大致上将其分为两类,即:监督学习与无监督学习。这一篇文章,我们将对监督学习展开讨论。
Part 2:监督学习的结构与原理
让我们先列举几个简单且经典的机器学习问题------
- 对动物或植物的品种进行判断
- 对手写的数字或字符进行识别
- 对病人是否患有某种病症进行识别
机器学习是一个学习的过程,为了让机器可以做出正确的判断,并解决上面的问题,我们首先需要为机器学习算法的"模型"提供用于学习的数据。在这里,以及在下文中,我们将那个通过机器学习算法构建的,用于解决某个具体机器学习问题的"事物"称为机器学习"模型"。不要因为第一次听说这个词而感到茫然,本质上来说,它是一个可以持续对数据进行处理,并执行我们希望他完成的任务的程序(也就是我们敲代码敲出来的文件)。
接下来,我们对上面列出的"品种判断"问题进行展开。在机器学习的研究中,有一个很经典的,现已被绝大多数书籍和课程作为机器学习入门案例的问题是"鸢尾花问题"[1]。一位叫做安德森的美国植物学家曾收集了150份鸢尾花的样本,这些样本来源于鸢尾花的三个亚属,分别是山鸢尾,变色鸢尾和维吉尼亚鸢尾,每个样本都被测量了花萼和花瓣的长度和宽度。在鸢尾花问题中,我们使用这些特征去区分不同的亚属。

Fig 2.1 安德森鸢尾花数据集的部分内容
观察一下这份数据集的结构,我们不难看出,同一份样本的花萼,花瓣的长宽,被放入了数据库的同一行中,每一行的最后,则标明了该样本的属种。我们用前四个属性,可以找到这份数据库中的一个唯一样本,而第五个属性"属种",则是我们需要模型帮我们判断的"品种类别"。
在监督学习中,我们提供给模型进行学习的数据,就这么被我们称为样本和标签,即 sample 和 label。
我们在此要先强调一个客观事实:即使同为鸢尾花,这三个属种依然有较为普遍的区别。举另一个例子来说明这一点,雪纳瑞作为一个犬种,其三个细分品种,大型雪纳瑞,标准雪纳瑞和迷你雪纳瑞,彼此在体型上都有较为明显的区别。最小的标准雪纳瑞,可能与最大的迷你雪纳瑞在体型上接近,但一定会明显的比大多数迷你雪纳瑞要更大些,鸢尾花同理。
当这一份数据库被送给模型时,模型会准确的记录这150个样本的全部数据,以及他们的标签。这样一来,模型就对每个属种的鸢尾花有了一个基本的认知,未来,当我们把一个未知属种的鸢尾花给到模型时,模型就会基于其对各属种已经产生的映像(过往各样本的精确数据),基于某些特定的规则(在编写代码时制定的方法)猜测新的这朵鸢尾花属于什么属种。虽然猜测的结果不能保证绝对正确,但是在已经记录了大量样本的特征之后,模型做出的判断在绝大多数时候,往往都是靠谱的。
用比较专业的话来说,这是一个通过大量的数据来训练模型,以使模型能够泛化到新的、未见过的数据的过程。
Part 3:"最近邻"算法
既然我们说,机器学习是通过大量数据来训练模型,使模型能够泛化到新的,未见过的数据,那么这里泛化的原理是什么?模型基于什么样的逻辑利用过往的数据,并对新的数据进行判断?
对于模型来说,为了解决这一系列问题,它会按照科学家/工程师预设好的一系列有序的指令来展开工作,这一系列有序的指令,就是支持机器学习模型的机器学习算法。今天我们要介绍的最近邻算法,就是一个最基础,也最经典的机器学习算法之一。

Fig 3.1 安德森鸢尾花数据集的散列图
上面这份四行四列的点图是安德森鸢尾花数据集的散列图,它的每一个子图中都有150个点,分别对应数据集中的每一个样本,不同类型的样本被用不同的颜色表示,而这些子图的横纵坐标,则是我们采集的样本的四个特征的任意两两组合,比如【花萼长,花萼宽】,【花萼长,花瓣长】,等等。
在这张图中我们发现了一个有趣的现象,相同颜色的点往往集中在一起,并且在大多数时候,我们能观察到不同颜色的点往往集中在不同的位置。造成这一现象的原因在于,同一个品种的鸢尾花,在各个特征上虽然会有细微的差异,但这份差异将明显小于其与不同品种的样本在相同特征上的差异。同时,换句话说,当我们指定图中某一个点A时,我们有理由相信,比起和它距离较远的另一个点B,它更可能和与它间距极近的点C是同一种类型。说的再简单一点,距离较近的两个点,更有可能是同一品种的样本。
接受了这一客观现实后,我们有理由相信,当未知的第151份样本到来时,我们只需要确认,现有数据集中,各项特征都与它最相近的样本(sample)是什么标签(label),它大概率也就会是什么标签。这就是"最近邻"算法的逻辑。
在真实的计算中,我们通过欧几里得距离衡量每个样本之间的距离,及,求和两个点在各维度上距离的绝对值的平方,再取结果的平方根,就是这两个点在空间中的距离。
当然了,从图3.1中,我们也发现在一部分子图上,代表versicolor的绿色点与代表virginica的蓝色点比起纠缠在了一起,与此同时,代表setosa的红色点在有些子图上可以观测到一个特别不合群的个体。在仅观测两个特征时,最近邻算法可能难以对其做出有效的判断,但是当我们将四个特征集合在一起考虑时,更多特征之间的差异,将弥补某个特征带来的混淆。由此,我们可以得出,当我们使用最近邻算法时,尽可能多的统计不同的特征(尤其是这些特征在不同品种间差异较大时)将有效提高模型的性能。
除此之外,我们也可以考虑统计,与待分类节点最近的三个节点,五个节点,而非一个节点的品种,取其中较多者作为对新样本的品种判断,这也是有效消除偏差的办法。当我们进行这种操作时,最近邻算法就变成了K近邻算法,其意义在于"根据离新样本最近的K个训练样本的标签"来判断新样本的标签。
鸢尾花数据集与最近邻算法常常在各教材中被当作入门案例进行讲解,具体的代码实现十分简单,在此不做展开。通过对这个算法的讲解,大家可以对机器学习模型与算法有一个基本的认知。与其他所有的领域一样,在机器学习方向,我们也是通过一个流程化的步骤去解决一个问题,而更复杂的机器学习模型与算法,也只是使用更复杂的流程去更高效的处理数据而已。
总结
本文旨在简单的介绍机器学习中的监督学习,与简单的最近邻算法,希望读者在理解了这两个知识点后,可以对"机器学习"有一个简单的认知,最基本的理解它的工作原理,让机器学习在读者眼里不再是一个"black box"一般的事物。
在下一篇文章中,我还会进一步的对监督学习进行一些补充,帮助读者加深对监督学习的理解。
Reference
1\]安德森鸢尾花卉数据集[zh.wikipedia.org/wiki/%E5%AE...](https://link.juejin.cn?target=https%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E5%25AE%2589%25E5%25BE%25B7%25E6%25A3%25AE%25E9%25B8%25A2%25E5%25B0%25BE%25E8%258A%25B1%25E5%258D%2589%25E6%2595%25B0%25E6%258D%25AE%25E9%259B%2586 "https://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%A3%AE%E9%B8%A2%E5%B0%BE%E8%8A%B1%E5%8D%89%E6%95%B0%E6%8D%AE%E9%9B%86")