本文来源:数据STUDIO
经常看到这类的吐槽:“深度学习就是个系统工程而已,没有数学含金量。”
但无可否认的是深度学习的易用程度极大地简化了传统机器学习的整体算法分析和学习流程,更重要的是在一些通用的领域任务刷新了传统机器学习算法达不到的精度和准确率的要求。
深度学习这几年爆火,就像5年前的大数据一样,不过深度学习其主要还是属于机器学习的范畴领域内,所以这篇文章,小矩想和大家来唠一唠机器学习和深度学习的算法流程的区别。
1
机器学习算法流程
实际上机器学习研究的就是数据科学,下面是机器学习算法的主要流程:
  1. 数据集准备
  2. 探索性的对数据进行分析
  3. 数据预处理
  4. 数据分割
  5. 机器学习算法建模
  6. 选择机器学习任务
  7. 最后就是评价机器学习算法对实际数据的应用情况如何
数据集
数据集是构建机器学习模型流程的起点,简单来说,数据集本质上是一个M×N矩阵,其中M代表列(特征),N代表行(样本)。
列可以分解为X和Y,X是可以指特征、独立变量或者是输入变量。Y也是可以指类别标签、因变量和输出变量。
数据分析
进行探索性数据分析(Exploratory data analysis, EDA)是为了获得对数据的初步了解。EDA主要的工作是:对数据进行清洗,对数据进行描述(描述统计量,图表),查看数据的分布,比较数据之间的关系,培养对数据的直觉,对数据进行总结等。
探索性数据分析方法简单来说就是去了解数据,分析数据,搞清楚数据的分布。
主要注重数据的真实分布,强调数据的可视化,使分析者能一目了然看出数据中隐含的规律,从而得到启发,以此帮助分析者找到适合数据的模型。
在一个典型的机器学习算法流程和数据科学项目里面,我做的第一件事就是通过 "盯住数据",以便更好地了解数据。
个人通常使用的三大EDA方法包括:

描述性统计

平均数、中位数、模式、标准差。

数据可视化

热力图(辨别特征内部相关性)、箱形图(可视化群体差异)、散点图(可视化特征之间的相关性)、主成分分析(可视化数据集中呈现的聚类分布)等。

数据整形

对数据进行透视、分组、过滤等。
数据预处理
数据预处理,其实就是对数据进行清理、数据整理或普通数据处理。指对数据进行各种检查和校正过程,以纠正缺失值、拼写错误、使数值正常化/标准化以使其具有可比性、转换数据(如对数转换)等问题。
例如对图像进行resize成统一的大小或者分辨率。
数据的质量将对机器学习算法模型的质量好坏产生很大的影响。因此,为了达到最好的机器学习模型质量,传统算法流程中,其实很大一部分工作就是在对数据进行分析和处理。
一般来说,数据预处理可以轻松地占到机器学习项目流程中80%的时间,而实际的模型建立阶段和后续的模型分析大概仅占到剩余的20%。
数据分割

训练集 & 测试集

在机器学习模型的开发流程中,希望训练好的模型能在新的、未见过的数据上表现良好。为了模拟新的、未见过的数据,对可用数据进行数据分割,从而将已经处理好的数据集分割成2部分:训练集合测试集。
第一部分是较大的数据子集,用作训练集(如占原始数据的80%);第二部分通常是较小的子集,用作测试集(其余20%的数据)。
接下来,利用训练集建立预测模型,然后将这种训练好的模型应用于测试集(即作为新的、未见过的数据)上进行预测。根据模型在测试集上的表现来选择最佳模型,为了获得最佳模型,还可以进行超参数优化。

训练集 & 验证集 & 测试集

另一种常见的数据分割方法是将数据分割成3部分:
  1. 训练集
  2. 验证集
  3. 测试集
训练集用于建立预测模型,同时对验证集进行评估,据此进行预测,可以进行模型调优(如超参数优化),并根据验证集的结果选择性能最好的模型。
验证集的操作方式跟训练集类似。不过值得注意的是,测试集不参与机器学习模型的建立和准备,是机器学习模型训练过程中单独留出的样本集,用于调整模型的超参数和对模型的能力进行初步评估。通常边训练边验证,这里的验证就是用验证集来检验模型的初步效果。

交叉验证

为了更加经济地利用现有数据,通常使用N倍交叉验证,将数据集分割成N个。在这样的N倍数据集中,其中一个被留作测试数据,而其余的则被用作建立模型的训练数据。通过反复交叉迭代的方式来对机器学习流程进行验证。
这种交叉验证的方法在机器学习流程中被广泛的使用,但是深度学习中使用得比较少。
机器学习算法建模
根据taget变量(通常称为Y变量)的数据类型,可以建立一个分类或回归模型。
机器学习算法可以大致分为以下三种类型之一:

监督学习

