西瓜书第一二章

Chap01. 绪论

机器学习是一门致力于研究如何通过计算手段,利用经验来改善系统性能的学科。经验通常以“数据”的形式存在,而机器学习研究的主要内容是从数据中产生“模型”的算法,即“学习算法”。

  • 模型:从数据中学得的结果。
  • 属性空间:用于描述事物表现的特征,形成描述对象的空间。
  • 特征向量:每个示例的属性值组合,作为样本空间的点。

1.1 基本术语

机器学习中的一些关键术语包括:

  • 数据集:包含多个示例的集合,每个示例称为“样本”。
  • 属性:描述对象的特征,如色泽、根蒂、敲声等。
  • 标签(label):用于表示分类结果的值,如“好瓜”或“坏瓜”。
  • 监督学习无监督学习:监督学习使用标记的训练数据,无监督学习则没有标记。

1.2 假设空间

机器学习的过程可以被看作在假设空间中搜索合适的假设。假设空间由属性值和逻辑组合构成,通过训练集数据进行筛选,得到能在新数据上进行有效预测的模型。

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程,即从具体的事实归结出一般性规律;后者则是从一般到特殊的“特化”(specialization)过程,即从基础原理推演出具体状况。

  • 版本空间:与训练数据一致的假设集合。

1.3 归纳偏好

归纳偏好是机器学习算法在假设空间中对某种类型假设的偏好。

归纳偏好可看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式或“价值观”。

常用的归纳偏好原则是奥卡姆剃刀,即“若有多个假设与观察一致,则选最简单的那个”。

归纳偏好对应了学习算法本身所做出的关于“什么样的模型更好”的假设。

1.4 没有免费的午餐定理(No Free Lunch Theorem, NFL)

在所有可能的学习问题上,任何两个学习算法的期望性能都是相同的。换句话说,没有任何学习算法能够在所有问题上都表现得更好,在某些问题上表现出色的算法,必然会在其他问题上表现得较差。

这个定理的核心思想是,如果我们在所有可能的任务上平均评估一个学习算法的表现,那么其结果与随机猜测并无本质区别。因此,机器学习算法必须有某种归纳偏好,针对特定问题来表现优异。如果所有可能的目标函数在问题空间中均匀分布,那么对于任何两个学习算法,它们在所有问题上的平均性能将是相同的。算法能够在某些任务上表现良好,必然依赖于它的归纳偏好与这些任务的特性相符。

Chap 02.模型评估与选择

2.1经验误差与过拟合

通常我们把分类错误的样本数占样本总数的比例称为错误率(error rate),即如果在 m m m个样本中有 a a a个样本分类错误,则错误率 E = a m E = \frac{a}{m} E=ma;相应的, 1 − a m 1 - \frac{a}{m} 1ma称为精度 (accuracy),即 精度 = 1 − 错误率 精度 = 1 - 错误率 精度=1错误率。更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为误差 (error)。学习器在训练集上的误差称为训练误差 (training error)或经验误差 (empirical error),在新样本上的误差称为泛化误差 (generalization error)。显然,我们希望得到泛化误差小的学习器。然而,我们事先并不知道新样本是什么样,实际能做的是努力使经验误差最小化。

在很多情况下,我们可以学得一个经验误差很小、在训练集上表现很好的学习器,例如甚至对所有训练样本都分类正确,即分类错误率为零,分类精度为 100%。但这样的学习器并不一定是我们真正想要的,因为它可能在新样本上表现得很差。

我们实际希望的是,在新样本上表现良好的学习器。为了达到这一目标,应该从训练样本中学出适用于所有潜在样本的普遍规律。当学习器对训练样本学得“太好”时,可能已经将训练样本自身的某些偶然性特征当作了所有潜在样本都具有的特征,从而导致泛化性能下降。这种现象称为过拟合(overfitting)。与过拟合相对的现象是欠拟合(underfitting),即学习器没有很好地学到训练样本的一般性质。

机器学习面临的问题通常是 N P NP NP难甚至更难的,而有效的学习算法必然是在多项式时间内运行完成。如果可以通过最小化经验误差彻底避免过拟合,那么这意味着我们构造性地证明了 P = N P P = NP P=NP。因此,只要相信 P ≠ N P P ≠ NP P=NP,过拟合就不可避免。

2.2 评估方法

在现实任务中往往还会考虑时间开销、存储开销、可解释性等方面的因素,这里暂且只考虑泛化误差。通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此需使用一个“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

2.2.1 留出法 (Hold-Out)

“留出法”直接将数据集划分为两个互斥的集合,其中一个集合作为训练集 S S S,另一个作为测试集 T T T,即 D = S ∪ T D = S \cup T D=ST, S ∩ T = ∅ S \cap T = \emptyset ST=。在 S S S上训练出模型后,用 T T T来评估其测试误差,作为对泛化误差的估计。

以二分类任务为例,假定 D D D包含1000个样本,将其划分为 S S S包含700个样本, T T T包含300个样本,用 S S S进行训练后,如果模型在 T T T上有90个样本分类错误,那么其错误率为 90 300 × 100 % = 30 % \frac{90}{300} \times 100\% = 30\% 30090×100%=30%,相应的,精度为 1 − 30 % = 70 % 1 - 30\% = 70\% 130%=70%

需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。例如通过对 D D D进行分层采样而获得含70%样本的训练集 S S S和含30%样本的测试集 T T T,若 D D D包含500个正例、500个反例,则分层采样得到的 S S S应包含350个正例、350个反例,而 T T T则包含150个正例和150个反例;若 S S S T T T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

