本章较为详细(相较于统筹篇)地浅讲机器学习的知识,如果还是不太明白,后面还有机器学习举例篇,讲解一元一次函数感知器、方差代价函数、梯度下降以及反向传播
机器学习的核心问题是有意义的变换数据,在于学习输入数据的有用表示。
机器学习和深度学习的一些差别,举个例子,对于同一张咖啡的照片,进行特征处理时,机器学习就会采用边缘和颜色等人为定义的处理方法,而深度学习则会自动获取特征信息。
ML(MachineLearning)就是让机器通过学习的方式获取知识从而获得解决问题的能力,从科学的角度出发,机器学习往往指一类通过学习数据来完成任务的算法。
ML的定义:对一个任务T和性能指标P,如果程序通过经验E在任务T上的指标P获得了提升,那么就说针对T和P,程序对E进行了学习。
举个例子
T:下象棋,P:对弈任意对手的胜率,E与自己不断对战
T:识别人脸,P:识别结果的正确率、误检率、漏检率,E:人工标定的图片和数据集
了解过机器学习的定义以后,再讲一下一些机器学习通用的概念。
举个例子
预测“天要下雨”,我们肯定需要一些“特征”或者“属性”,比如是否出现朝霞晚霞,温度,湿度,卫星云图,为了能够用于计算,我们通常把他们存储在一个一维列向量里面,维度为d(共选取d个特征),这个向量就是特征向量。
这样的特征往往有无穷多种,如果你愿意,本地同一时间有多少人在睡觉都可以最为一个特征属性,只不过这个特征属性没卵用(也许有用但我没听说过睡觉影响下雨),由此可见,并不是每一个特征都对最终的判断有帮助,所以为了学习哪些特征是有用的,以及这些特征取哪些值的时候会下雨,我们还要获得这些特征值对应的标签。选取哪些属性是有用的,就是数据的基本处理,我们收集到的数据,需要存储在相应的张量里的过程,就是特征工程
比方说,我们看这篇文章是看得懂的,但是机器看不懂,他只看得懂010101,因此特征工程就是必要的了
标签可以是连续的,当标签是连续的时,机器学习任务被称作回归问题
标签也可以是离散的,当标签是有限离散的时,机器学习任务被称作分类问题,特别地,当标签为标记序列的时候,又被称为标记问题
一组记录好的特征值以及它的标签被称为一个样本或一个实例,一组样本被称为一个数据集
数据集分为训练集和测试集,两个集合不相交
数据集中的样本独立同分布,例如如果一个样本是火星上下雨不下雨的数据,一个是地球的,这两个就不能作为同一个数据集的样本
我们希望算法能够拟合一个函数,来实现从特征向量到标签的映射——y=f(x,θ)
其中θ为算法模型科学系的参数,为了获得一组模型的θ,我们需要有一套学习算法来优化这个函数映射,这个优化过程被称为机器学习或者映射,这个需要我们去拟合的函数就是模型。
学习的目的就是找到一个最好的模型,而这样一个模型应当是输入空间至输出空间的一个集合中的映射,这个映射集合称为假设空间。
在我们找到一个模型之后,还需要模型评估,这就涉及到了过拟合、欠拟合的问题。
比方说:识别豆花,我们传进去的数据都是甜豆花,导致咸豆花识别不出来,这叫欠拟合,如果甜豆花都是白的,导致豆腐被识别为豆花,这就叫过拟合。
1、分析数据
2、残缺数据处理
3、错误数据处理
4、重复数据处理
我们得知了任务需求之后,首先要收集数据,其次是对数据统计分析,一般会使用数学的手段,比如直方图,通过观察我们就能很直观的观察出哪些数据是有用的,哪些是不合理的
缺失数据是不可避免的,每一个独立的数据样本可能包含不同的数据缺失,所以缺失的处理就非常值得研究了
比如有100个样本,其中有5个有缺失,很显然我们只要把有缺失的删除就行了,但是如果1000个有200个有错,又或者999个都有错呢?显然,删除是不可能的,于是我们引入以下几种缺失数据处理方法
1、直接删除
2、赋予一个常量,我们把缺失的特征赋为0或者unknow,由于算法可能将赋值看作特征值误判,所以这个方法很少使用
3、赋予均值或中位数,这样做可能会存在偏差,因此当数据均匀的时候使用均值更合适,当数据倾斜的时候,使用中位数更合适
4、插补法,使用现有数据按照某种方法插入补缺:(1)随机插补法,随机选取一个未缺失的值进行插补(2)热平台插补法,使用与本样本相似的一个样本对应的值进行插补(3)拉格朗日插值法或牛顿插值法,这个比较难,有兴趣可以自己了解一下
5、建模法,通过数据建模预测并补齐缺失的值
错误数据又叫离群点、异常值,直接画图再肉眼观察很好判断出离群点,那么计算机由于要怎么知道呢?
1、简单的数据分析,比如人不大可能200多岁,身高不可能是负数也不大可能四米五米。
2、3-sigma原则对于服从正态分布的数据,异常值就是那些观测值与均值偏差超过三维标准差的数据
3、箱型图,设上四分位值为P,下四分位值为Q,则上下边界分别为P+1.5(P-Q)和Q-1.5(P-Q),越界则异常
4、建模法,通过建模,那些不能很好拟合的数据异常
5、基于距离,比较任意样本的空间距离,太远的异常
6、基于密度,局部密度过低的地方异常
一般来说,机器学习模型会分为判别模型(Discriminative Model)和生成模型(Generative Model)两类。
判别模型相对来说更常用,感知机(Perceptron)、逻辑回归(LR)、支持向量机(SVM)、神经网络(NN)、K近邻(KNN)、线性判别分析(LDA)、Boosting、条件随机场(CRF)模型都属于判别模型。判别模型本身又分为两类:
(1)直接对输入空间到输出空间的映射建模;
(2)分两步,先对条件概率P(y|x)建模,再分类。
生成模型是一种更加间接的建模,高斯判别分析(GDA)、朴素贝叶斯(NB)、文档主题生成模型(另外一个LDA,跟线性判别分析的LDA是完全不同的两个概念)、受限玻尔兹曼机(RBM)、隐马尔科夫模型(HMM)属于生成模型。分三步:先对联合概率P(x,y)建模,再根据贝叶斯公式算出P(y|x),最后再分类。
以上提到了很多种当前热门的机器学习模型,不了解不要紧,在后面的文章都会一一详细介绍。为了方便起见,后文提到的某些模型的名称用惯用简写来表示。这里有必要提一下近些年来大热的深度学习,深度学习其实只是机器学习的一个大派别,深度神经网络模型(DNN)也只是众多机器学习模型中的一类:卷积神经网络(CNN)、循环神经网络(RNN)、多层感知机(MLP)、堆叠自编码器(SAE)、堆叠受限玻尔兹曼机(有一个专门名字深度置信网络,DBN),以及以上各种模型的变形和扩展,它们都是针对特定的问题和当前的高性能计算时代而诞生,没必要神化。
回到判别模型和生成模型,两者的差别就在于是否先对联合概率P(x,y)建模。学术界对两种模型各自都有不同的声音,主要是针对求条件概率P(y|x)的方法应该直接建模还是用P(x,y)间接建模有分歧:SVM之父Vapnik的观点是生成模型的第一步是先对联合概率P(x,y)建模,这个做法没必要,对P(y|x)直接进行建模就行了,事实上这是学术界主流认识;而Andrew Ng为生成模型发声,他认为对P(x,y)进行建模从而达到判别的目的也有它自身的一些优势:虽然生成模型的渐进误差(Asymptotic error)确实是比判别模型的大,但随着训练集增加后,生成模型会比判别模型更快得达到渐进误差(收敛速度更快)。
还有一种常用的分类方式,将判别模型(2)方法即先求条件概率的方法和生成模型先求联合概率的方法作为一类,称之为概率模型;将判别模型(1)方法即直接建模的方法分为另一类,称之为非概率模型。
概率模型由条件概率分布P(y|x)表示。所有生成模型都是概率模型,除此之外,判别模型中的LR、条件随机场(CRF)等属于概率模型。概率模型指出了学习的目的是学出联合概率P(x,y)或条件概率P(y|x),其中联合概率通过贝叶斯公式P(x,y)=P(x|y)P(y)拆分成P(x|y)和P(y)分别进行估计。无论是P(y|x)、P(x|y)还是P(y),都是会先假设分布的形式,例如LR就假设了 y|x 服从伯努利分布,线性回归假设了误差项服从均值为0的高斯分布。
非概率模型由决策函数y=h(x)表示。判别模型中感知机、SVM、神经网络、KNN都属于非概率模型。
两者的差别就是是否直接对输入空间到输出空间建模。概率模型相对而言包含的信息量比非概率模型多,而且更加精细,所以当具有足够数据准确描述不确定参数的概率分布特性时,概率模型更为适用;非概率模型对已知数据的要求低,它只需要确定不确定参量的界限,而不要求其具体的分布形式,且计算过程通常更简便,所以当在掌握的原始数据较少的情况下,非概率模型更合适。
2、学习策略
在统筹篇里提到过欠拟合过拟合的问题,这里使用图来进行更精确的表示
对于以下的数据集
如果学习出来的函数为如下所示,则为欠拟合
如果学习出如下的函数则是过拟合
一般来说,学习出以下的函数图像比较合理
这个函数就称为损失函数(loss function),是常见损失函数的一种。损失函数越小,就代表模型对某个样本拟合得越好。期望风险函数是损失函数的期望,这是由于我们输入输出遵循一个联合分布,但是这个联合分布是未知的,所以无法计算。但是我们是有历史数据的,就是我们的训练集,关于训练集的平均损失称作经验风险(Empirical risk),我们常用经验风险替代期望风险,因为根据大数定理,当样本容量趋于无穷时,经验风险也就趋于期望风险,经验风险可表示为,方差代价函数,如下
还有别的损失函数,比如0-1损失函数,绝对值损失函数,对数损失函数等
3、优化算法
这里只讲梯度下降算法
梯度下降法的基本思想可以类比为一个下山的过程。
假设这样一个场景:一个人被困在山上,需要从山上下来(找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。怎么做呢,首先以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方,再走直到最后到达最低处;同理上山也是如此,只是这时候就变成梯度上升算法了
监督学习:数据集中的数据,每一个特征向量都有对应的标签,从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。
无监督学习:数据集中的数据,每一个特征向量没有对应的标签,输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)试图使类内差距最小化,类间差距最大化。
半监督学习:介于两者之间,只标注一部分数据
1、训练集
2、验证集:防止过拟合
3、测试集
1、留出法:3:7
2、K-折叠交叉验证法:5、10、20
3、自助法:适用于数据集很少的情况
数据层面:重采样
1、随机欠采样:
2、随机过采样
3、基于聚类的过采样
4、合成少数类的过采样
1、图像:梯度直方特征,支持向量机
2、文本:One-Hot,稀疏编码