欢迎光临散文网 会员登陆 & 注册

CS漫谈丨我应该使用哪种机器学习算法?

2021-04-28 15:19 作者:苏世考研  | 我要投稿


苏世计算机考研,程序猿专属的学习分享社区


/ 写在前面的话 /

CS漫谈,聊聊和计算机有关的那些事。


有很多同学对机器学习饶有兴趣,其中很多都是有扎实基础的大神,但是也不乏一些小白。今天小苏为大家介绍一下机器学习有关方面,主要是针对那些对机器学习感兴趣的初学者或者起步刚不久的人。


初学者在面对各种各样的机器学习算法时会提出一个典型的问题,那就是“我应该使用哪种算法?” 该问题的答案取决于许多因素,其中包括:数据的大小,质量和性质;可用的计算时间;任务的紧迫性;要求要如何处理数据。即便是经验丰富的机器学习从业者,也无法在尝试不同算法之前就确定哪种算法性能最佳。我们不提倡说哪种方法最好最值得用哪种方法最次,但是小苏希望能给大家提供一些指导,以根据一些明确的因素首先尝试哪种算法。


下图机器学习算法备忘录帮助大家从各种机器学习算法的选择找到适合你的具体问题适当的算法




由于该备忘录是为初学者所设计的,因此在讨论算法时,我们做了一些简化的假设。如果要执行降维,请使用主成分分析PCA。如果你需要快速进行数值预测,请使用决策树或线性回归。如果需要分层结果,请使用分层聚类。值得注意的是,图中所示路径指导旨在作为经验性质建议,这一点很重要,因此在面对实际问题的时候可能不是100%适用。不过有很多的程序猿都说找到最佳算法的唯一确定的方法就是尝试所有算法。



机器学习算法的类型


接下来这部分主要概述了最流行的机器学习类型。如果你熟悉这些类别并想看一些特定的算法,则可以跳过本节,转到下面的“何时使用特定算法”。


第一种类型:监督学习

监督学习算法基于一组示例进行预测。在监督学习下,你将拥有一个输入变量,该输入变量由带标签的训练数据和所需的输出变量组成。你可以使用算法来分析训练数据,以学习将输入映射到输出的功能。通过从训练数据中总结出预期未知情况下的结果,此推断功能可映射新的未知示例。


分类:当数据用于预测分类变量时,监督学习也称为分类。在为图像分配狗或猫的标签或指示符时就是这种情况。当只有两个标签时,这称为二进制分类。当类别多于两个时,这些问题称为多类别分类。


回归:当预测连续值时,这些问题将成为回归问题。


预测:这是根据过去和现在的数据对未来进行预测的过程。它最常用于分析趋势。一个常见的例子可能是根据当年和前几年的销售额来估算下一年的销售额。


第二种类型:半监督学习

监督学习的挑战在于,标记数据可能既昂贵又耗时。如果标签有限,则可以使用未标签的示例来增强监督学习。因为在这种情况下机器没有受到完全监督,所以我们说机器是半监督的。在半监督学习中,你可以使用带有少量标记数据的未标记示例来提高学习准确性。


第三种类型:无监督学习

在执行无监督学习时,会向机器显示完全未标记的数据。要求发现作为数据基础的固有模式,例如聚类结构,低维流形或稀疏树和图。


聚类:对一组数据示例进行分组,以便一个组(或一个群集)中的示例比其他组中的示例更相似(根据某些标准)。这通常用于将整个数据集分成几组。可以在每个组中执行分析以帮助用户找到内在模式。


降维:减少所考虑的变量数量。在许多应用程序中,原始数据具有非常高的维度特征,并且某些特征是多余的或与任务无关。降低维数有助于找到真正的潜在关系。


第四种类型:强化学习

强化学习根据来自环境的反馈来分析和优化代理的行为。机器会尝试不同的场景,以发现哪些动作产生最大的回报,而不是被告知要采取哪些动作。反复试验和延迟奖励将强化学习与其他技术区分开来。


选择算法时的注意事项:

选择算法时,请始终考虑:准确性,培训时间和易用性。许多使用者都是把准确性放在首位,而初学者则倾向于专注于他们最了解的算法。与数据集一起显示时,无论结果如何,首先要考虑的是如何获得结果。初学者倾向于选择易于实现且可以快速获得结果的算法。获得一些结果并熟悉数据后,你可能会花费更多时间使用更复杂的算法来增强对数据的理解,从而进一步改善结果。即使在这个阶段,最好的算法也可能不是达到最高准确性的方法,因为算法通常需要仔细调整并进行大量训练才能获得其最佳可实现性能。


何时使用特定算法


1、线性回归和逻辑回归

线性回归是一种对连续因变量y与一个或多个预测变量X之间的关系进行建模的方法。y和X之间的关系可以线性建模为

如果给出训练示例

那么这个参数β就可以通过训练学习找到了。


而在逻辑回归中,我们使用不同的假设类别来尝试预测给定示例属于“ 1”类别的概率与该示例属于“ -1”类别的概率。具体来说,我们将尝试学习以下形式的函数:



