@[]
什么是机器学习?
研究关于“学习算法”(一类能从数据中学习出其背后潜在规律的算法)的一门学科。
PS:深度学习指的是神经网络那一类学习算法,因此是机器学习的子集。
假设空间和版本空间
举个栗子:假设现已收集到某地区近几年的房价和学校数量数据,希望利用收集到的数据训练出能通过学校数量预测房价的模型,具体收集到的数据如下表所示:
**假设空间:**一元一次函数,算法: 线性回归,模型: y = 3 x − 2 y = 3x - 2 y=3x−2
**假设空间:**一元二次函数,算法: 多项式回归,模型: y = x 2 y = x^2 y=x2
所有能够拟合训练集的模型(假设) 构成的集合称为 版本空间。
基本术语
样本: 也称为“示例”,是关于一个事件或对象的描述。
一个”色泽青绿,根蒂蜷缩,敲声清脆”的西瓜用向量来表示即为
x = ( 青绿 ; 蜷缩 ; 清脆 ) x =(青绿;蜷缩;清脆) x=(青绿;蜷缩;清脆)
向量中的各个维度称为**“特征”或者”属性”**。
向量中的元素用分号 “;" 分隔时表示此向量为列向量,用逗号 ”," 分隔时表示为行向量。
特征工程:pass
标记:机器学习的本质就是在学习样本在某个方面的表现是否存在潜在的规律,我们称该方面的信息为“标记”
标记通常也看作为样本的一部分,因此,一个完整的样本通常表示为 ( x , y ) (x, y) (x,y)
一条西瓜样本: x = ( 青绿 ; 蜷缩 ; 清脆 ) , y = 好瓜 x=(青绿;蜷缩;清脆),y=好瓜 x=(青绿;蜷缩;清脆),y=好瓜
一条房价样本: x = ( 1 所 ) , y = 1 万 / m 2 x=(1所),y =1万/m^2 x=(1所),y=1万/m2
样本空间: 也称为“输入空间”或“属性空间”。由于样本采用的是标明各个特征取值的“特征向量“来进行表示,根据线性代数的知识可知,有向量便会有向量所在的空间,因此称表示样本的特征向量所在的空间为样本空间,通常用花式大写的 χ \chi χ 表示。
标记空间: 标记所在的空间称为“标记空间”或“输出空间”,数学表示为花式大写的 y y y。
数据集: 数据集通常用集合来表示,令集合 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 j j个属性上的取值。
模型: 机器学习的一般流程如下: 首先收集若干样本(假设此时有100个),然后将其分为训练样本(80个) 和测试样本 (20个),其中80个训练样本构成的集合称为“训练集”,20个测试样本构成的集合称为“测试集”,接着选用某个机器学习算法,让其在训练集上进行”学习”(或称为“训练”),然后产出得到“模型”(或称为“学习器”),最后用测试集来测试模型的效果。执行以上流程时,表示我们已经默认样本的背后是存在某种潜在的规律,我们称这种潜在的规律为“真相“或者“真实”,例如样本是一堆好西瓜和坏西瓜时,我们默认的便是好西瓜和坏西瓜背后必然存在某种规律能将其区分开。当我们应用某个机器学习算法来学习时,产出得到的模型便是该算法所找到的它自己认为的规律,由于该规律通常并不一定就是所谓的真相,所以也将其称为”“假设”。通常机器学习算法都有可配置的参数,同一个机器学习算法,使用不同的参数配置或者不同的训练集,训练得到的模型通常都不同。
泛化: 由于机器学习的目标是根据已知来对未知做出尽可能准确的判断,因此对未知事物判断的准确与否才是衡量一个模型好坏的关键,我们称此为”泛化”能力。
分布: 此处的“分布”指的是概率论中的概率分布,通常假设样本空间服从一个未知“分布” D D D,而我们收集到的每个样本都是独立地从该分布中采样得到,即“独立同分布”。通常收集到的样本越多,越能从样本中反推出 D D D的信息,即越接近真相。
机器学习任务分类
根据标记的取值类型不同,可将机器学习任务分为以下两类:
当标记取值为离散型时,称此类任务为”分类”,例如学习西瓜是好瓜还是坏瓜、学习猫的图片是白猫还是黑猫等。当分类的类别只有两个时,称此类任务为“二分
类”,通常称其中一个为“正类”,另一个为”反类”或”负类”;当分类的类别超过两个时,称此类任务为”多分类”。由于标记也属于样本的一部分,通常也需要参与运算,因此也需要将其数值化,例如对于二分类任务,通常将正类记为 1 1 1,反类记为 0 0 0,即 y = 0 , 1 y={0,1} y=0,1。这只是一般默认的做法,具体标记该如何数值化可根据具体机器学习算法进行相应地调整,例如支持向量机算法则采用的是 y = { − 1 , + 1 } y = \{-1,+1\} y={−1,+1}。
当标记取值为连续型时,称此类任务为“回归”,例如学习预测西瓜的成熟度、学习预测未来的房价等。由于是连续型,因此标记的所有可能取值无法直接罗列,通常只有取值范围,回归任务的标记取值范围通常是整个实数域 R R R,即 y = R y=R y=R。
根据是否有用到标记信息,可将机器学习任务分为以下两类:
模型训练阶段有用到标记信息时,称此类任务为”监督学习”,例如线性模型。
在模型训练阶段没用到标记信息时,称此类任务为“无监督学习”,例如聚类。
无论是分类还是回归,机器学习算法最终学得的模型都可以抽象地看作为以样本 x x x为自变量,标记 y y y为因变量的函数 y = f ( x ) y = f(x) y=f(x),即一个从输入空间 χ \chi χ 到输出空间 y y y 的映射。
例如在学习西瓜的好坏时,机器学习算法学得的模型可看作为一个函数 f ( x ) f(x) f(x),给定任意一个西瓜样本 x i = ( 青绿 ; 蜷缩 ; 清脆 ) x_i=(青绿;蜷缩;清脆) xi=(青绿;蜷缩;清脆),将其输入进函数即可计算得到一个输出 y i = f ( x i ) y_i= f(x_i) yi=f(xi),此时得到的 y y y 便是模型给出的预测结果,当 y i y_i yi 取值为 1 时表明模型认为西瓜 x i x_i xi是好瓜,当 y i y_i yi 取值为 0 时表明模型认为西瓜 x i x_i xi 是坏瓜。
归纳偏好
当选用一元线性回归算法时,学得的模型是一元一次函数,当在“房价预测”的例子中,选用多项式回归算法时,学得的模型是一元二次函数,所以不同的机器学习算法有不同的偏好,我们称为“归纳偏好”。
对于当前房价预测这个例子来说,这两个算法学得的模型哪个更好呢?著名的奥卡姆剃刀“原则认为“若有多个假设与观察一致,则选最简单的那个”,但是何为”简单”便见仁见智了,如果认为函数的幂次越低越简单,则此时一元线性回归算法更好,如果认为幂次越高越简单,则此时多项式回归算法更好,因此该方法其实并不“简单”,所以并不常用,而最常用的方法则是基于模型在测试集上的表现来评判模型之间的优劣。
例如在房价预测问题中,通常会额外留有部分未参与模型训练的数据来对模型进行测试。假设此时额外留有1条数据:(年份 :2022年;学校数量:3所;房价 :7万 /m)
于测试,模型 y = 3 x − 2 y =3x - 2 y=3x−2的预测结果为 3 ∗ 3 − 2 = 7 3*3-2=7 3∗3−2=7,预测正确,模型 y = x 2 y = x^2 y=x2 的预测结果为32=9,预测错误,因此,在当前房价预测问题上,我们认为一元线性回归算法优于多项式回归算法。机器学习算法之间没有绝对的优劣之分,只有是否适合当前待解决的问题之分,例如上述测试集中的数据如果改为(年份:2022年;学校数量:3所;房价 :9万 /m),则结论便逆转为多项式回归算法优于一元线性回归算法。
数据决定模型的上限,而算法则是让模型无限逼近上限
数据决定模型效果的上限: 其中数据是指从数据量和特征工程两个角度考虑。从数据量的角度来说,通常数据量越大模型效果越好,因为数据量大即表示累计的经验多,因此模型学习到的经验也多,自然表现效果越好。例如以上举例中如果训练集中含有相同颜色但根蒂不蜷缩的坏瓜,模型a学到真相的概率则也会增大;从特征工程的角度来说,通常对特征数值化越合理,特征收集越全越细致,模型效果通常越好,因为此时模型更易学得样本之间潜在的规律。例如学习区分亚洲人和非洲人时,此时样本即为人,在进行特征工程时,如果收集到每个样本的肤色特征,则其他特征例如年龄、身高和体重等便可省略,因为只需靠肤色这一个特征就足以区分亚洲人和非洲人。
算法则是让模型无限逼近上限:是指当数据相关的工作已准备充分时,接下来便可用各种可适用的算法从数据中学习其潜在的规律进而得到模型,不同的算法学习得到的模型效果自然有高低之分,效果越好则越逼近上限,即逼近真相。
评估方法
书中关于过拟合的解释,我觉得很到位:
我们实际希望的,是在新样本上能表现得很好的学习器.为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律"这样才能在遇到新样本时做出正确的判别.然而,当学习器把训练样本学得“太好” 了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为“过拟合"(overfitting).与 “过拟合”相对的是“欠拟合"(underfitting),这是指对训练样本的一般性质尚未学好
留出法
留出法是将数据集划分为两个互斥的集合,为了不使分类得到的数据集出现偏颇的情况,通常会使用保留类别比例的采样方式,被称作“分层采样”。不同的划分也会导致模型评估的结果上的差异,所以往往会进行多次随机划分、实验及评估,得到一个平均值。
同时,这种方法还存在一定保真性降低的情况。
若令训练集 S 包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型,但由于 T 比较小,评估结果可能不够稳定准确;若令测试集 T 多包含一些样本,则训练集 S 与 D 差别更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。
交叉验证法
书中的图很简单明了。交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,最常见的取值为10、5、20。
还有一个特例:留一法,数据集有几个样本,就是几折交叉验证(绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似.因此,留一法的评估结果往往被认为比较准确)。当数据集比较大的时候,计算开销是难以忍受的。
自助法
留出法与交叉验证法因为使用的训练数据集比初始数据集小,一定会造成因训练样本不同导致的估计偏差,虽然留一法会通过减小与训练集的差距从而减小这种偏差,但是计算开销太高了。那接下来的自助法是一个比较好的解决方案。
自助法的核心思想是通过对原始数据集进行有放回的随机抽样来创建多个自助数据集。每个自助数据集的大小与原始数据集相同,但是因为是有放回抽样,所以每个自助数据集中会包含原始数据集中的某些数据多次,而不包含其他一些数据。
此时有个问题出现,如何划分训练集和测试集?
训练集:通过有放回抽样得到的新数据集作为训练集。由于是有放回抽样,原始数据集中的某些样本可能会在训练集中多次出现,而其他样本可能一次都不出现。
测试集:原始数据集中未出现在训练集中的样本(即每次抽样都没有被选中的样本)构成了测试集。由于是有放回抽样,测试集通常会比训练集小,其大小约为原始数据集的36.8%。36.8%如何得到的,书中有详细的推导。
在自助法中,原始数据集中的每个样本都有相同的概率被选中放入训练集中,这个概率是1/n,其中n是原始数据集中的样本数。因此,一个特定的样本在每次抽样中都不被选中的概率是(1 - 1/n)。如果进行n次抽样,那么这个样本一次都不被选中的概率就是(1 - 1/n)^n。
当n趋向于无穷大时,(1 - 1/n)^n会趋向于1/e,其中e是自然对数的底数,大约等于2.71828。因此,一个特定的样本在自助法中不被选中的概率大约是1/e,即大约36.8%(因为1/e约等于0.368)。
这个结果意味着,在自助法中,大约36.8%的原始样本不会出现在训练集中,而是自动成为测试集的一部分。这个百分比是一个理论值,实际情况可能会略有不同,因为它取决于原始数据集的大小和抽样的具体结果。
调参与最终模型
调参的好坏会直接关键地影响模型的好坏。这里存在一个很现实的问题:参数一般在实数范围中进行取值,对于每种参数进行实验是不太现实的,计算开销太大了。
于是需要为每一个参数设置一个合适的范围和变化步长,进行可控有限的实验。虽然得到的不一定是“最佳”结果,但这已经是在计算开销和性能估计之间进行折中的最好结果了。
书中在此处引入了测试集的概念。
在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参.
验证集和测试集的区别
验证集:用于调整模型的参数和选择模型。在模型训练过程中,验证集用来评估不同参数设置下的模型性能,帮助开发者找到最佳的超参数配置。
测试集:用于评估最终模型的泛化能力。在模型训练和参数调整完成后,测试集用来提供一个无偏的评估,即模型在未见过的数据上的表现如何。
性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure).
均方误差
在回归问题中最常用的性能度量就是均方误差。
有两种表达写法:
MSE = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 MSE=n1i=1∑n(yi−y^i)2
其中, y i y_i yi 是第 i 个实际观测值, y ^ i \hat{y}_i y^i 是对应的模型预测值,N 是总体中的样本数量。
假设有一个连续随机变量,其真实的概率密度函数为 f ( x ) f(x) f(x),而我们有一个基于数据集得到的概率密度函数的估计 f ^ ( x ) \hat{f}(x) f^(x)。那么,这两个概率密度函数之间的均方误差可以定义为:
MSE = ∫ ( f ( x ) − f ^ ( x ) ) 2 d x \text{MSE} = \int (f(x) - \hat{f}(x))^2 \, dx MSE=∫(f(x)−f^(x))2dx
错误率与精度
在回归问题中最常用的性能度量就是错误率和精度。这两个是一对相反的概念,得到一个就会得到另外一个。错误率是指分类错误的样本数占总样本数的比例,而精度就是指分类正确的样本数占总样本数的比例。两者的和为 1 。
查准率、查全率与F1
假设我们有一个模型用于预测瓜是好是坏,我们可以根据模型的预测结果和实际的瓜的好坏来构建混淆矩阵:
- TP(真正例):模型预测为好瓜,实际也是好瓜。
- FP(假正例):模型预测为好瓜,实际是坏瓜。
- TN(真反例):模型预测为坏瓜,实际也是坏瓜。
- FN(假反例):模型预测为坏瓜,实际是好瓜。
查准率(Precision, P),也称为精确度,是所有预测为正例的样本中,实际上为正例的比例。查准率关注的是在所有被模型判定为好瓜的瓜中,真正好瓜的比例。计算公式为:
P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP
查全率(Recall, R),也称为召回率或灵敏度,是所有实际为正例的样本中,被正确预测为正例的比例。查全率关注的是**在所有真正好瓜中,模型能够正确识别好瓜出的比例。**计算公式为:
R = T P T P + F N R = \frac{TP}{TP + FN} R=TP+FNTP
举个例子,假设我们有100个瓜,其中80个好瓜,20个坏瓜。模型预测了90个好瓜,其中70个是真的好瓜(TP),10个是预测错了的坏瓜(FP)。剩下的10个好瓜模型没有预测出来(FN),而20个坏瓜中,模型正确地预测了10个(TN),错误地将另外10个预测为好瓜(FP)。
查准率 PP 是模型预测为好瓜的瓜中真正好瓜的比例,即
P = 70 70 + 10 = 70 80 = 0.875 或 87.5 % 。 P = \frac{70}{70 + 10} = \frac{70}{80} = 0.875 或 87.5\%。 P=70+1070=8070=0.875或87.5%。
查全率 RR 是所有真正好瓜中模型能够正确识别出的比例,即
R = 70 70 + 10 = 70 80 = 0.875 或 87.5 % 。 R = \frac{70}{70 + 10} = \frac{70}{80} = 0.875 或 87.5\%。 R=70+1070=8070=0.875或87.5%。
F1pass
ROC与AUC
pass
代价敏感错误率与代价曲线
pass
比较检验
pass
偏差与方差
- 偏差(Bias):
- 定义:偏差是指模型在多次训练过程中对目标函数或数据的平均预测误差。它反映了模型在训练集上的拟合程度,即模型对训练数据的平均学习能力。
- 低偏差:模型能够很好地拟合训练数据,对目标函数的近似很接近。
- 高偏差:模型对训练数据的拟合不足,可能是由于模型过于简单或者数据特征不足以捕捉目标函数的复杂性。
- 方差(Variance):
- 定义:方差是指模型在不同训练集上的预测结果的波动程度。它反映了模型对训练数据的敏感程度,即模型的稳定性。
- 低方差:模型对不同的训练集产生类似的预测结果,说明模型对训练数据的变化不敏感,泛化能力强。
- 高方差:模型对不同的训练集产生差异很大的预测结果,可能是由于模型过于复杂,导致对训练数据中的随机波动过度拟合。
- 噪声(Noise):
- 定义:噪声是指数据本身的不确定性或随机性。在实际应用中,数据往往受到多种因素的影响,其中一些因素可能是不可预测的,这些不可预测的因素就是噪声。
偏差-方差分解
书中有偏差-方差分解以回归问题为例,推导得出的式子过程(结合南瓜书)比较详实流畅。
泛化误差 = 偏差 2 + 方差 + 不可减少的误差 \text{泛化误差} = \text{偏差}^2 + \text{方差} + \text{不可减少的误差} 泛化误差=偏差2+方差+不可减少的误差
偏差-方差窘境
- 偏差与模型复杂度的关系:
- 低复杂度模型:简单模型(如线性回归)通常具有高偏差,因为它们可能无法捕捉数据中的复杂关系。这些模型往往对训练数据的拟合不足,导致在训练集和测试集上的性能都不佳。
- 高复杂度模型:复杂模型(如深度神经网络)通常能够减少偏差,因为它们有足够的能力来拟合复杂的数据关系。然而,如果模型过于复杂,它可能会对训练数据中的随机噪声过度拟合,导致方差增加。
- 方差与模型复杂度的关系:
- 低复杂度模型:简单模型对训练数据的微小变化不敏感,因此方差较低。这意味着即使是在不同的训练集上,简单模型也会产生类似的预测结果,具有较好的泛化能力。
- 高复杂度模型:复杂模型对训练数据中的随机波动非常敏感,导致方差较高。在新的数据集上,这些模型可能会产生与训练集上截然不同的预测结果,泛化能力较差。
- 偏差-方差权衡:
- 在实践中,我们通常需要在偏差和方差之间找到一个平衡点。如果模型过于简单(高偏差),它可能无法捕捉数据中的关键信息。如果模型过于复杂(高方差),它可能会对训练数据中的噪声过度敏感,导致在未见过的数据上表现不佳。
- 优化这个权衡涉及到选择合适的模型架构、特征工程、正则化技术等。目标是构建一个既能够很好地拟合训练数据又能够在测试数据上表现良好的模型。
因此,偏差和方差之间存在冲突,因为它们对模型复杂度的需求相反:减少偏差通常需要增加模型复杂度,而这又可能导致方差增加。在机器学习中,我们的目标是在偏差和方差之间找到一个最优的平衡点,以构建一个既强大又稳健的模型。