chap1 绪论
1.1 什么是机器学习?
能从数据中学习出规律的一类算法,在计算机上从数据产生模型。(本书用"模型"泛指从数据中学得的结果)
- 一个更形式化的定义:假设用P来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验 E在T中任务上获得了性能改善,则我们就说关于 T和P,该程序对E进行了学习.
1.2 基本术语
假定我们收集了一批关于西瓜的数据 =意思是"取值为"
(色泽=青绿;根蒂=蜷缩;敲声=浊响), (色泽=乌黑;根蒂:稍蜷;敲声=沉闷), (色泽=浅自;根蒂=硬挺;敲声=清脆)
-
数据集。 data set:所有记录的集合
-
每一条记录为:一个实例(instance)或样本(sample)。
-
单个的特点为特征(feature)或属性(attribute) 例如色泽或者敲声。属性的取值为属性值(attribute value)
-
属性空间 (attribute space) /样本空间 (sample space)/输入空间:属性张成的空间,例如我们把"色泽" “根蒂” "敲声"作为三个坐标轴,则它们张成一个用于描述西瓜的三维空间
-
特征向量(feature vector):对于一条记录,如果在坐标轴上表示,每个西瓜都可以用坐标轴中的一个点表示,一个点也是一个向量
-
一个样本的特征数为:维数(dimensionality),该西瓜的例子维数为3[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4uFMJCzy-1689948411963)(/Users/kai/Library/Application Support/typora-user-images/image-20230720223440123.png)]
-
学习/训练:从数据学得模型的过程
-
训练数据 training data 训练样本 training sample 训练集 training set(训练样本组成的集合)
如果希望学得一个能帮助我们判断没剖开的是不是“好瓜"的模型仅有前面的示例数据显然是不够的要建立这样的关于“预测”(prediction)的模型,我们需获得训练样本的“结果“信息,例如"((色泽=青绿;根蒂=蜡缩敲声=浊响),好瓜)
- 好瓜称为“标记 label
- 样例 example :拥有标记信息的示例
- 标记空间/输出空间:(xi,yi) yi为实例xi的标记,Y为标记的集合,称为输出空间
- 预测值为离散值的学习任务为:分类(classification)。 例如 好瓜/坏瓜
- 只有两个类别的“二分类”(binary clasification)任务:正类positive class 和 反类/负类 negative class
- 多个类别的“多分类”任务(multi-class classification)
- 预测值为连续值的学习任务为:回归(regression)。例如西瓜成熟度 0.9、0.88
学得模型后
-
使用其进行预测的过程称为"测试" (testing)
-
测试样本:被预测的样本 例如在学得f 后,对测试例x, 可得到其预测标记y =f(x).
-
聚类 clustering :将训练集中的西瓜分组,每组称为一个簇 cluster;这些自动生成的簇可能对应一些潜在的概念划分,例如 浅色瓜/深色瓜 本地瓜/外地瓜。这些概念我们事先不知道,学习过程中使用的训练样本通常不拥有标记信息
根据训练数据是否拥有标记信息,学习任务分为:
-
监督学习 supervised learning : 分类和回归
-
无监督学习 unsupervised learning : 聚类
-
泛化 generalization :学得模型适用于样本的能力
1.3 假设空间
归纳induction:从特殊到一般的泛化过程
演绎deduction:从一般到特殊的特化过程(unsupervised learning)
归纳学习 inductive learning
-
广义 :从样例中学习
-
狭义: 从训练数据中学得概念 concept ,即概念学习
- 布尔概念学习,0/1布尔值的目标概念的学习
编号 | 色泽 | 根蒂 | 敲声 | 好瓜 |
---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 是 |
2 | 乌黑 | 蜷缩 | 浊响 | 是 |
3 | 青绿 | 硬挺 | 清脆 | 否 |
4 | 乌黑 | 稍蜷 | 沉闷 | 否 |
我们的学习目标为好瓜,由前三种因素确定,布尔表达式为 : 好瓜<->(色泽=?) ^ (根蒂=?) ^ (敲声=?)
任务:通过上表的训练集进行学习,确定好瓜
用空集表示概念不成立的假设
用通配符*表示可以取任何值
假设三种属性分别有3,2,2种可能取值,有36种假设空间,再加上一种极端情况,即不存在好瓜,则假设空间大小为4 * 3 * 3 + 1
有许多策略对这个假设空间进行搜索,例如自顶向下、自底向上
版本空间 version space:假设空间的最大子集,每个元素都不与假设空间冲突
1.4 归纳偏好
chap2 模型评估和选择
2.1 经验误差与过拟合
误差 error :学习器的实际预测输出与样本的真实输出之间的差异
- 训练误差/经验误差:在训练集上的误差
- 泛化误差generalization error:学习器在所有新样本上的误差
- 测试误差:测试集上得到的误差
当学习器把训练集学得“太好”的时候,可能会将一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来。
- 学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。
- 学习能太差,训练样本的一般性质尚未学好,称为:欠拟合(underfitting)。
对于NP问题或更复杂的问题,过拟合是无法彻底避免的
只要相信P!=NP,过拟合就无法避免
2.2 评估方法
通常我们采用测试集来测试学习器对新样本的判别能力,然后以测试误差作为泛化误差的近似。
同时保证测试集应尽可能与训练集互斥,例如,不能将练习题作为考试题。
我们对数据集D进行处理,从中产生训练集S与测试集T
训练集和测试集的划分方法
2.2.1 留出法
将数据集D划分为两个互斥的集合,一个作为训练集S,一个作为测试集T,满足D=S∪T且S∩T=∅
需要注意的是:
- 训练/测试集的划分要尽可能保持数据分布的一致性,以避免由于分布的差异引入额外的偏差,常见的做法是采取分层抽样。
- 同时,由于划分的随机性,单次的留出法结果往往不够稳定,一般要采用若干次随机划分,重复实验取平均值的做法。
- 常见的划分:大约2/3-4/5的样本用作训练,剩下的用作测试
2.2.2 交叉验证法
步骤:
-
将数据集D划分为k个大小相同的互斥子集,满足D=D1∪D2∪…∪Dk,Di∩Dj=∅(i≠j),同样地尽可能保持数据分布的一致性,即采用分层抽样的方法获得这些子集。
-
每次用k-1个子集的并集作为训练集,余下的那个作为测试集
-
这样就可以得到k组测试集,从而进行k次训练和测试,最终返回的是这k个测试结果的平均值
该方法的评估结果很大程度上取决于k的取值,通常也叫做 k折交叉验证 k-fold cross validation
k最常用的取值是10,此时为10 折交叉验证
与留出法类似,将数据集D划分为K个子集的过程具有随机性,因此K折交叉验证通常也要重复p次,称为p次k折交叉验证,常见的是10次10折交叉验证,即进行了100次训练/测试。特殊地,当划分的k个子集的每个子集中只有一个样本时,称为“留一法”,显然,留一法的评估结果比较准确,但对计算机的消耗也是巨大的。
2.2.3 自助法 bootstrapping
自助法的基本思想是:给定包含m个样本的数据集D,每次随机从D 中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D 中,使得该样本在下次采样时仍有可能被采到。重复执行m 次,就可以得到了包含m个样本的数据集D’。
可以得知在m次采样中,样本始终不被采到的概率取极限为:
lim
x
→
∞
(
1
−
1
/
m
)
m
→
1
e
≈
0.368
\lim_{x \to \infty}(1-1/m)^m \to \frac{1}{e} \approx 0.368
x→∞lim(1−1/m)m→e1≈0.368
即通过自助采样,D约有36.8%的样本未出现在D’中,于是我们将D’作为训练集 D\D’ 作为测试集。这样我们仍有1/3的数据不在训练集中,可以用作测试。这样的测试结果称为包外估计
- 自助法在数据集较小,难以有效划分训练集/测试集时很有用,但由于自助法产生的数据集(随机抽样)改变了初始数据集的分布,因此引入了估计偏差。在初始数据集足够时,留出法和交叉验证法更加常用。
2.2.4 调参与最终模型
大多数学习算法都有些参数(parameter) 需要设定,参数配置不同,学得模型的性能往往有显著差别,这就是通常所说的"参数调节"或简称"调参" (parameter tuning)。
学习算法的很多参数是在实数范围内取值,因此,对每种参数取值都训练出模型来是不可行的。常用的做法是:对每个参数选定一个范围和步长λ,这样使得学习的过程变得可行。
- 例如:假定算法有3 个参数,每个参数仅考虑5 个候选值,这样对每一组训练/测试集就有5^3= 125 个模型需考察
当选定好模型和调参完成后,我们需要使用初始的数据集D重新训练模型,即让最初划分出来用于评估的测试集也被模型学习,增强模型的学习效果。
另外需注意的是,我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用千评估测试的数据集常称为“验证集”(validation set).
- 例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参.
2.3 性能度量 performance measure
衡量模型泛化能力的评价标准
什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
对于D = {(X1 , Y1) , (X2,Y2), . . . , (Xm , Ym)} , 其中Yi是示例Xi 的真实标记,要评估学习机f的性能,许比较预测结果f(x)与真实标记y
在回归任务中,即预测连续值的问题,最常用的性能度量是“均方误差”(mean squared error)
2.3.1 错误率与精度
在分类任务中,即预测离散值的问题,最常用的是错误率和精度,错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例,易知:错误率+精度=1。
2.3.2 查准率percision、查全率recall与F1
错误率和精度不能满足所有的需求。例如:在推荐系统中,我们只关心推送给用户的内容用户是否感兴趣(即查准率),或者说所有用户感兴趣的内容我们推送出来了多少(即查全率)。因此,使用查准/查全率更适合描述这类问题。
对于二分类问题,分类结果混淆矩阵与查准/查全率定义如下:
TP+FP+TN+FN=样例总数
查准率和查全率是一对矛盾的度量。
- 例如我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,查全率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,这样查准率就很低了。
- 通常只有在一些简单任务中才可能使查全率和查准率都很高。
P-R曲线
P-R图直观地显示出学习器在样本总体上的查全率、查准率
- 在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住",则可断言后者的性能优于前者。例如图2.3中学习器A的性能优千学习器C;
- 如果两个学习器的P-R曲线发生了交叉,例如图2.3中的A与B,则难以判断优劣,只能在具体条件下比较
若要判断优劣,合理的判据是比较P-R曲线下面积的大小。但一般来说,曲线下的面积是很难进行估算的。衍生出“平衡点”(Break-Event Point,简称BEP)的概念,即当P=R时的取值,平衡点的取值越高,性能更优。
P和R指标有时会出现矛盾的情况,这样就需要综合考虑
常见方法是F-Measure,又称F-Score。
-
F-Measure是P和R的加权调和平均,即:
-
特别地,当β=1时,也就是常见的F1度量,是P和R的调和平均,当F1较高时,模型的性能越好。
有时会有多个二分类混淆矩阵,例如多次训练或者在多个数据集上训练,那么估算全局性能的方法有两种,分为宏观和微观。
宏观就是先算出每个混淆矩阵的P值和R值,然后取得平均P值macro-P和平均R值macro-R,在算出Fβ或F1
微观则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出Fβ或F1。