ML简介、模型评估与选择

Posted by Leo on May 11, 2019

模型评估与选择

机器学习基本框架

自计算机问世以来,科学家便试图探索计算机究竟能在多大程度上取代人类。很长一段时 间,计算机帮助人类实现人脑无法承担的大规模运算,储存人脑无法储存的海量信息,然 而这些仍离智慧相距甚远。随着计算机科学的逐步发展成熟,人们意识到让计算机拥有智 慧的关键,就在于让机器拥有和大脑一样的学习能力。人工智能和机器学习由此应运而生。

机器学习的对象是某种客观存在的“规律”。这种规律可以非常浅显,

就如同人类学习某种技能需要持续练习一样,机器学习某种规律也需要大量的数据进行训 练。从开始获取数据、训练机器学习模型到最终模型投入应用,通常需要遵循一些固定的流程。主要步骤包括:数据获取、特征提取、数据转换、模型训练、模型选择和模型预测。

  • 数据获取:巧妇难为无米之炊,如果数据的数量不足,或者信噪比过低,那么再精妙的算 法也难以发挥作用。因此,如何获取大量的、高质量的数据,是开发机器学习模型过程中 首先需要考虑的问题。各个领域都有一些标准化的数据库和数据接口可供选择,比如金融 领域的雅虎财经、新浪财经、万得终端等等。随着网络技术的发展,人们开始尝试借助爬 虫技术,从新闻网站、财经论坛、自媒体平台甚至聊天软件中获取感兴趣的舆情信息,数 据的来源日趋多元化。

  • 特征提取:原始数据中有价值的信息往往湮没在噪音中。另外,原始数据由于格式和类型 的限制,可能无法直接用于训练模型。因此需要先从原始数据中提取富有信息量的、可以 放入模型训练的特征,这一步称为特征提取。例如在自然语言识别中,人们借助 Word Embedding 技术,将以文字表示的词汇转换为以数值表示的向量。在图像识别中,人们首 先从原始的图片里提取出三原色、亮度等信息。在多因子选股中,人们从原始的价量数据 中提取出各类因子,也暗含了特征提取的思想。特征提取有一些基本套路,但是更多时候 基于人的经验和探索。优质的特征能够令模型训练的过程事半功倍。

  • 数据转换:现实生活中的数据通常不是完美的。例如数据会存在缺失值,不同特征的取值 范围不同,不同特征之间具有相关性。这些都会影响到机器学习模型的训练速率和准确率。 因此在正式训练之前,需要对数据进行转换。对于包含缺失值的条目,可以直接删去或以 总体均值填充。标准化可以将所有特征限制在相同的范围内。降维能够避免特征之间相关 性的影响,也能避免维数灾难的发生。数据转换这一步看似简单,但往往是机器学习成败 的关键。

  • 模型训练:完成数据预处理后,接下来是机器学习的核心步骤——模型训练。针对不同的 问题,我们需要挑选最合适的机器学习方法。图表 2 展示了常用的机器学习方法。如果数 据中包含特征和标签,希望学习特征和标签之间的对应关系,那么可以采用监督学习的方 法;如果没有标签,希望探索特征自身的规律,那么可以采用非监督学习;如果学习任务 由一系列行动和对应的奖赏组成,那么可以采用强化学习。如果需要预测的标签是分类变 量,比如预测股票上涨还是下跌,那么可以采用分类方法;如果标签是连续的数值变量, 比如预测股票具体涨多少,那么可以采用回归方法。另外,样本和特征的个数,数据本身 的特点,这些都决定了最终选择哪一种机器学习方法。

  • 模型选择:面对一个机器学习问题时,存在众多备选模型,每个模型的参数也存在多种可 能的取值。如何选择最合适的模型和参数?最重要的方法是交互验证,并选择合适的指标 对备选模型做出评价。后面的章节我们将详细阐述,如何通过交互验证将数据分为训练集 和验证集,从而避免欠拟合和过拟合的发生,找到最优的模型。我们也将介绍除了预测误 差和分类正确率之外,还有哪些指标可以用于评价模型的好坏。

  • 模型预测:当确定最优的模型和参数后,最后一步是使用模型对未来做出预测。现实世界 中的规律并非一成不变,当规律随时间发生变化时,就需要用新的数据训练模型,对模型 进行动态调整。