是一种机器学习任务,建立输入X和输出Y变量之间的数学(映射)关系。这样的(X、Y)对构成了用于建立模型的标签数据,以便学习如何从输入中预测输出。

无监督学习

是一种只利用输入X变量的机器学习任务。X变量是未标记的数据,学习算法在建模时使用的是数据的固有结构。

强化学习

是一种决定下一步行动方案的机器学习任务,它通过试错学习(trial and error learning)来实现这一目标,努力使reward回报最大化。

参数调优

超参数本质上是机器学习算法的参数,直接影响学习过程和预测性能。由于没有万能的超参数设置,可以普遍适用于所有数据集,因此需要进行超参数优化。
以随机森林为例。在使用randomForest时,通常会对两个常见的超参数进行优化,其中包括mtry和ntree参数。mtry(maxfeatures)代表在每次分裂时作为候选变量随机采样的变量数量,而ntree(nestimators)代表要生长的树的数量。
另一种在10年前仍然非常主流的机器学习算法是支持向量机SVM。需要优化的超参数是径向基函数(RBF)内核的C参数和gamma参数。C参数是一个限制过拟合的惩罚项,而gamma参数则控制RBF核的宽度。
调优通常是为了得出超参数的较佳值集,很多时候不要去追求找到超参一个最优值,其实调参侠只是调侃调侃,真正需要理解掌握算法原理,找到适合数据和模型的参数就可以。

特征选择

特征选择从字面上看就是从最初的大量特征中选择一个特征子集的过程。除了实现高精度的模型外,机器学习模型构建最重要的一个方面是获得可操作的见解,为了实现这一目标,能够从大量的特征中选择出重要的特征子集非常重要。
特征选择的任务本身就可以构成一个全新的研究领域,在这个领域中,大量的努力都是为了设计新颖的算法和方法。从众多可用的特征选择算法中,一些经典的方法是基于模拟退火和遗传算法。除此之外,还有大量基于进化算法(如粒子群优化、蚁群优化等)和随机方法(如蒙特卡洛)的方法。
机器学习任务
在监督学习中,两个常见的机器学习任务包括分类和回归。

分类

一个训练好的分类模型将一组变量作为输入,并预测输出的类标签。下图是由不同颜色和标签表示的三个类。每一个小的彩色球体代表一个数据样本。三类数据样本在二维中的显示,这种可视化图可以通过执行PCA分析并显示前两个主成分(PC)来创建;或者也可以选择两个变量的简单散点图可视化。

性能指标

如何知道训练出来的机器学习模型表现好或坏?就是使用性能评价指标(metrics),一些常见的评估分类性能的指标包括准确率(AC)、灵敏度(SN)、特异性(SP)和马太相关系数(MCC)。

回归

