DataWhale 吃瓜教程第一次打卡:第一章、第二章
这是DataWhale吃瓜教程打卡第一次打卡任务——阅读学习西瓜书前两章节的部分内容,由于笔者本身有一定的机器学习知识储备,参加打卡活动只是为了查漏补缺,因此此文章不求将西瓜书内容进行全面总结,而是用来记录自己的查漏补缺的过程,笔记内容皆为自己平时没有学到的知识或者自己认为重要值得再提的知识。
注:本文章主要内容皆来自于周志华老师的西瓜书——《机器学习》以及DataWhale团队发布的南瓜书——《机器学习公式详解》,部分内容是自己对于相关知识的体悟但也不是无根之水(还是来源上述两本书🤣)。
1. 第一章:绪论t
机器学习形式化定义(Mitchell,1997):假设用 P P P来评估计算机程序在某任务类 T T T上的性能,若一个程序通过利用经验 E E E在 T T T中任务上获得了性能改善,则我们就说关于 T T T和 P P P,该程序对 E E E进行了学习。
以传统的监督学习为例:
- E E E:数据集可以视为机器学习所利用的经验。
- P P P:损失函数可以衡量机器学习模型在数据集上的性能,有监督机器学习模型的优化就是基于根据数据集样本计算出的损失函数开始的。
- T T T:机器学习模型执行的具体任务,比如分类或者回归任务。
2. 第二章:模型评估与选择
2.1 评估方法
在训练机器学习模型时,需要将数据集进行合理地划分为训练集 S S S和测试集 T T T,分别用于模型的训练与评估,常见的划分以及评估方法如下:
2.1.1 留出法
留出法(hold-out)直接将数据集 D D D划分为两个互斥的集合,分别为训练集 S S S和测试集 T T T,即: D = S ∪ T D=S\cup T D=S∪T, S ∩ T = ∅ S\cap T=\varnothing S∩T=∅,一般留出法需要注意以下三点:
- 分层采样(stratified sampling),即尽量保持训练集与测试集中不同种类标签的比例相同,如果两个集合中的标签比例不同,则误差估计将由于训练集与测试集数据分布的差异而产生偏差。
- 使用留出法时,需要进行多次的随机划分,在此基础上多次进行试验,将所有的实验结果取平均值,以此来避免单次留出法所面对的估计不稳定的问题。
- 划分数据集时,训练集数据量不宜过多也不宜过少,训练集样本数量一般占总样本数量的 2 3 ∼ 4 5 \frac{2}{3}\sim\frac{4}{5} 32∼54。
2.1.2 交叉验证法
交叉验证法(cross validation)先将数据集 D D D划分为 k k k个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ D k D=D_1\cup D_2\cup...\cup D_k D=D1∪D2∪...∪Dk, D i ∩ D j = ∅ ( i ≠ j ) D_i\cap D_j =\varnothing (i\neq j) Di∩Dj=∅(i=j)。每次训练用 k − 1 k-1 k−1个子集的并集作训练集,剩下的那个自己作测试集,一共进行 k k k次实验再将评估结果取平均值。交叉验证法也有以下几点需要注意:
- 交叉验证法中 k k k的取值对评估结果的稳定性和保真性有较大影响,为了强调这一点,通常称交叉验证法为“ k k k-折交叉验证法”(k-flod cross validation)。一般取 k = 10 , 5 , 20 k=10, 5, 20 k=10,5,20。
- 交叉验证法仍然需要通过分层采样划分数据集
- 交叉验证法的特殊形式是“留一法”,即每次只使用一个样本作为测试数据。绝大多数情况下,留一法中被实际评估的模型与期望评估的用数据集 D D D训练出的模型比较相似。因此常认为留一法结果比较准确。但是当样本量过大时,留一法显然不现实。
2.1.3 自主法
我们希望评估的是使用完整数据集 D D D训练出的模型的性能,但是留出法和交叉验证法(留一法不在此范围)会导致训练数据量小于初始数据量,这会引入一些因训练样本规模不同而导致的估计偏差。设计自助法(bootstrapping)的目的就是为了实现减小训练样本规模不同造成的影响同时还能比较高效地进行实验评估(留一法虽然比较精确,但是计算复杂度过高)。
给定包含
m
m
m个样本的数据集
D
D
D,我们对他进行采样生成数据集
D
′
D'
D′,每从
D
D
D中抽取一个样本,就将其拷贝到数据集
D
′
D'
D′中,再将该样本放回到
D
D
D中。重复上述过程
m
m
m次,我们就得到了包含
m
m
m个样本的数据集
D
′
D'
D′。显然,
D
D
D中有一部分样本在
D
′
D'
D′中会重复出现,而另一部分则不会出现。做一个简单的估计,样本在
m
m
m次采样中始终不被采到的概率是
(
1
−
1
m
)
m
(1-\frac{1}{m})^m
(1−m1)m,取极限后得到:
lim
m
→
∞
(
1
−
1
m
)
m
=
1
e
≈
0.368
\lim_{m\to\infty}\big(1-\frac{1}{m}\big)^m = \frac{1}{e}\approx 0.368
m→∞lim(1−m1)m=e1≈0.368
通过自主采样,我们会得到样本数量为
m
m
m的训练集
D
′
D'
D′,用集合
D
/
D
′
D/D'
D/D′作测试集。这种情况下,实际评估的模型与期望评估的模型都使用
m
m
m个样本训练,然而我们仍有大约
1
3
\frac{1}{3}
31的样本未参与训练而用于测试。这样的测试结果亦称包外估计(out-of-bag estimate)。使用自助法需注意以下三点:
- 自助法在数据集很小,难以有效划分训练/测试集时很有用。
- 自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。
- 自助法产生的数据集改变了初始数据集分布,这回引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
2.1.4 调参与最终模型
在实际训练中,我们通常将学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型的评估与选择中用于评估测试的数据集称为验证集(validation set)。
2.2 性能度量
2.2.1 查准率(precision)与查全率(recall)
针对二分类问题,分类器的准确率往往不能全面反应模型性能,尤其是在样本标签分布不均衡时。这时就要考虑分类器的另外两个指标:查准率(precision)和查全率(recall)。
预测为正例 | 预测为负例 | |
---|---|---|
实际为正例 | TP(真正例) | FN(假负例) |
实际为负例 | FP(假正例) | TN(真负例) |
这查准率
P
P
P与查全率
R
R
R的定义如下:
P
=
T
P
T
P
+
F
P
,
R
=
T
P
T
P
+
F
N
P=\frac{TP}{TP+FP},\quad R=\frac{TP}{TP+FN}
P=TP+FPTP,R=TP+FNTP
需要注意的是,查准率与查全率在一般情况下是相互矛盾的,很少有模型可以两个指标都很高,因此常用
F
1
F_1
F1值(查全率与查准率的调和平均数)综合考虑这两个值来衡量模型性能:
F
1
=
2
P
R
P
+
R
F_1 = \frac{2PR}{P+R}
F1=P+R2PR
在一些实际问题中,可能会要求模型更注重查全率或者查准率,这时需要引入更灵活的
F
1
F_1
F1值:
F
1
=
(
1
+
β
2
)
P
R
β
2
P
+
R
F_1=\frac{(1+\beta^2)PR}{\beta^2P+R}
F1=β2P+R(1+β2)PR
其中
β
>
0
\beta>0
β>0决定
F
1
F_1
F1更注重查全率还是查准率。、
- 当 β = 1 \beta=1 β=1, F 1 F_1 F1退化成普通定义的 F 1 F_1 F1。
- 当 β > 1 \beta>1 β>1时,查全率影响更大。
- 当 0 < β < 1 0<\beta<1 0<β<1时,查准率影响更大。
在多分类问题中,有两种不同的 F 1 F_1 F1定义,分别为Macro- F 1 F_1 F1和Micro- F 1 F_1 F1。
2.2.1.1 Macro- F 1 F_1 F1
第
i
i
i类的查准率与查全率可以表示为:
P
i
=
T
P
i
T
P
i
+
F
P
i
,
R
i
=
T
P
i
T
P
i
+
F
N
i
P_i=\frac{TP_i}{TP_i+FP_i},\quad R_i=\frac{TP_i}{TP_i+FN_i}
Pi=TPi+FPiTPi,Ri=TPi+FNiTPi
对模型在所有类别上的
P
i
P_i
Pi和
R
i
R_i
Ri求平均值,即可得到
P
M
a
c
r
o
P_{Macro}
PMacro与
R
M
a
c
r
o
R_{Macro}
RMacro,Macro-
F
1
F_1
F1即为
P
M
a
c
r
o
P_{Macro}
PMacro与
R
M
a
c
r
o
R_{Macro}
RMacro的调和平均值:
M
a
c
r
o
−
F
1
=
2
P
M
a
c
r
o
R
M
a
c
r
o
P
M
a
c
r
o
+
R
M
a
c
r
o
Macro-F_1=\frac{2P_{Macro}R_{Macro}}{P_{Macro}+R_{Macro}}
Macro−F1=PMacro+RMacro2PMacroRMacro
2.2.1.2 Micro- F 1 F_1 F1
先计算所有类别总的查准率
P
M
i
c
r
o
P_{Micro}
PMicro和查全率
R
M
i
c
r
o
R_{Micro}
RMicro:
P
M
i
c
r
o
=
∑
i
=
1
n
T
P
i
∑
i
=
1
n
(
T
P
i
+
F
P
i
)
R
M
i
c
r
o
=
∑
i
=
1
n
T
P
i
∑
i
=
1
n
(
T
P
i
+
F
N
i
)
P_{Micro}=\frac{\sum^n_{i=1}TP_i}{\sum^n_{i=1}(TP_i+FP_i)} \quad R_{Micro}=\frac{\sum^n_{i=1}TP_i}{\sum^n_{i=1}(TP_i+FN_i)}
PMicro=∑i=1n(TPi+FPi)∑i=1nTPiRMicro=∑i=1n(TPi+FNi)∑i=1nTPi
然后计算Micro-
F
1
F_1
F1:
M
i
c
r
o
−
F
1
=
2
P
M
i
c
r
o
R
M
i
c
r
o
P
M
i
c
r
o
+
R
M
i
c
r
o
Micro-F_1 = \frac{2P_{Micro}R_{Micro}}{P_{Micro}+R_{Micro}}
Micro−F1=PMicro+RMicro2PMicroRMicro
总的来说,Macro-
F
1
F_1
F1是先计算模型在数据集中各个类别上的性能在汇总,Micro-
F
1
F_1
F1是先汇总模型在数据集各个类别上的表现,再汇总成性能。