当前位置: 首页 > 科技观察

机器学习模型训练全过程!

时间:2023-03-21 15:58:28 科技观察

周末在家无聊逛了一下github,发现了一个很有意思的开源项目。作者用手绘的方式讲解了机器学习模型构建的全过程,逻辑清晰,形象生动。同时,作者还对几张图片进行了详细的解释。学习之后收获颇多,于是将它们翻译出来和大家一起学习。地址:https://github.com/dataprofessor/infographic全文如下:感觉学习数据科学很枯燥,那么如何让学习数据科学变得有趣又简单呢?带着这个目标,我开始在我的iPad上写下构建机器学习模型所需的过程。经过这几天的努力,上图就是我的成果,内容已经发布到GitHub上了。1.数据集数据集是您构建机器学习模型之旅的起点。简单来说,数据集本质上是一个M×N矩阵,其中M代表列(特征),N代表行(样本)。列可以分解为X和Y。首先,X是特征、自变量、输入变量等几个相似术语的同义词。其次,Y也是几个术语的同义词,即类标签、因变量和输出变量。图1.数据集的卡通插图。需要注意的是,可用于监督学习(可进行回归或分类)的数据集将同时包含X和Y,而可用于无监督学习的数据集将仅包含X。此外,如果Y包含定量值,则数据集(由X和Y组成)可用于回归任务,而如果Y包含定性值,则数据集(由X和Y组成)可用于分类任务。2.探索性数据分析(EDA)执行探索性数据分析(EDA)以获得对数据的初步了解。在一个典型的数据科学项目中,我要做的第一件事就是通过执行EDA来“盯着数据”,以便更好地理解数据。我通常使用的前三种EDA方法包括:描述性统计:均值、中值、众数、标准差。数据可视化:热图(区分特征的内在相关性)、箱线图(可视化群体差异)、散点图(可视化特征之间的相关性)、主成分分析(可视化数据集中呈现的聚类分布)等。数据整形:对数据进行透视、分组、过滤等。图2.NBA球员统计数据的箱形图示例图3.NBA球员统计数据的相关热图示例图4.NBA球员统计数据的直方图示例图5.NBA球员统计数据的散点图示例3。数据预测处理数据预处理(也称为数据清洗、数据整理或数据处理)是指对数据进行各种检查和审查以纠正缺失值、拼写错误、规范化/标准化值以使其具有可比性、问题的过程转换数据(例如日志转换)等。“垃圾输入,垃圾输出”。正如上面介绍所说,数据的质量会对生成的模型质量产生很大的影响。因此,为了获得最高的模型质量,应该在数据预处理阶段花费大量的精力。一般来说,数据预处理很容易占到数据科学项目时间的80%,而实际的模型构建阶段和后续的模型分析只占剩下的20%。4.数据分割4.1训练-测试集分割在机器学习模型的开发过程中,希望经过训练的模型能够在新的、未见过的数据上表现良好。为了模拟新的、看不见的数据,对可用数据执行数据拆分,从而将其分为两部分(有时称为训练测试拆分)。特别地,第一部分是用作训练集的较大数据子集(例如原始数据的80%),第二部分通常是用作测试集的较小子集(剩余的20%)数据)。应该注意的是,这种数据拆分只进行一次。接下来,使用训练集构建预测模型,然后将这个训练好的模型应用到测试集(即,作为新的、未见过的数据)进行预测。根据模型在测试集上的表现选择最佳模型。为了得到最好的模型,还可以进行超参数优化。图6训练-测试集分割示意图4.2训练-验证-测试集分割另一种常见的数据分割方法是将数据分为三部分。(1)训练集,(2)验证集和(3)测试集。与上面解释的类似,训练集用于构建预测模型,同时评估验证集,可以根据预测进行预测,可以执行模型调整(例如超参数优化),并且性能最好的模型可以根据验证集的结果进行选择。正如我们所看到的,类似于我们上面在测试集上所做的,这里我们在验证集上做同样的事情。请注意,测试集不参与任何模型构建和准备。因此,测试集可以真正充当新的未知数据。Google的《机器学习速成班》更深入地处理了这个主题。图7训练-验证-测试集分割示意图4.3交叉验证为了最经济地利用现有数据,通常采用N折交叉验证(CV)将数据集分割成N折(也就是说,通常是5倍或10倍CV)。在这样的N-foldCV中,保留其中一个折叠作为测试数据,而其余的折叠用作构建模型的训练数据。例如,在5折CV中,省略1折作为测试数据,而将其余4折合并为构建模型的训练数据。然后,将训练好的模型应用于上述遗漏的折叠(即测试数据)。重复此过程,直到所有折叠都有机会被留作测试数据。因此,我们将构建5个模型(即5个权衡中的每一个都被留作测试集),其中5个模型中的每一个都包含相关的性能指标(我们将讨论)。最后,根据5个模型的平均性能计算指标(指标)值。图8.交叉验证示意图在N等于数据样本数的情况下,我们称这种留一法交叉验证。在这种类型的CV中,每个数据样本代表一个折叠。例如,如果N等于30,则有30次折叠(每次有1个样本)。在任何其他N-foldCV中,留出1个角点作为测试集,而其余29个角点用于构建模型。接下来,应用已建立的模型对预留的褶皱进行预测。和以前一样,这个过程重复了30次;计算30个模型的平均性能,并用作CV性能指标。5.模型构建现在到了有趣的部分,我们终于可以使用精心准备的数据来构建模型了。根据目标变量(通常称为Y变量)的数据类型(定性或定量),我们要构建分类(如果Y是定性的)或回归(如果Y是定量的)模型。5.1学习算法机器学习算法可大致分为以下三种类型之一:监督学习:是一种机器学习任务,它在输入X和输出Y变量之间建立数学(映射)关系。这样的X、Y对构成了用于构建模型的标记数据,以便学习如何根据输入预测输出。无监督学习:是一种仅利用输入X变量的机器学习任务。这个X变量是未标记的数据,学习算法在建模时使用数据的固有结构。强化学习:是一种决定下一步行动的机器学习任务,它通过反复试验来学习,试图最大化奖励。5.2参数调整超参数本质上是机器学习算法的参数,直接影响学习过程和预测性能。由于没有可以普遍应用于所有数据集的“一刀切”超参数设置,因此需要超参数优化(也称为超参数调整或模型调整)。我们以随机森林为例。使用randomForestR包时,通常会优化两个常见的超参数,包括mtry和ntree参数(这对应于scikit-learnPython库中的RandomForestClassifier()和RandomForestRegressor()函数中的nestimators和maxfeatures)。mtry(maxfeatures)表示在每次拆分时随机抽取为候选变量的数量,而ntree(nestimators)表示要生长的树的数量。另一种流行的机器学习算法是支持向量机。需要优化的超参数是径向基函数(RBF)核的C参数和gamma参数(即线性核只有C参数;多项式核只有C和指数)。C参数是限制过拟合的惩罚项,而gamma参数控制RBF核的宽度。如上所述,调整通常旨在为超参数找到最佳值集,然而,也有一些研究旨在为C参数和伽玛参数找到良好的起始值(Alvarsson等人,2014)。地址:https://pubs.acs.org/doi/10.1021/ci500344v5.3特征选择顾名思义,特征选择就是从最初的大量特征中选择出一部分特征的过程。除了实现高度准确的模型外,机器学习模型构建的最重要方面之一是获得可操作的见解,为了实现这一点,能够从大量特征中选择一个重要的特征子集非常重要。特征选择的任务本身可以构成一个全新的研究领域,其中大量的努力致力于设计新颖的算法和方法。从众多可用的特征选择算法中,一些经典方法基于模拟退火和遗传算法。此外,还有大量基于进化算法(如粒子群优化、蚁群优化等)和随机方法(如蒙特卡洛)的方法。我们自己的研究小组还在醛糖还原酶抑制剂的定量构效关系建模研究中探索了使用蒙特卡洛模拟进行特征选择(Nantasenamat等人,2014)。地址:https://doi.org/10.1016/j.ejmech.2014.02.043在《遗传算法搜索空间拼接粒子群优化作为通用优化器》的工作中,我们还设计了一种新型的Featureselectionmethods(Lietal.,2013)。地址:https://doi.org/10.1016/j.chemolab.2013.08.009图9.遗传算法搜索空间拼接粒子群优化(GA-SSS-PSO)方法示意图,在二维中使用Schwefel函数解释一下“原搜索空间(a)x∈[-500,0]在每个维度(图中一个维度等于一个横轴)以固定间隔2拼接成子空间。这样,得到4个子空间(b-e),其中x在每个维度的范围是原始空间的一半。GA的每个字符串编码一个索引到一个子空间。然后GA启发式地选择一个子空间(e)并开始PSO那里(粒子显示为红点)。PSO搜索粒子适应度最好的子空间的全局最小值作为编码该子空间索引的GA字符串的适应度。最后,GA进行进化,选择一个探索新的子空间重复整个过程,直到达到令人满意的误差水平d."6.机器学习任务在监督学习中,两种常见的机器学习任务包括分类和回归。6.1分类训练有素的分类模型将一组变量(定量或定性)作为输入,并预测输出类标签(定性)。下图是用不同颜色和标签表示的三个类别。每个彩色小球代表一个数据样本。图10.多类分类问题的示意图。二维显示的三类数据样本。上图显示了数据样本的假设分布。可以通过执行PCA分析并显示前两个主成分(PC)来创建此可视化;或者,可以选择两个变量的简单散点图可视化。6.1.1示例数据集以企鹅数据集(PenguinsDataset)为例(最近提出作为大量使用的Iris数据集的替代方案),我们将量化(喙长、喙深、鳍长和体重)和定性(性别和岛屿)特征被作为唯一描述企鹅的输入,并将它们分配给三个物种类别标签(Adelie、Chinstrap或Gentoo)之一。该数据集由344行和8列组成。之前的分析表明,该数据集包含333个完整案例,在11个不完整案例中出现19个缺失值。图11.三种企鹅(Chinstrap、Gentoo和Adelie)的类别标签6.1.2性能指标我们如何知道我们的模型表现好坏?答案是使用性能指标。评估分类性能的一些常用指标包括准确性(Ac)、灵敏度(Sn)、特异性(Sp)和马太相关系数(MCC)。其中TP、TN、FP和FN分别表示真阳性、真阴性、假阳性和假阴性的实例。应该注意的是,MCC的范围从-1到1,其中-1的MCC表示可能的最差预测,而值1表示可能的最佳预测场景。此外,MCC为0表示随机预测。6.2回归简而言之,一个经过训练的回归模型可以用下面的简单方程很好地概括:Y=f(X)。其中,Y对应量化后的输出变量,X指输入变量,f指计算输出值作为输入特征的映射函数(从训练模型中得到)。上述回归示例公式的本质是,如果X已知,则可以推导出Y。一旦计算出Y(我们也可以说“预测”),一种流行的可视化方法是绘制实际值与预测值的简单散点图,如下所示。图12.实际值与预测值的简单散点图6.2.1示例数据集波士顿住房数据集是数据科学教程中常用的流行示例数据集。该数据集由506行和14列组成。为简洁起见,下面显示的是标题(显示变量名称)加上数据集的前4行。在14列中,前13个变量用作输入变量,而房价中位数(medv)用作输出变量。可以看出,14个变量都包含定量值,因此适合做回归分析。我还在YouTube上制作了一个分步视频,展示了如何在Python中构建线性回归模型。地址:https://youtu.be/R15LjD8aCzc在视频中,我首先向大家展示了如何读取波士顿住房数据集,将数据分成X和Y矩阵,进行80/20的数据拆分,并使用80%的A子集建立线性回归模型,将训练好的模型应用于预测20%的子集。最后显示了实际与预测medv值的性能指标和散点图。图13.测试集的实际medv值与预测medv值(20%子集)的散点图。6.2.2性能指标评估回归模型的性能,以评估拟合模型能够准确预测输入数据值的程度。评估回归模型性能的常用指标是决定系数(R2)。从公式可以看出,R2本质上是1减去残差平方和(SSres)与总平方和(SStot)的比值。简单来说,可以说它代表了解释方差的相对度量。例如,如果R2=0.6,则表示模型可以解释60%的方差(即60%的数据符合回归模型),无法解释的方差占剩余的40%。此外,均方误差(MSE)和均方根误差(RMSE)也是常用的衡量残差或预测误差的指标。从上面的公式可以看出,MSE顾名思义,很容易计算,取误差平方的平均值。此外,MSE的简单平方根给出RMSE。7.分类任务的直观描述下面我们来看一下分类模型的整个过程。以企鹅数据集为例,可以看出企鹅可以用4个定量特征和2个定性特征来描述,然后将这些特征作为训练分类模型的输入。在训练模型的过程中,需要考虑的问题包括以下几点。使用什么机器学习算法?超参数优化应该探索什么样的搜索空间?使用哪种数据拆分方案?80/20拆分还是60/20/20拆分?还是10倍CV?训练模型后,生成的模型可用于对类标签(即我们的案例中的企鹅物种)进行预测,该标签可以是三种企鹅物种之一:Adelie、Chinstrap或Gentoo。我们不仅可以进行分类建模,还可以进行主成分分析(PCA),它将仅使用X(独立)变量来辨别数据的底层结构,并在这样做时允许固有聚类的可视化数据的一部分(见下方显示的是一张假设地图,其中集群根据3种企鹅物种进行了颜色编码)。图14.构建分类模型的过程示意图