P3 对监督学习的进一步补充

Part 0: 一些题外话

上一篇文章发出去之后,这两天浏览创作者中心时,发现文章的展示数和阅读数都有明显提升(可能是因为以前发的那几篇文章实在没什么看头),小小的感受到了一点成就感。当然了,也想和大家再次做一点简单的说明。

写这个系列,本质上是面向那些对编程有最基本的了解(能够手敲简单的selection和loop代码),但是对机器学习这个概念感到陌生的同学们。在本人还处在这个阶段的时候,我发现网上有很多号称"听懂人话就能入门机器学习"的教学视频,但其实细看起来,从头到尾都是在敲代码,边敲边念自己敲在屏幕上的每一个字,没有任何背景知识的普及,也不说为什么要这么做。于是学完之后,不知道这节课的代码有什么意义,也没法触类旁通的解决类似的问题,很是浪费时间,且打消学习的积极性。

因此,这个系列的文章不会有太多的代码展示(代码方面的资源多得有些泛滥),而是会更偏向于讲明白底层的机器学习知识,类似于我们曾经遇到过什么问题?提出了什么假设?采取了什么方法?最终如何将这种解决问题的步骤固化成了流程化,工程化的算法?按我的经验来看,一件事情,当我们理解了为什么要这么做之后,我们自然就能面对所有类似的问题。

此外,对于那些正在科班学习机器学习课程,为了预习或复习而寻找资料并看到了这篇文章的同学,如果某个关键的概念或知识点这篇文章没有展开介绍,请浏览一下这个系列前后的其他文章。一些比较大的概念,很可能被我拆成了若干篇文章分别讨论,毕竟写文章用的是课余时间,没办法把单篇文章写的太长。

当然了,代码实现这部分总归还是不能没有,所以在后面,我可能也会把我曾经看过的一些不错的代码教程的链接放在文章中并声明出处,便于大家一块学习。

Part 1:监督学习中的"分类问题"

上一篇文章中提到的鸢尾花问题的解决过程,用到的就是我们说的监督学习。用提前处理好的样本训练模型(这些被称为训练样本),让模型从一系列已经被标记标签的样本中学习,并将学习成果泛化到未知的数据中。

我们之所以可以很轻松的将最近邻算法套用在鸢尾花数据集中,就是因为该数据集已经对数据进行了完善的预处理,为各个样本明确的标明了标签(label)。事实上,为训练样本打上合适的标签,就是进行监督学习最重要的前置条件之一,而监督学习要解决的问题,也就是如何给新的未知样本打上正确的标签。

作为监督学习的重要组成部分,视标签(label)的不同,我们能将监督学习分为若干类。

在监督学习中,标签数量有限的问题被称为归类问题(classification problem)。

所谓的有限,如果只有两种,则称为二元分类(binary classification),一个二元分类的例子是,该患者是否患有癌症?在这个例子中,标签只能是"有"或者"没有"。

当有多重标签时,我们称其为多元分类(multi-class classification),比如,图中的手写数字是零到九中的哪一个数字?当然了,多元分类的潜在标签数虽然大于二,但数量仍然是有限的,在这个例子中,可能的标签的数量就是10个。

而label数量无限时,我们就将这种问题称作回归问题。比如,预测一个房子在未来某一天的房价。在这个例子中,标签的数量就是无限的(虽然在我们的认知中,放假应该存在一个上限)。在这种时候,我们无法将未知的样本分布到有限的种类中,于是,这不再是一个分类问题,而是变成了一个监督学习中的"回归问题",这一点会在以后的文章中细讲。

Part 2:监督学习的"学习模式"

2.1 训练集与测试集

在我们介绍监督学习的学习模式之前,我们首先要引入两个概念,分别是"训练集"和"测试集"(training set and testing set)。

在之前鸢尾花数据集的例子中,我们让模型学习了150个样本,随后,模型就能根据新样本与过往已记载样本之间的差异(欧几里得距离)来预测新样本的种类。一切都看起来顺理成章,但一个问题是,我怎么知道这个模型的表现如我预期的一般优秀,会做出正确率足够高的预判呢?

对于上述问题的一个有效解决方法是,将数据集拆分成训练集与测试集两个部分。举例来说,我们可以从150个样本中随机的挑选出120个样本作为训练集,将剩下的30个样本作为测试集。与之前的模型相比,新的模型只有120个被标记的训练样本作为其知识储备,但也应该足够。随后,我们将30个测试样本分别交给模型进行预测。

由于训练集中的样本也是被标记过的样本,我们明确的知道这些样本对应的鸢尾花的类别,接下来,就只需要看由120个训练样本进行训练的模型,能否对这30个测试样本进行准确的预测,通过统计30次预测的结果有几次与真正的标签相符合,我们就能得出模型预测的正确率,并在正确率足够高的情况下声称这是一个合格的模型。

2.2 批量学习与在线学习

之前我们通过潜在样本的数量对监督学习进行分类,将其分为了"归类问题"与"回归问题"两个大类。而接下来,我们将通过学习方式而非样本数量对监督学习展开讨论,本文中提到的学习方式有两种,我们将分别使用这两种学习方式的监督学习行为,称为批量学习与在线学习。