如果给出训练示例:

那么这个在给定数据集的情况下,可以通过最大化β的对数似然来学习获取到参数向量β。



线性 SVM和 kernel SVM

内核(kernel)经常用来将非线性可分离函数映射为更高维的线性可分离函数。支持向量机(SVM)训练算法找到由法向量w和超平面b表示的分类器,该超平面将不同的类别尽可能地分开,然后该问题就可以转换为约束优化问题:


使用内核(kernel)用于将非线性可分离函数映射为更高维的线性可分离函数。


当这些类不是线性可分离的时,就可以使用内核技巧将非线性可分离的空间映射到更高维的线性可分离的空间。当大多数因变量是数值型时,我们首先想到的就应该是逻辑回归和SVM,这些模型易于实现,其参数易于调整,性能也非常好,因此,这些模型适合初学者。


树和集成树

决策树,随机森林和梯度提升法(gradient boosting)都是基于决策树的算法;决策树有很多变体,易于理解和实施,它们都做相同的事情:将要素空间细分为标签几乎相同的区域。但是,当我们遍历完树枝并深入树木时,它们往往会过度拟合数据。随机森林法和梯度提升法是两种使用树算法来获得良好准确性以及克服过度拟合问题的流行方法。


神经网络和深度学习

由于其并行计算和分布式计算的出现,神经网络在1980年代中期蓬勃发展。但是由于广泛用于优化神经网络参数的反向传播训练算法的有效性,阻碍了该领域的研究。支持向量机(SVM)和其他更简单的模型(可以通过解决凸优化问题轻松进行训练)逐渐取代了机器学习中的神经网络。但是最近这几年新的和改进的训练技术,例如无监督的预训练和逐层贪婪训练,导致了神经网络重新兴起,而且越来越强大的计算能力,例如GPU和大规模并行处理(MPP),也刺激了神经网络的东山再起。现在,在神经网络研究中,具有上千层的模型可谓是非常多的。




换句话说,浅层神经网络已演变为深度学习神经网络。深度神经网络在监督学习方面非常成功。当用于语音和图像识别时,深度学习的表现几乎与我们人类基本上差不多,甚至更好。深度学习适用于诸如特征提取之类的无监督学习任务,它还可以以更少的人工干预从原始图像或语音中提取特征。


神经网络由三部分组成:输入层,隐藏层和输出层。训练样本定义输入和输出层。当输出层是分类变量时,神经网络就是解决分类问题的一种方法。当输出层是连续变量时,则可以使用网络进行回归。当输出层与输入层相同时,则可以使用网络提取固有特征。隐藏层的数量定义了模型的复杂性和建模能力。


KMeans/ k-modes、GMM(混合高斯模型)

在KMeans/ k-modes下,GMM聚类旨在将n个观测值划分为k个聚类。KMeans定义硬分配:样本将且仅与一个聚类相关联。但是,GMM为每个样本定义一个软分配。每个样本都有与每个聚类关联的概率。当给出聚类数k时,两种算法都足够简单,且都能够足够快地进行聚类。


 DBSCAN(基于密度的空间聚类)

当没有给出聚类数k时,可以使用DBSCAN算法来密度扩散连接样本来聚类。



层次聚类

可以使用树结构可视化来分层分类,它不需要输入簇的数量,并且可以使用不同的K在不同的粒度级别查看分类(即可以细化/粗化簇)。



PCA,SVD和LDA

我们一般不希望将大量特征信息直接输入到机器学习算法中,因为某些特征可能是不相关的,或者“本征”维可能小于特征的数量。主成分分析(PCA),奇异值分解(SVD)和潜在狄利克雷分配(LDA)这三种方法均可用于降维。


PCA是一种无监督的聚类方法,可将原始数据空间映射到较低维的空间,同时保留尽可能多的信息,它要找到一个子空间,该子空间最多保留数据方差,该子空间由数据协方差矩阵的主要特征向量定义。


SVD与PCA相关,但SVD是一种更通用的技术,因为它也可以完成PCA可能无法完成的工作。例如,用户对电影矩阵的SVD能够提取可在推荐系统中使用的用户配置文件和电影配置文件。此外,SVD还被广泛用作自然语言处理(NLP)中的主题建模工具,称为潜在语义分析。NLP中的一项相关技术是LDA,LDA是概率主题模型,它以类似于高斯混合模型(GMM)将连续数据分解为高斯密度的方式将文档分解为各种不同的主题。与GMM不同,LDA对离散数据(文档中的单词)进行建模,并根据狄利克雷分布先验信息来约束主题。


总的来说机器学习是一套规矩的工作流程,掌握步骤即可解决问题。在我们利用机器学习方法时候,首先要定义问题,你想解决什么问题?然后从简单开始,熟悉数据和基线结果,再尝试更复杂的操作。


苏世学社旗下品牌,专注于计算机考研

计算机考研一手资讯,原创高质量干货

深度的学习分享丨咨询前辈丨个性化指导


CS漫谈丨我应该使用哪种机器学习算法?的评论 (共 条)

分享到微博请遵守国家法律