另一个需注意的问题是,即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集进行分割。例如在上面的例子中,可以把 D D D中的样本排序,然后把前350个正例放到训练集中,也可以把最后350个正例放到训练集中,这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在实际应用中,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。

2.2.2 交叉验证法 (Cross Validation)

“交叉验证法”先将数据集 D D D划分为 k k k个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ … ∪ D k D = D_1 \cup D_2 \cup \ldots \cup D_k D=D1D2Dk, D i ∩ D j = ∅ D_i \cap D_j = \emptyset DiDj= ( i ≠ j i \neq j i=j),每个子集 D i D_i Di都尽可能保持数据分布的一致性,即从 D D D中通过分层采样得到。然后,每次用 k − 1 k-1 k1个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得 k k k组训练/测试集,从而可进行 k k k次训练和测试,最终返回的是这 k k k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k的取值,为强调这一点,通常把交叉验证法称为“ k k k折交叉验证”( k k k-fold cross validation), k k k最常用的取值是10,此时称为10折交叉验证;其他常用的 k k k值有5、20等。

交叉验证法在评估结果的稳定性和保真性方面通常比留出法要好,特别是当数据集较小时,交叉验证法能够更有效地利用有限的数据资源。然而,交叉验证法也有其缺点,最主要的是计算开销较大,特别是当 k k k较大时,需要训练 k k k个模型,并且每次训练都要使用不同的训练集,这在计算上是昂贵的。此外,交叉验证法的划分方法也会影响评估结果,因此在使用交叉验证法时,通常也需要进行多次随机划分以减小因划分不同而引入的评估偏差。

2.2.3 自助法 (Bootstrap)

自助法是一种统计方法,用于通过自助采样(bootstrap sampling)来估计一个统计量的分布。在机器学习中,自助法可以用来评估模型的泛化误差。具体来说,给定包含 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 ≈ e − 1 ≈ 0.368 (1 - \frac{1}{m})^m \approx e^{-1} \approx 0.368 (1m1)me10.368,即通过自助采样,初始数据集 D D D中约有36.8%的样本未出现在采样数据集 D ∗ D^* D中。于是我们可将 D D D用作训练集, D ∖ D ∗ D \setminus D^* DD用作测试集;这样,实际评估的模型与期望评估的模型都使用了 m m m个训练样本,而我们仍有数据总量约 1 3 \frac{1}{3} 31的、没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”(out-of-bag estimate)。

自助法在数据集较小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。

2.3 性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。

错误率与精度
错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D = \{(x_1, y_1), (x_2, y_2), ..., (x_m, y_m)\} D={(x1,y1),(x2,y2),...,(xm,ym)},错误率定义为:
e r r ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) err(f; D) = \frac{1}{m} \sum_{i=1}^m I(f(x_i) \neq y_i) err(f;D)=m1i=1mI(f(xi)=yi)
精度则定义为:
a c c ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) acc(f; D) = \frac{1}{m} \sum_{i=1}^m I(f(x_i) = y_i) acc(f;D)=m1i=1mI(f(xi)=yi)
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(True Positive, TP)、假正例(False Positive, FP)、真反例(True Negative, TN)、假反例 (False Negative, FN)。查准率 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
F1度量是查准率和查全率的调和平均:
F 1 = 2 × P × R P + R F1 = \frac{2 \times P \times R}{P + R} F1=P+R2×P×R
ROC曲线是研究学习器泛化性能的重要工具。ROC全称为受试者工作特征(Receiver Operating Characteristic) 曲线,纵轴为真正例率 (True Positive Rate, TPR),横轴为假正例率(False Positive Rate, FPR)。基于混淆矩阵中的符号,TPR与FPR定义为:
T P R = T P T P + F N , F P R = F P F P + T N TPR = \frac{TP}{TP + FN}, \quad FPR = \frac{FP}{FP + TN} TPR=TP+FNTP,FPR=FP+TNFP
AUC是ROC曲线下的面积,代表学习器的综合分类性能。

代价敏感错误率与代价曲线

在现实任务中,不同类型的错误可能会有不同的代价。例如,在医疗诊断中,错误地诊断患者为健康人可能比错误地诊断健康人为患者代价更大。为此,可以使用代价矩阵(cost matrix) 来衡量不同错误的代价。二分类问题的代价矩阵如下:
真实类别 预测类别 第0类 第1类 第0类 0 cost 01 第1类 cost 10 0 \begin{array}{c|cc} \text{真实类别\\预测类别} & \text{第0类} & \text{第1类} \\ \hline \text{第0类} & 0 & \text{cost}_{01} \\ \text{第1类} & \text{cost}_{10} & 0 \\ \end{array} 真实类别预测类别0100cost101cost010
我们希望最小化的是总体代价,而非简单的错误率。对于非均等代价下的错误率,可以定义代价敏感错误率
E ( f ; D , c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) ⋅ cost 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) ⋅ cost 10 ) E(f; D, cost) = \frac{1}{m} \left( \sum_{x_i \in D_+} I(f(x_i) \neq y_i) \cdot \text{cost}_{01} + \sum_{x_i \in D_-} I(f(x_i) \neq y_i) \cdot \text{cost}_{10} \right) E(f;D,cost)=m1 xiD+I(f(xi)=yi)cost01+xiDI(f(xi)=yi)cost10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值