经验误差与过拟合

学习器在训练集上的误差称为“训练误差”(traning error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error).

误差(error):学习器实际预测输出与样本真实输出之间的差异

  • 训练集:训练误差(training error),(经验误差,empirical error)
  • 训练集的补集:泛化误差(generalization error)

我们希望泛化误差小的学习器,即在样本外测试结果跟在样本内测试结果接近

  • 过拟合(overfitting):训练过度使泛化能力下降

  • 欠拟合(underfitting):未能学好训练样本的普遍规律

过拟合是机器学习的关键障碍且不可避免!

  • 模型误差包含了数据误差,
  • 或者说模型信息中包含了噪声。

当学习机器把训练样本学习得“太好时”,很可能把训练样本自身的一些特点当作了所有潜在样本都会具有的一些性质,这样会导致泛化性能下降.这种现象在机器中称为“过拟合”(overfitting).与其相对的是“欠拟合”(underfitting)

学习器泛化评估——实验测试

避免过拟合最重要的方法是进行交互验证。交互验证是指使用不曾在训练中出现过的数据 来进行验证。如果模型在验证时性能和训练时大致相同,那么就可以确信模型真的“学会” 了如何发现数据中的一般规律,而不是“记住”训练样本。这实际上和学生考试的情形类 似,要想考察学生是否掌握了某个知识点,不能使用课堂上讲过的例题,而应当使用相似 的习题。

交互验证的核心是将全部样本划分成两部分,一部分用来训练模型,称为训练集,另外一 部分用来验证模型,称为验证集,随后考察模型在训练集和验证集的表现是否接近。最简 单的划分方法是从总样本中随机选取一定比例(如 15%)的样本作为验证集。但是这种方 法会导致一部分数据从未参与训练,可能降低模型的准确性。

  • 测试集:测试误差(testing error)

  • 训练集𝑆和测试集𝑇组成数据集𝐷。

  • 假设测试样本是从真实分布中采样而得,避免因数据划分引入偏差。

  • 测试集应与训练集互斥。

当我们只有一个包含m个样例的数据集

\[D = \{(x_{1},y_{1}),(x_{2},y_{2}), \cdot\cdot\cdot ,(x_{m},y_{m}) \}\]

可以通过适当的处理,从中产生训练集 S 和测试集 T

留出法

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

需要注意的是,训练集和测试集的划分要尽可能的保持数据分布一致,避免因数据划分过程引入额外的偏差而对最终结果产生影响,所以更适合用保留类别比例的采样方式“分层采样”来进行数据分类.

另一个需要注意的问题是,单次使用留出法并不可靠,故在使用过程中一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果.

但由于训练集S的大小会影响其训练出的模型与D训练出模型的相似度,保真性(fidelity)完全取决于S的大小.这个问题没有完美的解决方案,常见做法是将大约2/3 ~ 4/5的样本用于测试,剩余样本用于测试.

交叉验证法

“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即

\[D=D_{1}\cup D_{2}\cup \cdot\cdot\cdot \cup D_{k}$ , $D_{i} \cap D_{j}=\emptyset (i \neq j)\]

每个子集$D_{i}$都尽可能保持数据分布一致性,即从$D$中通过分层采样得到.然后,每次用$k-1$ 个子集的并集作为训练集,余下的作为测试集;这样就可以获得$k$组训练/测试集,从而可进行$k$次训练和测试,最终返回的是这$k$个测试结果的均值.

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于$k$的取值,所以通常交叉验证法也称为“$k$折交叉验证”($k$-fold cross validation).$k$的最常用取值为10,此时称为10折交叉验证.下图给出了5折交叉验证的示意图.

