1.1 什么是Machine Learning?
机器学习(Machine Learning)实际上就是计算机系统的自我学习,通过输入的数据集来学习出一个“函数(或者说映射)”,机器学习的三大问题是:
- 监督学习Supervised
Learning:学习已经存在的结构和规则,也就是学习一个映射,即对于有标注数据的学习,常见的有分类和回归 - 非监督学习Unsupervised
Learning:学习过程中由计算机自己发现新的规则和结构,即对于无标注数据的学习,常见的有聚类和降维 - 强化学习:有反馈的学习,但是只会反馈对和错,在机器人中比较常见
监督学习的数据都是有标注的,而非监督学习的数据是没有标准的,需要在学习过程中自己发现数据中存在的一些结构和特征。
1.1.1机器学习中最重要的问题
机器学习问题中最重要并需要花最多时间的事情就是定义模型,机器学习的三个要素是莫名的表示、度量和优化。
1.2 几个机器学习中的基本概念
- Sample,example,pattern 问题案例,样本
- Features,predictor,independent variable
将需要处理的数据用高维向量来表示,一般用表示 - State of the nature,lables,pattern class
数据的类型,一般用表示 - Training data:用若干组表示训练数据集
- Test data 测试数据
- Training error & Test error 训练误差和测试误差
1.3机器学习问题的分类
事实上1.1中介绍的三大机器学习问题只是机器学习的一种分类方法,常见的对于机器学习的分类方法还有如下几种:
1.3.1按模型分类
- 根据模型的类型,机器学习还存在如下几种分类方式:按照是否为概率模型分类、按照是否为线性模型分类、按照是否为参数化模型分类,每种分类方式的特点如下:
- 概率模型和非概率模型:非概率模型也叫做确定性模型,区别在于概率模型在学习时使用条件概率分布形式,二非概率模型使用函数形式
- 线性模型和非线性模型:主要区别在于模型是否为线性函数,神经网络就是复杂的非线性模型
- 参数化模型和非参数化模型:区别在于参数化模型用确定个参数刻画模型,而非参数化模型的参数维度不固定
1.3.2按算法分类
- 可以分为在线学习和批量学习,在线学习是每次接受一个样本进行预测,然后进行学习,并不断重复的过程,而批量学习则是一次性把数据集训练完之后再进行结果的预测。
1.4模型的复杂度 Complexity
- 随着模型的复杂度提高,其训练误差会不断下降,但是测试误差会先下降再提高。因此模型存在一个最优的复杂度。
- 模型训练的过程中可能会出现过拟合(overfitting)的情况.按照我个人的理解,过拟合其实就是对测试数据拟合得太好而对训练数据拟合效果不好。
- 泛化(Generalization)能力:表示一个模型对未出现过的数据样本的预测能力,我们一般希望泛化能力越大越好。
1.5模型的评估
1.5.1样本数据集的表示
- 我们用表示样本数据集 其中%2C(x_2%2Cy_2)%2C%5Cdots%2C(x_m%2Cy_m)%5Crbrace#card=math&code=D%20%3D%20%5Clbrace%28x_1%2Cy_1%29%2C%28x_2%2Cy_2%29%2C%5Cdots%2C%28x_m%2Cy_m%29%5Crbrace) 表示 的真实标记,要评估学习的性能,需要将预测结果和真实标记进行比较
1.5.2指示函数
指示函数 #card=math&code=%5Cmathbb%20I%28e%29)在表达式e的值为真的时候值为1,在表达式e为假的时候值为0
1.5.3错误率和准确率
- 模型训练的错误率定义为
%3D%5Cfrac%7B1%7D%7Bm%7D%5Csum%7Bi%3D1%7D%5E%7Bm%7D%5Cmathbb%20I(f(x_i)%5Cnot%3Dy_i)%5Cend%7Baligned%7D#card=math&code=%5Cbegin%7Baligned%7D%0AE%28f%3B%20D%29%3D%5Cfrac%7B1%7D%7Bm%7D%5Csum%7Bi%3D1%7D%5E%7Bm%7D%5Cmathbb%20I%28f%28x_i%29%5Cnot%3Dy_i%29%5Cend%7Baligned%7D)
- 精确度的定义为:
-E_D(f(x%2CD)))%5E2%5Dp(x)dx%0A#card=math&code=var%3D%5Cint%20E_D%5B%28f%28x%2CD%29-E_D%28f%28x%2CD%29%29%29%5E2%5Dp%28x%29dx%0A)
1.5.4查准率和查全率
真实情况 | 结果为正例 | 结果为反例 |
---|---|---|
正例 | TP | FP |
反例 | FP | FN |
- 查准率 表示预测结果为正例中预测正确的比例
- 查全率 表示所有正例中被预测对的比例
1.6 No Free Lunch理论
- 我们总希望我们的机器学习算法在所有情况下都表现得非常优秀,因为这样可以帮我们省很多事,然而事实上这是不可能的,因为对于同一个问题的两种解决算法A和B,如果A在某些情况下表现比B要好,那么A就一定会在另一些情况里表现得比B要差,这是因为对于一个问题,其所有情况的总误差和算法是没有关系的,也就是说,一个特定问题的所有可能情况的总误差也是一定的。
- 下面我们可以来简单地证明这一个结论,我们用X表示样本空间,H表示假设空间,并且假设它们都是离散的,令表示算法a在训练集D下产生假设h的概率,再用f代表我们希望学习的真实目标函数,则可以用来表示训练集之外的所有样本,则其产生的误差可以表示为:
%3D%5Csumh%5Csum%7BX%5Cin%20C%7D%20P(x)%5Cmathbb%7BI%7D(h(x)%5Cnot%3D%20f(x))P(h%7CD%2C%5Clambdaa)%5Cend%7Baligned%7D#card=math&code=%5Cbegin%7Baligned%7D%0AE%28%5Clambda_a%7CD%2Cf%29%3D%5Csum_h%5Csum%7BX%5Cin%20C%7D%20P%28x%29%5Cmathbb%7BI%7D%28h%28x%29%5Cnot%3D%20f%28x%29%29P%28h%7CD%2C%5Clambda_a%29%5Cend%7Baligned%7D)
- 考虑最简单的二分类问题,并且真实目标函数可以是任何映射到0和1上的函数,因此可能的函数有,对所有可能的f按照均匀分布求和,有
%20%26%20%3D%5Csumf%5Csum_h%5Csum%7BX%5Cin%20C%7D%20P(x)%5Cmathbb%7BI%7D(h(x)%5Cnot%3D%20f(x))P(h%7CD%2C%5Clambdaa)%5C%5C%0A%20%20%20%20%26%20%3D%20%5Csum%7Bx%5Cin%20C%7D%20%20P(x)%5Csumh%20P(h%7CD%2C%5Clambda_a)%20%5Csum_f%5Cmathbb%7BI%7D(h(x)%5Cnot%3D%20f(x))%20%5C%5C%0A%20%20%20%20%26%20%3D%20%5Csum%7Bx%5Cint%20C%7D%20P(x)%20%5Csumh%20P(h%7CD%2C%5Clambda_a)%20%5Cfrac%2012%202%5E%7B%7CX%7C%7D%5C%5C%0A%20%20%20%20%26%20%3D%202%5E%7B%7CX%7C-1%7D%5Csum%7Bx%5Cin%20C%7DP(x)%5Csumh%20P(h%7CD%2C%5Clambda_a)%5C%5C%0A%20%20%20%20%26%20%3D%202%5E%7B%7CX%7C-1%7D%5Csum%7Bx%5Cin%20C%7DP(x)%0A%5Cend%7Baligned%7D#card=math&code=%5Cbegin%7Baligned%7D%0A%20%20%20%20%5Csumf%20E%28%5Clambda_a%7CD%2Cf%29%20%26%20%3D%5Csum_f%5Csum_h%5Csum%7BX%5Cin%20C%7D%20P%28x%29%5Cmathbb%7BI%7D%28h%28x%29%5Cnot%3D%20f%28x%29%29P%28h%7CD%2C%5Clambdaa%29%5C%5C%0A%20%20%20%20%26%20%3D%20%5Csum%7Bx%5Cin%20C%7D%20%20P%28x%29%5Csumh%20P%28h%7CD%2C%5Clambda_a%29%20%5Csum_f%5Cmathbb%7BI%7D%28h%28x%29%5Cnot%3D%20f%28x%29%29%20%5C%5C%0A%20%20%20%20%26%20%3D%20%5Csum%7Bx%5Cint%20C%7D%20P%28x%29%20%5Csumh%20P%28h%7CD%2C%5Clambda_a%29%20%5Cfrac%2012%202%5E%7B%7CX%7C%7D%5C%5C%0A%20%20%20%20%26%20%3D%202%5E%7B%7CX%7C-1%7D%5Csum%7Bx%5Cin%20C%7DP%28x%29%5Csumh%20P%28h%7CD%2C%5Clambda_a%29%5C%5C%0A%20%20%20%20%26%20%3D%202%5E%7B%7CX%7C-1%7D%5Csum%7Bx%5Cin%20C%7DP%28x%29%0A%5Cend%7Baligned%7D)
- 我们发现这其实是一个常数,也就是说不管选择了什么算法,其在特定问题和特定数据集下的总误差是一定的,因此两个算法一定会在一些问题上的表现互有胜负,这也就是There is no free lunch定理。
1.7误差,偏差和方差
- 在机器学习中我们非常关注学习的效果,这可以通过误差的指标来衡量,常见的一种误差就是均方误差,比如在回归问题中,均方误差可以表示为:
%3D%5Cfrac%7B1%7D%7Bm%7D%5Csum%7Bi%3D1%7D%5E%7Bm%7D(f(x_i)-y_i)%5E2%0A#card=math&code=E%28f%3B%20%5Cmathcal%20D%29%3D%5Cfrac%7B1%7D%7Bm%7D%5Csum%7Bi%3D1%7D%5E%7Bm%7D%28f%28x_i%29-y_i%29%5E2%0A)
- 如果采用概率密度函数,就可以计算连续状态下的均方误差:
%3D%5Cint%7Bx%5Cthicksim%20D%7D(f(x_i)-y_i)%5E2p(x)dx%0A#card=math&code=E%28f%3B%20%5Cmathcal%20D%29%3D%5Cint%7Bx%5Cthicksim%20D%7D%28f%28x_i%29-y_i%29%5E2p%28x%29dx%0A)
而均方误差又可以进一步的分解。
1.7.1方差variance和偏差bias
- 对于数据集D和学习模型f,学习算法期望预测为:
%3D%5Cmathbb%20E%7BD%7D(f(x%3B%5Cmathcal%20D))%0A#card=math&code=%5Coverline%20f%28x%29%3D%5Cmathbb%20E%7BD%7D%28f%28x%3B%5Cmathcal%20D%29%29%0A)
则根据方差的定义,可以得到方差的表达式:
%3D%5Cmathbb%20E%7BD%7D%5B(f(x%3B%5Cmathcal%20D)-%5Coverline%20f(x))%5E2%5D%0A#card=math&code=var%28x%29%3D%5Cmathbb%20E%7BD%7D%5B%28f%28x%3B%5Cmathcal%20D%29-%5Coverline%20f%28x%29%29%5E2%5D%0A)
- 我们又可以定义模型的期望预测值和真实标记之间的误差为偏差(bias),即
%3D(%5Coverline%20f(x)-y)%5E2%0A#card=math&code=bias%5E2%28x%29%3D%28%5Coverline%20f%28x%29-y%29%5E2%0A)
则在回归问题的均方误差中,我们可以将均方误差分解为:
%3Dvar(x)%2Bbias%5E2(x)%2B%5Cepsilon%5E2%0A#card=math&code=E%28f%3B%5Cmathcal%20D%29%3Dvar%28x%29%2Bbias%5E2%28x%29%2B%5Cepsilon%5E2%0A)
其中表示样本产生的噪声(noise)
1.7.2连续形式的bias和variance
变量取值连续的情况下,引入概率密度函数,bias和variance的表达式可以写为:
)-E(y%7Cx))%5E2%20p(x)dx%0A#card=math&code=bias%5E2%3D%5Cint%20%28E_D%28f%28x%2CD%29%29-E%28y%7Cx%29%29%5E2%20p%28x%29dx%0A)
-E_D(f(x%2CD)))%5E2%5Dp(x)dx%0A#card=math&code=var%3D%5Cint%20E_D%5B%28f%28x%2CD%29-E_D%28f%28x%2CD%29%29%29%5E2%5Dp%28x%29dx%0A)
1.8 模型的选择
1.8.1 正则项的作用
- 正则化(regularization)是一种模型选择的方法,是一种结构风险最小化策略的实现
- 正则化方法在原本的经验风险(也就是损失函数)上增加了一些正则项
- 正则化项一般钥匙模型复杂度的单调递增函数,模型越复杂,正则化项的值就越大,比如可以用模型参数的范数来作为正则化项
- 常见的正则化项:
- L1正则化项:一阶范数
- L2正则化项:二阶范数
- 因此在模型优化的时候,用包含正则项的经验风险作为优化目标进行优化
1.8.2 交叉验证
- 交叉验证时另一种常见的模型选择方法,通过对数据集的划分来选择不同的模型
- 交叉验证的常见方法有:
- 简单交叉验证:将数据集划分成训练集和测试集就可以
- S折交叉验证:将数据集划分成S份,每次取S-1份来进行训练,1份来验证,一共可以生成S个不同的模型,然后选择平均测试误差最小的模型
- 留一交叉验证:比较极端的S交叉验证,也就是时候的特殊情形