机器学习西瓜书&南瓜书 绪论&模型评估与选择
绪论
基本概念
计算机科学是研究关于“算法”的学问,机器学习是研究关于“学习算法”的学问,在计算机上从数据中产生“模型”的算法。
数据集:对应数据的集合。
示例(instance):数据集中的每条记录都成为实例或样本(sample),如果把示例中的每个属性都是单独的左边,可以把一个示例称为一个特征向量(feature vector)
属性(attribute):事件或对象在某方便的表现或性质,也称特征(feature)
属性值(attribute value):属性上的取值
属性空间(attribute space):属性张成的空间,也称样本空间、输入空间
学习(learning):从数据中学得模型的过程,也称训练(training)
训练数据(training data),训练样本(training sample),训练集(training set)
假设(hypothesis):学得模型对应了关于数据的某种潜在的规律。
真相或真实(ground-truth):潜在规律本身。
模型(model):也叫学习器(learner)
分类(classification):预测的值是离散值
回归(regression):预测的值是连续值
假设空间
归纳induction:特殊到一般的泛化(generalization)过程
演绎deduction:一般到特殊的特化(specialization)过程
假设空间:所有假设组成的空间
归纳偏好inductive bias:任何一个有效的机器学习算法必有其归纳偏好,因为可能出现假设空间等效的假设
奥卡姆剃刀:若有多个假设与观察一致,则选最简单的那个
没有免费的午餐定理No Free Lunch Theorem:要讨论算法的相对优劣,必须要针对具体的学习问题。0
模型评估与选择
概念
错误率error rate:错误分类样本 / 总样本数
精度accuracy:1 - 错误率
误差error:包括训练误差training error / 经验误差 empirical error和泛化误差 generalization error
过拟合overfitting:在训练样本中表现良好,导致泛化能力下降,只能缓解,不能避免
欠拟合underfitting:与过拟合相对
评估方法
使用测试集来测试学习器对新样本的判别能力,然后以测试集上的”测试误差“作为泛化误差的近似。通常假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意,测试机应尽可能与训练集互斥。
通常情况下,只有一个包含m个样例的数据集D,通过对D进行适当的处理,从中产生训练集S和测试集T。
1.留出法
直接将数据集D划分为两个互斥的集合,即 D = S ∪ T , S ∩ T = ∅ D = S \cup T, S \cap T = \varnothing D=S∪T,S∩T=∅
需要注意两个问题:
- 训练/测试集划分尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,通常使用分层采样
- 一般要采用若干次随即划分,重复进行实验评估后取平均值作为留出法的评估结果。
他们的比例通常是2 / 3 - 4 / 5 用于训练,剩余的用于测试。
2.交叉验证法
先将数据集D划分为k个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ . . . ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D = D_1 \cup D_2 \cup ... \cup D_k, D_i \cap D_j = \varnothing (i \ne j) D=D1∪D2∪...∪Dk,Di∩Dj=∅(i=j)
每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到,然后每次用k-1个自己的并集作为训练集,余下的子集作为测试集,这样就可获得k组训练/测试集,从而进行k次训练和测试,最终返回的k个测试结果的均值。
显然,交叉验证法评估结果的稳定性和保真性很大程序取决于k的取值,通常把交叉验证法称为”k折交叉验证“,k常用的取值是10、5、20等。
与留出法相似,将数据集D划分危k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,k折交叉验证通常要随即使用不同的划分重复p次,最终的评估结果是p次k折交叉验证结果的均值。
假设数据集D包含m个样本,若令k = m,则得到交叉验证法的一个特例:留一法(Leave-One-Out),通常与实际评估的模型很相似,因此认为评估结果比较准确。
3.自助法
可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计,以自助采样法(bootstrap sampling)为基础。
给定m个样本的数据集D,对它进行采样产生数据集D’:每次随即从D中挑选一个样本,将其拷贝到D’,然后再将样本放回初始数据集D中,重复m次后,得到了包含m个样本的数据集D’
可以做个简单的估计,样本在m次采样中始终不被采到的概率是
(
1
−
1
m
)
m
(1 - \frac{1}{m})^m
(1−m1)m,取极限得到:
lim
n
→
∞
(
1
−
1
m
)
m
=
1
e
≈
0.368
\lim_{n \to \infty}(1 - \frac{1}{m})^m = \frac{1}{e} \approx 0.368
n→∞lim(1−m1)m=e1≈0.368
于是可以将D’用作训练集,D\D’用作测试集,这样,实际评估的模型与期望评估的模型都是用m个训练样本,而仍有数据量约1/3的没在训练集出现的样本用于测试,这样的测试结果称为”包外估计“(out-of-bag estimate)。
该方法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集产生多个不同的训练集,对集成学习等方法有很大的好处。但会引入估计偏差,因此在初始数据量足够时,留出法和交叉验证法更常用一些。
4.调参与最终模型
大多数学习算法都有参数需要设定,参数配置不同,学得模型的性能往往有显著差别。因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的”参数调节“或简称”调参“(parameter tuning)。
通常把学得模型在实际使用中遇到的数据成为测试数据,在模型评估与选择中用于评估测试的数据称为验证集validation set。
性能度量
1.预测任务中的性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评估标准,这就是性能度量(performance measure)。
性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这就意味着模型的”好坏“都是相对的,它取决于算法、数据和任务需求。
常用的性能度量是均方误差(mean squared error):
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(x_i) - y_i)^2
E(f;D)=m1i=1∑m(f(xi)−yi)2
更一般的,对于数据分布D和概率密度函数p(),均方误差可描述为:
E
(
f
;
D
)
=
∫
x
∼
D
(
f
(
x
)
−
y
)
2
p
(
x
)
d
x
E(f; D) = \int_{x\sim D}(f(x)-y)^2p(x)dx
E(f;D)=∫x∼D(f(x)−y)2p(x)dx
2.分类任务中的性能度量
错误率:
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
≠
y
i
)
E(f; D) = \frac{1}{m}\sum_{i=1}^m\mathbb{I}(f(x_i)\ne y_i)
E(f;D)=m1i=1∑mI(f(xi)=yi)
精度:
a
c
c
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
=
y
i
)
=
1
−
E
(
f
;
D
)
acc(f; D) = \frac{1}{m}\sum{i = 1}^m\mathbb{I}(f(x_i) = y_i) \\ = 1 - E(f; D)
acc(f;D)=m1∑i=1mI(f(xi)=yi)=1−E(f;D)
更一般的,针对数据分布D和概率密度函数p,错误率与精度可分别描述为:
E
(
f
;
D
)
=
∫
x
∼
D
I
(
f
(
x
)
≠
y
)
p
(
x
)
d
x
a
c
c
(
f
;
D
)
=
∫
x
∼
D
I
(
f
(
x
)
=
y
)
p
(
x
)
d
x
=
1
−
E
(
f
;
D
)
E(f; D) = \int_{x\sim D}\mathbb{I}(f(x)\ne y)p(x)dx \\ acc(f; D) = \int_{x\sim D}\mathbb{I}(f(x)= y)p(x)dx \\ = 1 - E(f; D)
E(f;D)=∫x∼DI(f(x)=y)p(x)dxacc(f;D)=∫x∼DI(f(x)=y)p(x)dx=1−E(f;D)
3.查准率、查全率与F1
对于二分类问题,可将样例根据真是类别与学习器预测类别的组合划分为真正例true positive、假正例false positive、真反例true negative和假反例false negative,以下用TP、FP、TN、FN表示。
查
准
率
P
=
T
P
T
P
+
F
P
查
全
率
R
=
T
P
T
P
+
F
N
查准率 P = \frac{TP}{TP + FP} \\ 查全率 R = \frac{TP}{TP + FN}
查准率P=TP+FPTP查全率R=TP+FNTP
以查全率为横轴、查准率为纵轴,得到了P-R曲线,若某种机器学习算法的P-R曲线被另一种包住,则被包住的机器学习算法性能要差一些。
F
1
=
2
∗
P
∗
R
P
+
R
=
2
∗
T
P
样
例
总
数
+
T
P
−
T
N
F1 = \frac{2 * P * R}{P + R} \\ = \frac{2 * TP}{样例总数 + TP - TN}
F1=P+R2∗P∗R=样例总数+TP−TN2∗TP
F1度量的一般形式
F
β
F_\beta
Fβ,能表达出对查准率/查全率的不同偏好,其中
β
>
0
\beta > 0
β>0度量了查全率对查准率的相对重要性,如果
β
=
1
\beta = 1
β=1退化为标准的F1,
β
>
1
\beta > 1
β>1表示查全率更大影响,
β
<
1
\beta < 1
β<1表示查准率更大影响。
当有多个二分类混淆矩阵,如进行多次训练/测试,每次得到一个混淆矩阵,希望能够在n个二分类混淆矩阵上综合考察查准率和查全率,有两种方法。
- 宏查准率、宏查全率、宏F1
m a c r o − P = 1 n ∑ i = 1 n P i m a c r o − R = 1 n ∑ i = 1 n R i m a c r o − F 1 = 2 ∗ m a c r o − P ∗ m a c r o − R m a c r o − P + m a c r o − R macro-P = \frac{1}{n}\sum_{i=1}^nP_i \\ macro-R = \frac{1}{n}\sum_{i=1}^nR_i \\ macro-F1 = \frac{2*macro-P*macro-R}{macro-P+macro-R} macro−P=n1i=1∑nPimacro−R=n1i=1∑nRimacro−F1=macro−P+macro−R2∗macro−P∗macro−R
- 微查准率、微查全率、微F1
得到TP、FP、TN、FN的平均值,然后基于平均值计算结果
m
i
c
r
o
−
P
=
T
P
ˉ
T
P
ˉ
+
F
P
ˉ
m
i
c
r
o
−
R
=
T
P
ˉ
T
P
ˉ
+
F
N
ˉ
m
i
c
r
o
−
F
1
=
2
∗
m
i
c
r
o
−
P
∗
m
i
c
r
o
−
R
m
i
c
r
o
−
P
+
m
i
c
r
o
−
R
micro-P = \frac{\bar{TP}}{\bar{TP} + \bar{FP}} \\ micro-R = \frac{\bar{TP}}{\bar{TP} + \bar{FN}} \\ micro-F1 = \frac{2*micro-P*micro-R}{micro-P+micro-R}
micro−P=TPˉ+FPˉTPˉmicro−R=TPˉ+FNˉTPˉmicro−F1=micro−P+micro−R2∗micro−P∗micro−R