</center>假定数据集D中包含m个样本,则得到了交叉验证法的特例:留一法(Leave-One-Out,简称LOO).显然留一法不受随机样本划分方式的影响.留一法使用的训练集与初始数据集相比只少了一个样本,这使得在绝大多数情况下,留一法被实际评估的模型与期望评估的用D训练出的模型很相似.但是当数据集比较大时,训练m个模型的开销可能是难以忍受的.

自助法

“自助法”(bootstrapping)直接以自助采样法(booststrap sampling)为基础.在给定包含m个样本的数据集D,每次随机采样,将其拷贝放入D’,重复m次.显然,D中有一部分样本会在D’中多次出现,而另一部分样本不出现,样本在m次采样中始终不被采到的概率是$(1-\frac{1}{m} )^{m}$,取极限得到

\[\lim_{m \to \infty }(1-\frac{1}{m} )^{m} \to \frac{1}{e}\approx 0.368\]

即通过自助采样有36.8%的样本未出现在采样集D’中,于是可以用D’作为训练集,D/D’作为测试集.这样的测试结果也称为“包外估计”(out-of-bag estimate).

调参与最终模型

大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别.因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”( parameter tuning).

学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的.常用的做法,是对每个参数选定一个范围和变化步长,例如在,0.范围内以0.065为步长,则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值.显然,这样选定的参数值往往不是“最佳”值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行.事实上可以简单估算一下:假定算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/測试集就有53=125个模型需考察;很多强大的学习算法有大量参数需设定,这将导致极大的调参工程量,以至于在不少应用任务中参数调得好不好往往对最终模型性能有关键性影响.

给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型.因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型.这个模型在训练过程中使用了所有m个样本,这才是最终模型 另外,需注意的是,我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”( validation set).例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参

参数调节(parameter tuning)

  • 算法参数 → 人工设定候选值
  • 模型参数 → 通过学习产生候选模型

  • 训练集→训练估计模型
  • 验证集→模型参数调整
  • 测试集→估计泛化能力)┤

  • 学习算法和参数配置确定后要用整个数据集重新训练模型

模型评价

如何评价一个模型的好坏?对于回归问题,我们可以采用上一部分介绍的均方误差作为评 价指标,误差越小代表模型越好。对于分类问题,我们可以采用分类正确率进行评价,即 测试集中多少比例的样本归入了正确的类别,正确率越高代表模型越好。除了误差和正确 率之外,还有一些指标也经常用于模型评价

  • False Positive (FP),样本的真实类别是负类,但是模型将其预测成为正类。

  • True Negative (TN),样本的真实类别是负类,并且模型将其预测成为负类。

  • False Negative (FN),样本的真实类别是正类,但是模型将其预测成为负类。

  • True Positive (TP),样本的真实类别是正类,并且模型预测的结果也是正类。

  • Accuracy : 模型预测正确的个数 占样本的总个数的比例 \(𝐴𝑐𝑐𝑢𝑟𝑎𝑐𝑦=\frac{𝑇𝑃+𝑇𝑁}{𝑇𝑃+𝐹𝑁+𝐹𝑃+𝑇𝑁}\)

  • Recall : 模型预测为正类的样本的数量,占总的正类样本数量的比例。 \(Recall =\frac{𝑇𝑃}{𝑇𝑃+𝐹𝑁}\)

  • Precision: 在模型预测为正类的样本中,真正为正类的样本所占的比例 \(Precision=\frac{𝑇𝑃}{𝑇𝑃+𝐹𝑃}\)

  • F1 Score: 其中P和R分别为 precision 和 recall \(F1 Score=\frac{P*R}{2(P+R)}\)

假设有一种医疗诊断技术可以对某种疾病做早期筛查,如何评价这种技术是否可靠?每个 人的状态分为两种:阳性(患病)和阴性(健康);诊断的结果也为分两种:阳性(患病) 和阴性(健康)。一个人的真实患病情况与诊断结果共有 4 种可能的组合,即(病人,诊 断)=(阳性,阳性)/(阳性,阴性)/(阴性,阳性)/(阴性,阴性),分别称为命中、 漏报、虚报和正确拒绝

