本篇内容 Datawhale 2023年1月吃瓜教程组队学习 task1 的学习打卡,很开心能参加 Datawhale 的组队学习,希望这个寒假可以收获满满!
2.3.3 ROC与AUC及之后的内容看的不是很懂,先不放在笔记里了,等后续学完了回来补上!
我发现周老师在西瓜书中并没有对一些数学符号做出说明,尤其是对我这种数学小白来说,有些符号都不知道该怎么查(汗颜),所以我查阅了一些资料,将常用数学符号列在最前面,方便后续查看。
写着写着突然发现一件很坑的事情,纸质版的书有符号表,手上电子版的书没有…不管了,不改了,就这样,反正大差不差(哭)
数据集(data set):关于某个事件 / 对象的数据(记录)的集合
示例(instance)/ 样本(sample):数据集中的一条记录
属性(attribute)/ 特征(feature):反映事件或对象在某方面的表现或性质
属性值(attribute value):属性的取值
属性空间(attribute space)/ 样本空间(sample space)/ 输入空间(input space):属性张成的空间
特征向量(feature vector):属性空间中的一个点,即一个样本
维数(dimensionality):一个样本的属性数量
训练(training):从数据中学得模型的过程
训练数据(training data):训练中使用的数据
训练样本(training sample):训练数据中的样本
训练集(training set):训练样本组成的集合
假设(hypothesis):模型学得的数据中某种潜在规律
学习器(learner):即模型
标记(label):关于样本结果的信息
样例(example):拥有标记的样本
标记空间(label space)/ 输出空间(output space):所有标记的集合
分类(classification):预测离散值的学习任务
回归(regression):预测连续值的学习任务
测试(testing):使用模型进行预测的过程
测试样本(testing sample):被预测的样本
聚类(clustering):将训练集分为一些组,同组之内含有潜在的联系
簇(cluster):聚类所形成的组,每组都称为一个簇
监督学习(supervised learning):训练数据具有标记信息
无监督学习(unsupervised learning):训练数据不具有标记信息
泛化(generalization)/ 归纳(induction):从具体的事实归结出一般性规律,泛化能力尤其指模型适用于新样本的能力
特化(specialization)/ 演绎(deduction):从基础原理推演出具体情况
归纳学习(inductive learning):广义上指从样例中学习,狭义上指从训练数据中学得概念
概念学习(concept learning):狭义的归纳学习
首先给出一个比较抽象的例子:
编号 | 属性1 | 属性2 | 属性3 | 好? |
---|---|---|---|---|
1 | A | a | 1 | 好 |
2 | B | b | 2 | 坏 |
3 | A | c | 1 | 好 |
假设空间(hypothesis space)是所有假设的集合,以表格中的数据来说,属性1有两种可能,属性2有三种可能,属性3有两种可能,再考虑到属性存在任意取值都合适的情况(用通配符 * 表示)和不存在“好”这一假设(用 ∅ \varnothing ∅表示),那么假设空间的大小便为 3*4*3+1=37
在假设空间中搜索的过程中,不断删除与正例不一致的假设和与反例一致的假设,得到了所谓的版本空间(version space),即与训练集一致的“假设集合”
以上述表格举例,由编号1可以得到(A, a, 1),(*, a, 1),(A, *, 1),(A, a, *),(*, *, 1),(*, a, *),(A, *, *),(*, *, *)这些假设成立,再由编号3得到(A, c, 1),(*, c, 1),(A, *, 1),(A, c, *),(*, *, 1),(*, c, *),(A, *, *),(*, *, *)假设成立,取两者交集,得(A, *, 1),(*, *, 1),(A, *, *),(*, *, *)成立,由编号2得(*, *, *)不成立,因此此例的版本空间为(A, *, 1),(*, *, 1),(A, *, *)
不难看出,一般数据越多,能完全拟合数据的假设就越少,因此版本空间越小
任何一个模型都需要也一定具有归纳偏好(inductive bias),即偏好某一种数据分布或者问题,否则将无法产生确定的结果。
根据“没有免费的午餐”定理(NFL定理),无论两个学习算法是怎样实现的,它们的期望性能相同,数学表达式如下:
∑ f E o t e ( L a ∣ X , f ) = ∑ f E o t e ( L b ∣ X , f ) = 2 ∣ X ∣ − 1 ∑ x ∈ X − X P ( x ) ⋅ 1 \sum_{f}E_{ote}(\mathfrak{L}_a|X,f)=\sum_{f}E_{ote}(\mathfrak{L}_b|X,f)=2^{|\mathcal{X}|-1}\sum_{\mathbf{x}\in \mathcal{X}-X}P(\mathbf{x})\cdot1 f∑Eote(La∣X,f)=f∑Eote(Lb∣X,f)=2∣X∣−1x∈X−X∑P(x)⋅1
但是要指出的是,我们在训练一个模型时,并不是想让它同时能完成所有的任务,我们只需要让它完成某一种或者某一类任务即可。
因此NFL定理的意义就是:脱离具体问题谈算法优劣毫无意义,我们要做的就是让算法的偏好与我们想解决的问题更加相配。
误差(error):模型的实际输出与样本真实输出的差异
错误率(error rate): E = a / m E=a/m E=a/m,指m个样本中有a个分类错误(在分类问题中)
精度(accuracy):即正确率,精度=1-错误率
训练误差(training error)/ 经验误差(empirical error):模型在训练集上的误差
泛化误差(generalization error):模型在新样本上的误差
过拟合(overfitting):训练误差小,泛化误差大,即模型学习了过多训练数据的特殊特性
欠拟合(underfitting):训练误差和泛化误差都大,即模型还没学会训练数据的一般特性
首先,测试集(testing set)是从原有数据集中划分出来,用来测试模型的集合,目的是用测试误差(testing error)来近似泛化误差。
选取测试集的原则是不能出现在训练集中。(不能让模型做过一模一样的试卷
下面介绍三种方法从数据集 D D D中产生训练集 S S S与测试集 T T T
留出法(hold-out)将数据集分成了两个互斥的集合,一个作为 S S S,另一个作为 T T T。
使用留出法应该注意两点:
最后,从划分数量上来说,一般划分出2/3~4/5给训练集,其余数据给测试集
交叉验证法(cross validation),又称k折交叉验证(k-fold cross validation),将数据集分成了k个互斥集合,每次选取k-1个子集的并集作为训练集,剩下的一个子集作为测试集,重复k次。
当然,划分成k个子集时也需要考虑分布的一致性,更常见的,可以采取不同的划分来多次进行交叉验证,比如“10次10折交叉验证”,就是用十种不同的划分将原来的数据集划分成十个集合,总计进行了10*10=100次训练与测试。
对于数据量充足的情况,留出法和交叉验证法更加常用,但对于数据量较小的场合,则可以使用自助法(bootstrapping)
自助法:对于一个含有m个样本的数据集 D D D,每次随机从 D D D中复制一个样本到 D ′ D' D′中,重复m次,用 D ′ D' D′作为训练集, D ∖ D ′ {D}\setminus{D'} D∖D′作为测试集
样本在m次采样中始终不被采到的概率是 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1)m,绘制函数图像如下,可以看出当m>3时,不被采到的概率就来到了30%,因此使用自助法,最终会有30%+的数据不出现在训练集中(对m取极限可知函数极限为36.8%)
衡量模型泛化能力的评价标准,即为性能度量(performance measure)
回归任务最常用的度量方式是使用均方误差(mean squared error, MSE):
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(f(\mathbf{x}_i)-y_i)^2 E(f;D)=m1i=1∑m(f(xi)−yi)2
其中数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\{(\mathbf{x}_1,y_1),(\mathbf{x}_2,y_2),...,(\mathbf{x}_m,y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)}, y i y_i yi是 x i \mathbf{x}_i xi的真实标记, f ( x i ) f(\mathbf{x}_i) f(xi)是模型对 x i \mathbf{x}_i xi的预测结果
本章开头已经用通俗的语言介绍过了错误率 E E E与精度 a c c acc acc,这里给出数学定义:
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) 2 a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) 2 = 1 − E ( f ; D ) \begin{aligned} E(f;D)&=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(\mathbf{x}_i)\neq y_i)^2\\ acc(f;D)&=\frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(\mathbf{x}_i)= y_i)^2\\ &=1-E(f;D) \end{aligned} E(f;D)acc(f;D)=m1i=1∑mI(f(xi)=yi)2=m1i=1∑mI(f(xi)=yi)2=1−E(f;D)
考虑分类时的所有结果,可以绘制出下表:
查准率 P P P(precision)与查全率 R R R(recall)的定义为:
P = T P T P + F P R = T P T P + F N \begin{aligned} P=\frac{TP}{TP+FP}\\ R=\frac{TP}{TP+FN} \end{aligned} P=TP+FPTPR=TP+FNTP
从现实意义上来说,查准率 P P P体现预测出的好结果有多少是正确的,查全率 R R R体现真正好的结果中有多少被预测出来了
为了直观体现查准率、查全率与模型的关系,可以绘制P-R图:
从图上可以看出,查准率与查全率是一对比较矛盾的度量,一者升高另一者就会下降。
当某个模型对应的P-R曲线完全包住另一模型时,可以认为该模型优于另一模型(比如上图的A与C),但如果曲线有相交,就不太好判断了,这时常用 F 1 F1 F1度量:
F 1 = 2 × P × R P + R = 2 × T P m + T P − T N F1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{m+TP-TN} F1=P+R2×P×R=m+TP−TN2×TP
因为有时人们对查准率与查全率的偏好不同,这时就常用 F β F_\beta Fβ度量,当 β > 1 \beta>1 β>1时查全率影响更大,当 0 < β < 1 0<\beta<1 0<β<1时查准率影响更大, β = 1 \beta=1 β=1时即为 F 1 F1 F1度量:
F β = ( 1 + β 2 ) × P × R β 2 × P + R F_\beta=\frac{(1+\beta^2)\times P\times R}{\beta^2\times P+R} Fβ=β2×P+R(1+β2)×P×R