本博客是用来记录个人认为的重要的知识点,但因为知识点繁多而复杂,因此大多数情况下知识在这里列一个提纲,或者在这里写自己的理解
一些概念
“算法”产出的结果称为“模型”,通常是具体的函数或者可抽象地看作为函数
样本:也称为“示例”,是关于一个事件或对象的描述,一般是把事物或对象抽象为某种数学形式,常见于抽象成线性代数中的向量(因为任何事物都可以由若干“特征”——或称为“属性”唯一刻画出来),相应特征的取值对应事物具有的特征。例如,如果用色泽、根蒂和敲声这 3 个特征来刻画西瓜,那么一个“色泽青绿,根蒂蜷缩,敲声清脆”的西瓜用向量来表示即为 x =(青绿; 蜷缩; 清脆) 一般称与特征处理相关的工作为“特征工程”。
样本空间:也称为“输入空间”或“属性空间”。样本的特征向量所在的空间为样本空间。类比线性代数中的向量空间来理解即可。(因为样本也常常用线性代数中的向量来表示)
数据集:数据集通常用集合来表示。集合 D = x 1 , x 2 , . . . , x m D = {x_1, x_2, ..., x_m} D=x1,x2,...,xm 表示包含 m 个样本的数据集,一般同一份数据集中的每个样本都含有相同个数的特征,假设此数据集中的每个样本都含有 d 个特征,则第 i个样本的数学表示为 d 维向量: x i = ( x i 1 ; x i 2 ; . . . ; x i d ) x_i = (x_{i1}; x_{i2}; ...; x_{id}) xi=(xi1;xi2;...;xid),其中 x i j x_{ij} xij 表示样本 x i x_i xi 在第 j 个属性上的取值。
需要注意的是,数据集也称为一个样本,因为它可以看成是对样本空间的一个采样。通过上下文可判断出“样本”是指单个示例还是数据集
模型:机器学习的一般流程如下:首先收集若干样本(假设此时有 100 个),然后将其分为训练样本(80 个)和测试样本(20 个),其中 80 个训练样本构成的集合称为“训练集”,20 个测试样本构成的集合
称为“测试集”,接着选用某个机器学习算法,让其在训练集上进行“学习”(或称为“训练”),然后产出得到“模型”(或称为“学习器”),最后用测试集来测试模型的效果。执行以上流程时,表示我们已经默认样本的背后是存在某种潜在的规律,我们称这种潜在的规律为“真相”或者“真实”,例如样本是一堆好西瓜和坏西瓜时,我们默认的便是好西瓜和坏西瓜背后必然存在某种规律能将其区分开。当我们应用某个机器学习算法来学习时,产出得到的模型便是该算法所找到的它自己认为的规律,由于该规律通常并不一定就是所谓的真相,所以也将其称为“假设”。通常机器学习算法都有可配置的参数,同一个机器学习算法,
使用不同的参数配置或者不同的训练集,训练得到的模型通常都不同。
标记:上文提到机器学习的本质就是在学习样本在某个方面的表现是否存在潜在的规律,我们称该方面的信息为“标记”。例如在学习西瓜的好坏时,“好瓜”和“坏瓜”便是样本的标记。一般第 i 个样本的标记的数学表示为 y i y_i yi,标记所在的空间称为“标记空间”或“输出空间”,数学表示为花式大写的 Y Y Y。标记通常也看作为样本的一部分,因此,一个完整的样本通常表示为 ( x , y ) (x, y) (x,y)。
根据标记的取值类型不同,可将机器学习任务分为以下两类:
1、当标记取值为离散型时,称此类任务为“分类”。当分类的类别只有两个时,称此类任务为“二分类”,通常称其中一个为“正类”,另一个为“反类”或“负类”;当分类的类别超过两个时,称此类任务为“多分类”。
2、当标记取值为连续型时,称此类任务为“回归”。例如学习预测西瓜的成熟度、学习预测未来的房价等。由于是连续型,因此标记的所有可能取值无法直接罗列,通常只有取值范围,回归任务的标记取值范围通常是整个实数域 R R R,即 Y = R Y = R Y=R。
根据是否有用到标记信息,可将机器学习任务分为以下两类:
1、在模型训练阶段有用到标记信息时,称此类任务为“监督学习”,例如分类和回归。
2、在模型训练阶段没用到标记信息时,称此类任务为“无监督学习”,例如聚类。
泛化:由于机器学习的目标是根据已知来对未知做出尽可能准确的判断,因此对未知事物判断的准确与否才是衡量一个模型好坏的关键,我们称此为“泛化”能力。
分布:此处的“分布”指的是概率论中的概率分布,通常假设样本空间服从一个未知“分布” D D D,而我们收集到的每个样本都是独立地从该分布中采样得到,即“独立同分布”。通常收集到的样本越多,越能从样本中反推出 D D D 的信息,即越接近真相。
归纳偏好:任何一个有效的机器学习算法必有其归纳偏好,用于决定算法产生哪一种模型。奥卡姆剃刀是一种常用的基本原则——即若有多个假设与观察一致,选最简单的那个。但是现实要选择与问题本身匹配的归纳偏好——脱离具体问题,空谈什么学习算法更好毫无意义。
错误率:
m跟样本中有a个样本分类错误,则错误率 E = a / m E=a/m E=a/m,相应的, 1 − a / m 1-a/m 1−a/m称为精度。
学习器的实际输出与样本的真实输出的差异称为“误差”。在训练集上产生的误差称为训练误差,在新样本上的误差称为泛化误差。
过拟合:学习器把训练样本自身的一些特点当成了所有潜在样本都会具有的一般性质导致泛化性能下降。(学习器把训练样本学得太好了),是机器学习的关键障碍,且无法避免。
欠拟合:与过拟合相对。
对于“西瓜书”第 1 章图 1.4 中的训练样本(黑点)来说,用类似于抛物线的曲线 A 去拟合则较为合理,而比较崎岖的曲线 B 相对于训练样本来说学习能力过于强大,但若仅用一条直线去训练则相对于训练样本来说直线的学习能力过于低下。
对只有一个包含m个样例的数据集 D = / ( x 1 , y 1 ) , ( x 2 , y 2 ) … , ( x m , y m ) / D=/{(x_1,y_1),(x_2,y_2)…,(x_m,y_m)}/ D=/(x1,y1),(x2,y2)…,(xm,ym)/,为了既要训练也要测试,需要对D进行处理来产生训练集S和测试集T,下面是常用的几种做法:
西瓜书介绍了 3 种模型评估方法:留出法、交叉验证法、自助法。
留出法由于操作简单,因此最常用;留出法直接将数据集D分为两个互斥的集合,其中一个作为S,另一个作为T。S/T的划分要尽量保持数据分布的一致性。而且单次留数法的估计结果往往不够可靠,一般要采用若干次随机划分,重复进行实验评估后取平均值作为评估结果。
交叉验证法常用于对比同一算法的不同参数配置之间的效果,以及对比不同算法之间的效果;“交叉验证法”先将数据集D划分为k个大小相似的
互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ D k , D i ∩ D j = 0 ( i ≠ j ) D= D_1∪D_2∪...∪D_k, D_i∩D_j=0(i≠j) D=D1∪D2∪...∪Dk,Di∩Dj=0(i=j).每个子集Di都
尽可能保持数据分布的一致性,即从D中通过分层采样得到.然后,每次用
k- 1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得k
组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果
的均值.显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k
令k=m(m为样本个数),则得到特例:留一法。留一法结果比较准确,但数据集比较大时算法的开销很大。
自助法常用于集成学习,以自助采样法为基础。给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D’,这就是自助采样的结果。D’用作训练集,D\D’用作测试集(\表示集合减法)。但是这会引入估计误差。数据集较小时可以使用,但初始数据量足够时,留出法和交叉验证法更常用一些。
性能度量是衡量模型泛化能力的评价标准。常用的性能度量如下:
1、错误率和精度
2、查准率、查全率与F1
查准率 P:被学习器预测为正例的样例中有多大比例是真正例。
查全率 R:所有正例当中有多大比例被学习器预测为正例。
查准率 P与查全率 R比较矛盾,查准率高时,查全率往往偏低,反之亦然。
真正例率 TPR。真正例即实际为正例预测结果也为正例,假反例即实际为正例但预测结果为反例,式 (2.18) 分子为真正例,分母为真正例和假反例之和(即实际的正例个数),因式 (2.18) 的含义是 所有正例当中有多大比例被预测为正例(即查全率Recall)。式 (2.19) 定义了假正例率 FPR。先解释式子中出现的假正例和真反例,假正例即际为反例但预测结果为正例,真反例即实际为反例预测结果也为反例,式 (2.19) 分子为假正例,分母为真反例和假正例之和(即实际的反例个数),因此式 (2.19) 的含义是 所有反例当中有多大比例被预测为正例。
ROC:研究排序本身质量的好坏,从这个角度研究学习器泛化性能。
ROC的绘图步骤:详细请见西瓜书P34。
若A的ROC曲线被B保住,则B 性能优于A,若果AB的ROC曲线发生交叉,则难以一般性下结论两者孰优孰劣。需要借助ROC曲线下的面积来判断(AUC)
AUC的意义见P35
代价敏感错误率与代价曲线
代价矩阵
非均等代价下,ROC曲线不能直接反映出学习器期望的总体代价,而代价曲线可达到该目的。
(以后再看)