展示了常用评价指标的定义。我们常用的正确率(Accuracy)是“正确诊断出一 个人是否患病”的概率。除此以外,评价指标还包括:命中率(又称召回率,Recall)、精 确率(Precision)和虚报率。命中率是“患病的人被诊断出患病”的概率,精确率是“诊 断出患病且此人确实患病”的概率,虚报率是“没有患病的人被诊断出患病”的概率。

对于发病率较高的疾病,传统的正确率可以较好地衡量诊断技术的好坏。然而对于罕见病, 正确率的意义就不大了。假设一种罕见病发病率是 1‰,如果某种诊断技术给所有人的诊 断都是阴性,那么它的正确率高达 99.9%,但显然这一诊断没有任何意义。此时应该以命 中率为评价指标,该诊断技术的命中率为 0%,显然是不合格的。

某些时候,数据中不同类别的样本数目不均衡,例如当我们开发机器学习模型预测公司是 否可能发生信用违约,或者预测股票是否会被 ST 时,违约公司或 ST 股票的数量所占比 例较小,但是筛查出这些特殊分类情形又尤为重要。此时我们会在使用正确率的同时也参 考命中率和精确率。除了上述这些指标外,人们还会借助 ROC 曲线和曲线下面积 AUC 评价模型好坏。

ROC与AUC

受试者工作特征曲线(Receiver Operating Characteristic)

横轴——假正例率:$FPR = \frac{FP}{TN+FP}$

纵轴——真正利率:$FPR = \frac{TP}{TP+FN}$

AUC(Area Under ROC curve)

\[AUC = \frac {1}{2} \Sigma_{i = 1}^{m-1}(x_{i+1} -x_i) (y_i +y_{i+1})\]

AUC反应样本预测的排序质量

\[AUC=1−ℓ_{𝑟𝑎𝑛k} (排序损失)\]

ROC曲线是真正例率和假正例率的二维曲线,AUC是其面积,可以通过AUC面积比较来比较模型的性能相对好坏

ROC的思想是对所有分类阈值可能的取值进行 遍历,每一个分类阈值计算对应的虚报率和召回率,以虚报率为横轴,召回率为纵轴,将所有点顺次连接可以得到一条曲线。

当分类阈值取最小值时,对应于 ROC 曲线右上角的点。此时分类标准最为宽松,所有样 本均标记成正例,召回率和虚报率都等于 1。当分类阈值取最大值时,对应于 ROC 曲线 左下角的点。此时分类标准最为严格,所有样本均标记成负例,召回率和虚报率都等于 0。 真正反映分类器性能的点在ROC曲线的中段。理想的情形是当分类阈值取一个合适的值时,召回率尽可能高,而虚报率尽可能低,ROC 曲线靠近左上角。反之,对于一个随机 反应的分类器,召回率和虚报率同步提升或降低,此时 ROC 曲线与对角线重合。

我们将 ROC 曲线的形态特征总结为一个指标——ROC 曲线下覆盖的总面积 AUC,AUC 的值在 0.5 到 1 之间。分类器性能越好,ROC 曲线越接近左上角,AUC 的值接近 1;分 类器性能越差,ROC 曲线越接近对角线,AUC 的值接近 0.5。总的来说,AUC 避免了分类阈值对评价指标的干扰,适用于侧重某一类别的样本,或者两类样本数量不均等的情形, 比传统的正确率等指标具有更强的普适性。

偏差与方差

泛化误差可分解为偏差、方差和噪声之和。

均方误差 = 方差+ 偏差

偏差度量了学习算法的偏离程度, \(E_D[(f(X;D) - E_D[f(X;D)]]^2\)

方差度量了数据扰动所造成的影响, \(( E_D[f(X;D)]-y)^2\)

噪声刻画了学习问题本身的难度, \(E_D[(y_D-y)^2 ]\)

小的方差代表射手射得稳,小的偏差代表射手瞄得准。

</center>

本文采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-ND 4.0)进行许可,转载请注明出处,请勿用于任何商业用途采用。

☛决定关注我了吗☚