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

经验教训:如何为您的机器学习问题选择正确的算法?

时间:2023-03-21 17:38:46 科技观察

随着机器学习越来越流行,越来越多的算法能够很好地完成这项工作。但是,您不可能事先知道哪种算法最适合您的问题。如果你有足够的时间,你可以尝试所有的算法来找到最好的一个。本文介绍如何依靠现有方法(模型选择和超参数调整)来指导您更好地选择算法。本文由华盛顿大学电子科学研究所和神经工程研究所数据科学博士后研究员MichaelBeyeler撰写。第一步:了解基础知识在我们深入研究之前,让我们回顾一下基础知识。具体来说,我们应该知道机器学习主要分为三大类:监督学习、非监督学习和强化学习。1.在监督学习中,每个数据点都被标记,例如类别标签或与值关联的标签。类标签示例:将图像分类为“猫”或“狗”;数字标签的示例:预测二手车的售价。监督学习的目的是从许多标记样本中学习,然后对新数据进行预测。例如,准确识别新照片中的动物(分类)或预测二手车的售价(回归)。2.在无监督学习中,数据点没有关联的标签。相反,无监督学习算法的目标是以某种方式组织数据,然后找出数据中存在的内在结构。这包括聚类数据,或寻找更简单的方法来处理复杂数据,使复杂数据看起来更简单。3.在强化学习中,算法为每个数据点做出决定(下一步做什么)。这种技术通常用于机器人技术。传感器一次从外界读取一个数据点,算法必须决定机器人下一步应该做什么。强化学习也适用于物联网应用。在这里,学习算法将收到一个奖励信号,表明它做出的决定是好是坏,为了获得最佳奖励,算法必须相应地修改其策略。第二步:对问题进行分类接下来,我们需要对问题进行分类,这涉及到两个过程:1.根据输入数据进行分类:如果我们的数据有标签,这就是一个监督学习问题;如果数据没有标签,而我们想找出数据的内部结构,那么这就是无监督学习;如果我们想通过与环境的交互来优化目标函数,那就是强化学习。2、根据输出结果分类:如果模型的输出结果是一个值,这是一个回归问题;如果输出结果是一个类别,这是一个分类问题;如果输出结果是一组输入数据,那么这是一个聚类问题。就这么简单!更一般地说,我们可以问自己我们的算法想要实现什么,并用它来找到合适的算法类别。上面的描述包括几个我们还没有提到的技术术语:分类:监督学习也被称为分类,当数据用于预测类别时。例如,识别包含“猫”或“狗”的图片并将其归类为“猫”或“狗”就是一个二分类或二项式分类问题。当类别较多时(比如预测下一位诺贝尔物理学家是谁),这称为多类别分类问题。回归:当要预测数值(例如预测股票价格)时,监督学习也称为回归。聚类:聚类或聚类分析是无监督学习中最常用的方法之一。聚类是对一组对象进行分组,使得同一组中的数据比不同组中的数据具有更多的相似性。异常检测:有时我们需要在数据点中找到异常值。例如,在欺诈检测中,任何非常不寻常的信用卡购买都是可疑的;欺诈有大量不同的形式,训练样本太小以至于无法完全理解欺诈活动应该是什么样子。异常检测采用的方法是了解什么行为正常(使用来自非欺诈交易的历史数据),并识别明显不同的行为。第三步:找到可用的算法现在我们已经对问题进行了分类,我们可以使用我们掌握的工具来识别合适和有用的算法。MicrosoftAzure创建了一个方便的算法列表,显示哪些算法可用于哪类问题。尽管该表格是为Azure软件量身定制的,但它具有普遍适用性(表格的PDF版本可在http://suo.im/3Ss2zW获得):一些值得注意的算法如下:1.分类:支持向量机(SVM))可用于找到尽可能宽的分类范围。当两个类不能清楚地分开时,算法会找到它能找到的最佳边界。它的真正优势在于处理特征密集的数据,例如文本或基因组(特征数量>100)。在这些情况下,除了只需要少量内存外,支持向量机(SVM)还能够比大多数其他算法更快地进行分类,并且过度拟合更少。人工神经网络是类脑学习算法,涵盖二元分类、多分类和回归问题。它们有多种形式,包括感知器和深度学习。它们需要很长时间才能训练,但众所周知,它们可以在各种应用领域实现最先进的性能。逻辑回归:尽管名称中带有“回归”,但逻辑回归实际上是一种强大的工具,可用于二分类和多分类问题。既快速又容易。事实上,它使用“S”形曲线而不是直线,因此非常适合数据分组。逻辑回归可以给出线性分类边界,所以如果你要使用它,你必须确保你接受线性近似。决策树和随机森林:决策森林(回归、二分类、多分类)、决策丛林(二分类和多分类)、提升决策树(回归和二分类)都是基于决策树。这是一个基本的机器学习概念。决策树有许多不同的变体,但它们都做同样的事情——将特征空间细分为具有大致相同标签的区域。这些区域可以是一致的类别或常数值,具体取决于您是在进行分类还是回归。2.回归:线性回归是将一条线(或平面,或超平面)拟合到一个数据集。它是一个主要工具,简单且快速,但对于某些问题来说它可能太简单了。贝叶斯线性回归有一个非常理想的特性:它避免了过度拟合。贝叶斯方法通过预先对答案的可能分布做出一些假设来做到这一点。这种方法的另一个副产品是它们的参数很少。提升决策树回归:如上所述,提升决策树(回归和二元分类)都基于决策树,并且通过将特征空间细分为具有大致相同标签的区域来工作。提升决策树通过限制可细分的次数和每个区域允许的最小数据点数来避免过度拟合。该算法构建了一系列树,其中每棵树都学习补偿先前树留下的错误。这会导致使用大量内存的非常准确的学习器。3.聚类:层次聚类(HierarchicalClustering)的目标是建立聚类的层次结构,它有两种形式。凝聚聚类是一种“自下而上”的方法,其中每个观察(observation)都从它自己的集群开始,随着它在层次结构中向上移动,成对的集群进行融合。分裂聚类是一种“自上而下”的方法,其中所有观察值都从一个聚类开始,并随着观察值在层次结构中向下移动而递归分裂。总的来说,这里的融合和分裂是以激进的方式定义的。层次聚类的结果通常以树状图的形式表示。k-means聚类的目标是将n组观测值分成k个簇,其中每个观测值都属于与其接近的均值所在的簇——这些均值被用作这些簇类的原型。这将数据空间划分为Voronoi单元。4.异常检测:k近邻(k-nearestneighbors/k-NN)是一种非参数化的分类和回归方法。在这两种情况下,输入都由特征空间中最近的k个训练样本组成。在k-NN分类中,输出是类成员。对象通过其k最近邻的多数票进行分类,其中对象被分配到k最近邻中最常见的类别(k是正整数,通常较小)。在k-NN回归中,输出是对象的属性值。该值是其k个最近邻居的平均值。一级SVM:使用非线性SVM的巧妙扩展,一级SVM可以划定一个严格概括整个数据集的边界。任何远离边界的新数据点都是异常的,值得注意。第四步:实施所有适用的算法对于任何给定的问题,通常有多个候选算法可以完成这项工作。那么我们怎么知道选择哪一个呢?通常,这个问题的答案并不简单,因此我们必须尝试和尝试。原型开发***分两步完成。在第一步中,我们希望通过最少的特征工程快速粗略地实现一些算法。在这个阶段,我们的主要目标是大致了解哪种算法表现更好。这一步有点像招聘:我们试图寻找理由尽可能缩短我们的候选算法列表。一旦我们将列表缩小到几个候选算法,真正的原型设计就开始了。理想情况下,我们将构建一个机器学习管道,使用一组精心选择的评估标准来比较每个算法在数据集上的性能。在这个阶段,我们只处理算法的一小部分,因此我们可以将注意力转向真正的魔法:特征工程。第5步:特征工程或许比选择算法更重要的是正确选择特征来表示数据。从上面的列表中选择合适的算法相对简单,而特征工程更像是一门艺术。主要问题是我们试图分类的数据在特征空间中描述得很差。例如,使用像素的灰度值来预测图像通常是一个糟糕的选择;相反,我们需要找到提高信噪比的数据转换。如果没有这些数据转换,我们的任务可能无法解决。例如,在定向梯度直方图(HOG)出现之前,复杂的视觉任务(如行人检测或人脸检测)很难完成。虽然大多数特征的有效性需要通过实验来评估,但了解选择数据特征的常用方法是有帮助的。以下是一些不错的方法:主成分分析(PCA):一种线性降维方法,可找到具有高信息量并可以解释数据中大部分方差的特征的主成分。Scale-InvariantFeatureTransform(SIFT):计算机视觉领域的专利算法,用于检测和描述图像的局部特征。它有一个开源替代ORB(OrientedFASTandrotatedBRIEF)。AcceleratedRobustFeatures(SURF):更强大的SIFT版本,已获得专利。HistogramofOrientedGradients(HOG):计算机视觉中使用的一种特征描述方法,用于计算图像局部出现的梯度方向。更多的算法可以参考:https://en.wikipedia.org/wiki/Visual_descriptor当然你也可以想出自己的特征描述方法。如果您有多个候选方法,则可以使用打包方法进行智能特征选择。1.向前搜索:最初,没有选择特征。然后选择最相关的特征,将这个特征添加到现有特征中;计算模型的交叉验证误差,并重复选择所有其他候选特征;***,选出能让你的交叉验证误差最小的特征,放到所选的特征当中。重复直到达到所需的功能数量!2.反向搜索:从所有特征开始。先去除最不相关的特征,然后计算模型的交叉验证误差;对所有其他候选特征重复此过程;***,去掉使交叉验证误差最大的候选特征。重复直到达到所需的功能数量!使用交叉验证标准来删除和添加功能!第6步:超参数优化***您可能想要优化算法的超参数。比如主成分分析中的主成分个数,k近邻算法的参数k,或者神经网络中的层数和学习率。最好的方法是使用交叉验证进行选择。一旦应用了上述所有方法,您就有很大机会创建强大的机器学习系统。但是,正如您可能已经猜到的那样,成败在于细节,您可能必须进行大量试验才能成功。原文:http://www.askaswiss.com/2017/02/how-to-choose-right-algorithm-for-your-machine-learning-problem.html【本文为机器之心专栏原文翻译,微信公众号《机器之心(id:almosthuman2014)》】点此阅读作者更多好文