批量学习(batch learning)就如上文的鸢尾花问题一般,我们首先为模型提供一个固定的训练集(training set),当然,训练集中的这些样本已经被标注好了标签,随后,我们要让模型根据从training set中学到的知识,为testing set中的样本打上标签,或是对位置的样本进行预测。

在线学习(Online learning)则不同,比起一次性学习整个训练集,在线学习会一次性分析一个样本,对当前样本作出预测,检查是否符合该样本的真实标签,根据结果的正确与否对模型进行微调,再预测下一个标签,依次循环。

在批量学习中我们能够观察到两个独立的阶段,第一个阶段是训练,用训练集去训练机器学习模型;第二个阶段是测试,用测试集来测试模型的精度。而在在线学习中,这两个阶段是交织在一起的。

两种学习方式的共同点都是要选定一个学习方式,比如最近邻算法KNN,或者其他的机器学习算法。而区别在于,在这之后,批量学习一次性把数据录入系统,一次性训练模型。在线学习则每收到新数据就重新训练(微调)模型,并且这样做的好处在于,它可以允许自己忘记一些过于老旧的数据。

这两种学习模式背后,对应了两种机器学习的实现思路,即归纳和传导。

归纳(Induction),意味着基于过往的经验,在机器学习这一领域则是指我们的数据库,通过观察已有的数据,得出一个具有普遍性的假设(也就是我们的机器学习模型),从而对未来的样本进行预测。这种思路的目的是用足够多的数据找出一般性的规律。

传导(transduction),则是避免从已有的数据中得到普遍的假设或模型,转而不断针对新数据进行实时或者批次的处理,从而利用已有数据中的信息来处理新数据。

本章仅讲述批量学习与在线学习的概念,在以后的文章中,会有许多的案例分析进一步对此进行佐证。

Part 3:特征

回忆一下,在鸢尾花数据集中,我们怎么记录一条记录(样本和标签)?

Fig 3.1 鸢尾花数据集中的某一个样本

作为人类,我们可以很轻松的从这样一份图表中获取有用的信息,但是对于计算机来说,我们需要将数据集整理成更易于计算机处理的形式。考虑到我们不仅需要正确的存储数据集,还要围绕其进行一系列运算(比如KNN算法中求两点之间的欧几里得距离),一个有效的办法是,将每个样本存储为一个一维的矩阵。这样我们就可以在计算的过程中,特别方便的提取样本中的每一个元素,该矩阵在鸢尾花数据集中的表现如下。

[花萼长度,花萼宽度,花瓣长度,花瓣宽度]

而在更多待解决的问题中,组成样本的数据五花八门,这些样本的组成部分被我们称作样本的特征(feature),每个样本有哪几种特征是固定的,且特征本身是固定的。比如在鸢尾花数据集中,每个样本都具有,且仅具有上述四个特征,并且,特征的顺序是固定的。

至于特征的值,则是离散或连续的。

离散(discrete)的意思是,特征对应的数值不固定,但可能的情况是有限的;比如"考试分数",它的取值范围是0到100的整数。

连续(continuous)的意思是,特征对应的数值不固定,有无数种情况,比如零到无限大。

3.1 IDD假设

在常见的机器学习问题(至少是教科书中会出现的多数机器学习问题)中,数据集样本的特征会符合IDD假设,IDD的全称是 Independent Identically Distributed,即,独立同分布。当我们说样本的值满足独立同分布时,我们其实是在说,被标记的样本是从一个概率分布中独立的生成的。常见的例子有抛硬币,或者一群学生的考试成绩,等等。

在生活中少有绝对的独立同分布,因为许多因素都会影响数据的生成过程,但它依然是一个有用的概念,甚至,早期许多机器学习算法的构建,就基于独立同分布的假设。

Part 4:总结

到此为止,对监督学习的基本介绍就已经完成。我们给出了监督学习的定义,介绍了鸢尾花数据集,基于鸢尾花数据集展示了最近邻算法的工作原理,随后也对监督学习的一众细节进行了介绍,比如标签的数量,训练的模式,样本特征的取值等。这个系列将在未来大规模的讨论如何用机器学习解决现实生活中的问题,尤其是网络安全方向的问题,届时,将有大量的案例来帮助大家验证现阶段了解的内容。

相关推荐
是十一月末15 分钟前
Opencv实现图片的边界填充和阈值处理
人工智能·python·opencv·计算机视觉
机智的叉烧1 小时前
前沿重器[57] | sigir24:大模型推荐系统的文本ID对齐学习
人工智能·学习·机器学习
凳子花❀1 小时前
强化学习与深度学习以及相关芯片之间的区别
人工智能·深度学习·神经网络·ai·强化学习
泰迪智能科技013 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
Eric.Lee20213 小时前
Paddle OCR 中英文检测识别 - python 实现
人工智能·opencv·计算机视觉·ocr检测
cd_farsight4 小时前
nlp初学者怎么入门?需要学习哪些?
人工智能·自然语言处理
AI明说4 小时前
评估大语言模型在药物基因组学问答任务中的表现:PGxQA
人工智能·语言模型·自然语言处理·数智药师·数智药学
Focus_Liu4 小时前
NLP-UIE(Universal Information Extraction)
人工智能·自然语言处理