一. 什么是机器学习
通俗来讲,机器学习方法是计算机利用已有的数据(经验),得出了某种模型(规律),并利用此模型预测未来的一种方法。
二. 机器学习的基本术语
- 数据集:所要研究的数据的集合。
- 数据集的分类:
训练集:a. 训练数据(training data):用于构建模型。b.验证数据(validation data):可选,用于辅助模型构建。
测试集:测试数据(testing data):用于检测模型构建,此数据只在模型检验时使用,用于评估模型的准确率。绝对不允许用于模型构建过程,否则会导致过渡拟合。 - 样本(示例):数据集中的一条记录,或者说一个对象。
- 特征(属性):对象的属性,如下图西瓜有3个属性,色泽,根蒂,敲声。
- 属性值:很好理解,就是属性的取值。
- 特征向量:若把样本放到空间坐标系中,每个样本都对应一个位置,产生的向量叫特征向量。
- 样本空间:样本所在的坐标系空间。
- 维度:每个样本的属性数量,如西瓜样本的维度是3。
- 标记:训练集样本的结果信息,比如研究西瓜为了得到它是好瓜还是坏瓜,这里好瓜,坏瓜都是标记。
- 标记空间(输出空间):所有标记的集合。
- 假设空间:根据训练集的所有属性,可以形成的所有可能的模型的集合叫做“假设空间”。
- 版本空间:在假设空间中,存在着一个与训练集一致的假设集合,称为版本空间。
三. 机器学习分类
按照训练数据有无标签,可以将机器学习分为监督学习和无监督学习。
1. 监督学习:
监督学习就是训练数据既有特征(属性)又有标签(标记),通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签。所以说,监督学习,必须是有标签的。
监督学习主要的方法:
- 回归:期望的输出是一个或者多个,连续数值型的数据,比如预测房价,销量等等。
常见的回归算法主要包括:线性回归,回归树,深度学习等。 - 分类:样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。
常见的分类算法主要包括:逻辑回归,分类树,深度学习,支持向量机,朴素贝叶斯等。
2. 无监督学习:
无监督学习,最明显的特征就是数据中没有标记。但是,就算没有参照,同类问题内在还是具有一定的联系。 让机器自动去判断,哪些数据比较像,归到一类,这种问题在机器学习领域中就被称作聚类。相对于监督学习,无监督学习显然难度要更大,在只有特征没有标签的训练数据集中,通过数据之间的内在联系和相似性将他们分成若干类。
无监督学习主要的方法:
- 聚类:K均值类聚,AP类聚,层次类聚等等。
- 降维:PCA降维等等
3. (强化学习):
传统的机器学习分类中,并没有提到过强化学习这个概念,而在连接主义中,把机器学习分为有监督学习,无监督学习和强化学习。
强化学习或者叫做加强学习,是指什么呢?在前边的监督学习中,机器每次做出预测,都会知道结果对不对,但是在这里却不行,每次做出预测不会得到对或者不对的结果,只会收到看似没有半毛钱关系的反馈。比如周志华老师举的机器种西瓜的例子,机器为了种出一个大西瓜,做出决定(action),给瓜苗浇水,然后得到的结果只是瓜苗变粗了一些(反馈),这个反馈跟最终西瓜长得好不好,到底有什么关系呢?下一步是否该继续浇水呢?还是施肥呢?还是遮阳呢?。。。最终是否能种出大西瓜(标签),要在很久以后才知道。这需要机器去不断重复学习,然后改进种瓜过程。
所以强化学习不是依赖数据的标签进行学习,而是依赖自己积累的反馈。强化学习适合学习交互过程,比如下围棋(AlphaGo的成功就是强化学习的力量)。
四. 误差与模型评估
1. 基本概念
- 误差:学习器的实际预测输出与样本真实输出的差异。
- 训练(经验)误差:训练集上的误差。
- 泛化误差:新样本上的误差。
- 过拟合: 在计算模型时,我们希望经验误差可以尽可能的小,甚至是0。但是,这样并不是最好的模型,当学习器把训练样本学习的太好了的时候,很可能已经把训练样本自身的一些特点当成了所有潜在样本都会具有的性质,这会导致泛化能力下降,泛化误差增大,这种现象叫做过拟合。
- 欠拟合:函数模型的训练误差很大。
2. 评估方法
- 错误率:分类错误的样本数占样本总数的比例。
- 精度:分类正确的样本数占样本总数的比例。
-
查准率:查准率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
4.召回率(查全率):召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
3. 数据集划分方法
理想的模型泛化误差越低越好,但是潜在数据是未知的,我们无法直接获得泛化误差。所以通常来说,要把数据集划分为训练集和测试集,利用测试集的测试误差来近似泛化误差。
- 留出法:留出法的意思是直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个集合作为测试集T,即D=S∪TD=S∪T,S∩T=∅S∩T=∅。在S上训练出模型后,用T来评估其误差。
- 划分要尽可能保持数据分布的一致性
- 过若干次随机划分、重复实验评估后取平均值作为留出法的评估结果,减少误差。
-
交叉验证法:
”交叉验证法”先将数据集D划分为k个大小相似的互斥子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j)D=D1∪D2∪...∪Dk,Di∩Dj=∅(i≠j)。每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的子集作为测试集;这样就可以获得k组训练/测试集,从而可以进行k次训练和测试,最终返回的是k个测试结果的均值。
-
数据量大时,训练模型开销很大。
-
自助法:
给定m个样本的数据集D,我们对它进行采样产生数据集D′D′,每次随机从D中挑选一个样本,将其拷贝到D′D′,这个过程执行m次后,我们就得到了包含m个样本的数据集D′D′。显然,D中有部分样本会在D′D′中多次出现。做个简单的估计,样本在m次采样中始终不被采到的概率是
- 自助法在数据集较小、难以有效划分训练/测试集时比较有用。然而自助法产生的测试集改变了初始数据集的分布,这会引入误差,因此在数据集比较大时,采用留出法和交叉验证法较好。