最简单的回归模式,可以通过以下简单等式很好地总结:Y = f(X)。其中,Y对应量化输出变量,X指输入变量,f指计算输出值作为输入特征的映射函数(从机器学习模型中得到)。
上面的回归例子公式的实质是,如果X已知,就可以推导出Y。一旦Y被计算(预测)出来,一个流行的可视化方式是将实际值与预测值做一个简单的散点图。
对回归模型的性能进行评估,以评估拟合模型可以准确预测输入数据值的程度。评估回归模型性能的常用指标是确定系数(R²)。此外,均方误差(MSE)以及均方根误差(RMSE)也是衡量残差或预测误差的常用指标。
2
深度学习算法流程
深度学习实际上是机器学习中的一种范式,所以他们的主要流程是差不多的。
深度学习则是优化了数据分析,建模过程的流程也是缩短了,由神经网络统一了原来机器学习中百花齐放的算法。
在深度学习正式大规模使用之前呢,机器学习算法流程中要花费时间去收集数据,然后对数据进行筛选,尝试各种不同的特征提取机器学习算法,或者结合多种不同的特征对数据进行分类和回归。
而深度学习的实质是构建具有很多层的神经网络模型(保证模型的深度)和使用大量的训练数据,让机器去学习重要的特征,最终使分类或预测达到很高的准确性。深度学习基于感知器的模型,模仿人脑的机制和神经元的信号处理模式,可以让计算机自行分析数据,找出特征值。 
深度学习的整体流程如图1.3所示:数据集切分为训练集、验证集和测试集。
训练集用以训练深度学习模型;验证集用以评估模型结果,进而辅助模型调参;测试集用以模型的预测。
一般而言,训练集、验证集与测试集的比例为7:2:1。
特征工程
目前业界有句话被广为流传:
“数据和特征决定了机器学习的上限,而模型与算法则是逼近这个上限而已。”
因此,特征工程做得好,我们得到的预期结果也就好。
那特征工程到底是什么呢?在此之前,我们得了解特征的类型:文本特征、图像特征、数值特征和类别特征等。我们知道计算机并不能直接处理非数值型数据,那么在我们要将数据灌入机器学习算法之前,就必须将数据处理成算法能理解的格式,有时甚至需要对数据进行一些组合处理如分桶、缺失值处理和异常值处理等。
这也就是特征工程做的事:提取和归纳特征,让算法最大程度地利用数据,从而得到更好的结果。
不过,相较于传统的机器学习,深度学习的特征工程会简单许多,我们一般将数据处理成算法能够理解的格式即可,后期对神经网络的训练,就是提取和归纳特征的过程。
这也是深度学习能被广泛使用的原因之一:特征工程能够自动化。
因此,本书所涉及的特征工程主要是文本预处理、图像预处理和数值预处理(归一化),这些均会通过案例来进行讲解。
模型评估
模型评估指标有很多种,因此根据问题去选择合适的评估指标是衡量结果好坏的重要方法。所以,我们需要知道评估指标的定义,从而选择正确的模型评估方式,才能知道模型的问题所在,进而对模型进行参数调优。
深度学习模型执行的任务可以归为两类:分类任务和回归(预测)任务。为此我们也有不同的指标去评估模型。
1.分类任务评估指标
1)准确率(accuracy)
对于给定数据集的预测结果,分类正确的样本数占总样本数的百分比。但是对于不均衡的训练集来说,这就会有致命的缺陷,因为当负样本占比在99%时,模型只要将结果都预测为负样本,准确率就达到了99%。在这种情况下,利用准确率对模型进行评估并不是最合理的评估方式。
2)精确率(precision)和召回率(recall rate)
它们是一对衡量检索系统的指标。
精确率衡量的是检索系统推送出来的真实正确结果(TP)与系统推送出来的所有正确结果(TP+FP)的占比。
召回率衡量的是系统推送出来的真实正确结果(TP)与整个系统的实际正确结果(TP+FN)的占比。
但精确率和召回率是矛盾统一的一对指标,为了提高精确率,模型需要更有“把握”把真正的正样本识别出来,这样必然会放弃一些没有“把握”(但实际是正样本)的正样本,从而导致召回率降低。
下面我们通过一个二分类混淆矩阵来示意这两个指标是如何计算的。
如表1.1所示,
TP是正类样本中被分类器预测为正类的数目,
FN是正类样本中被分类器预测为负类的数目,
FP是负类样本中被分类器预测为正类的数目,
TN是负类样本中被分类器预测为负类的数目。
3) F1Score和ROC曲线
F1Score是精确率和召回率的调和平均值:
ROC曲线(Receiver Operating Characteristic):一开始用于心理学、医学检测应用,此后被引入机器学习领域,用以评估模型泛化性能好坏。ROC曲线的线下面积(AUC)越大,也意味着该模型的泛化性能越好。
绘制ROC曲线:真阳率TPR作为纵坐标,表示正样本中被分类器预测正类的数目与总正样本数目之比;假阳率FPR作为横坐标,表示负类样本中被分类器预测为正类的数目与总负样本数目之比。
这里介绍一个简单绘制ROC曲线的方法:
① 根据标签统计出正负样本的数目,正样本数目记为P,负样本数目记为N;
② 其次,横轴刻度记为1/N,纵轴刻度记为1/P;
③ 接着,将模型预测的概率从大到小进行排序;
④ 最后,从零点开始,依次遍历排序好的概率,遇到正样本则纵轴刻度上升1/P,遇到负样本则横轴刻度右移1/N,直至便利完所有样本,最终停在点(1,1)上,至此,ROC曲线绘制完成。
它的线下面积AUC一般在0.5~1,若小于0.5,直接将模型的预测概率反转为1-P,然后重新计算AUC即可。AUC 越大,说明分类器越稳健,将真正的正类样本放在前面的能力越强。
一般地,很多机器学习任务的数据集并不是均衡的,例如诈骗信息分类,诈骗信息和正常信息之间的占比有时能会到1:1000。为了能更好地衡量我们模型的有效性,我们应该选择ROC曲线和F1Score作为评估指标。因为它们能够无视样本不均衡的情况,并根据预测结果给出最合理的评估。
2.回归任务评估指标
回归是确定两种或两种以上的变量间相互依赖的定量关系的方法,简单来讲就是对自变量X和因变量Y建立函数关系式。为了评估这个函数关系式的有效性,我们可以通过以下几个评估指标来衡量。其中,fi为模型预测值,yi为实际值。
以上3种回归任务评估指标除了计算方式不同,评估的意义都是一样的,都是对预测值和真实值之间的误差进行评估。
因此我们选择其中一种作为评估指标即可。
参考文献  

[1] https://github.com/dataprofessor/infographic    

[2] 陈仲铭. 《深度学习:原理与实践》  
仅做学术分享,侵删

谢谢大家观看,如有帮助,来个喜欢或者关注吧!


本文仅供学习参考,有任何疑问及侵权,扫描以下公众号二维码添加交流:
更多学习内容,仅在知识星球发布:

继续阅读
阅读原文