专栏概览
本专栏将分享博主在机器学习入门的时候一些学习心得,希望各位能从我的学习体验中有些许收获。可能有不准确和遗漏之处,请大家多多谅解!
在准备本专栏时,博主默认读者有一定的Python/编程基础。本专栏也将假定读者有一定的机器学习基础(比如一些基本的词汇定义)。
什么是机器学习/Machine Leaning/ML?
这里参考下机器学习之父Tom Mitchell在他的教材Machine Learning书中的定义:
如果计算机程序在任务 T 中的性能(由 P 衡量)随着经验 E 的提高而提高,则称计算机程序从关于某类任务 T 的经验 E 和性能衡量 P 中学习。
简单来说,机器学习关注的是设计和开发能够不断用经验提高自己的算法。每个机器学习(下文将简称为ML)算法都包括至少三个部分:
任务/Task。
任务指的是这个算法要达到的目标。比如,人脸识别算法的任务就是准确快速地从视觉信号中识别和分类人的脸部特征。性能/Performance。
性能指的是某种衡量算法有效性的标准。大部分机器学习算法会使用准确率/Accuracy来决定算法是否已训练完成。经验/Experience。
经验指的是算法能用来学习的内容。对于简单的算法来说,一个外部提供的静态的数据库可以成为它学习的目标。对于较为复杂的算法(比如强化学习/Reinforcement Learning)来说,它的经验由训练对象本身产生和收集。
让ML和其它传统的计算机领域与众不同的是:ML算法是一个黑箱模型/Black-box model
。我们自己写代码的时候,通常写出一个白箱模型/White-box model
,即我们用自己写的模型/算法和输入数据产生输出。但ML算法不同的是,我们给它输入和输出数据,算法会根据数据产生一个符合数据的模型。这样一来,很多人类无法轻松理解的过程(比如识别人脸)就可以被机器通过数据带来的经验进行高层面的学习和理解。
机器学习的流程
开发一个完整的ML应用一般有以下流程:
确定任务/Problem Definition。
在这一步要明确ML算法的任务/Task是什么,并且要确定哪种模型/性能评估指标/数据类型是最有效的。这一步非常关键,因为作为人类的我们有归纳偏置/Inductive bias
,即我们需要主观地做出选择和对问题的本质做出假设。对于复杂的问题,如自动驾驶汽车,某些归纳偏置(比如认为3层深的随机森林是最好的模型)会带来严重的后果。获取数据/Data Ingestion。
这一步我们需要获取用来训练模型的数据。数据通常有两种获取方式:第一是自行获取(比如每天测量湿度和温度),第二是获取他人数据(最普遍和简单的来源是Kaggle)。数据里一般包括两部分:特征/Features
和标签/Labels
。特征代表模型获取的输入,比如一张图片。标签代表模型应有的输出,比如这个图片里动物的名称。预处理数据/Data Preparation。
我们不可避免地会遇到一些无意义/不完整的数据。这时候我们就要考虑是否要把他们删掉或者用另一种方式补全它们。我们也可以做一些特征工程/Feature Engineering来让我们的数据更加充实。分离数据/Data Segregation。
有些时候我们要决定哪些数据是用来训练的,哪些数据是用来评估模型性能的。如果一个模型能在训练集/Training Set
上达到很高的准确率,但在测试集/Test Set
上的准确率很低,我们称之为过拟合/Overfitting
,即算法过度理解了训练数据的特征,导致它对于没见过的数据表现很差。反之亦然,如果模型在训练集/Training Set
的准确率较低但是在测试集/Test Set
的准确率较高,我们称之为欠拟合/Underfitting
,即模型还没来得及很好地掌握训练数据的特征。训练模型/Model Training。
训练模型经常要重复很多次,选择不同的超参数/Hyperparameters来达到不同的模型性能。这一步也是相对比较耗费时间和算力的。评估性能/Candidate Model Evaluation。
我们要时常监督模型的性能,以选择最合适的模型。应用模型/Model Deployment。
把训练好的模型包装好嵌入应用中,向公众开放测试。持续监测性能/Performance Monitoring。
可以用发行后收到的数据重新训练和提高模型的性能。
很多时候,第三到第六步要重复很多次以寻找更加合适的模型。由于这几步很大程度上取决于归纳偏置,无法严谨和准确地判断最合适的模型、超参和数据,于是被戏称为“炼丹”,即把炼丹炉里的丹(训练好的模型)拿出来看(评估性能)才能知道丹(模型)的品质(性能),而且没有保证第二次练的丹(训练的模型)一定比第一次好。一些同学甚至把随机数生成器的种子封为了彩票号码。
机器学习的大分类
从大方向来说,ML算法可以通过它们所需要的数据和学习方式分为三类:
监督学习/Supervised Learning/SL。
这类算法需要数据里同时有特征/Features
和标签/Labels
。就像一个老师在教学生做题一样,需要在学生回答完毕后明确地告诉学生题目的正确答案是什么。非监督学习/Unsupervised Learning/UL。
这些算法的数据只需要特征/Features
,不需要标签/Labels
。就像一个小孩子在玩积木,会自己把积木按照自己观察到的某种规则摆放和组合。强化学习/Reinforcement Learning/RL。
这类算法不需要任何数据,但需要一个训练对象/Agent
能自己探索的环境/Environment
,它能做出的一些行为/Actions
和奖励函数/Reward Function
。比如,把一个蚯蚓放到有糖和电流的迷宫内,蚯蚓会通过试错来学习如何能获得奖励并通过迷宫。
开始前的准备
说了这么多,简单介绍下本专栏机器学习所需要的环境和软件。
Anaconda是一个很方便的Python环境管理器,里面内置了诸多功能。我们主要用到的是其中的Jupyter Notebook
功能。由于它代码可分块运行和调试的优点,我们可以很方便地调试模型和加入说明。关于Jupyter Notebook
的使用方法可参考官网教程。博主也会在每篇博客中加入相对应的ipynb文件,敬请期待!
结语
在下一篇博客博主会介绍如何用ML方法使用普通最小二乘法/Ordinary Least Sqares/OLS
实现线性回归。有任何问题和建议请随时评论或私信。码字不易,喜欢博主内容的话请点赞支持!