社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习算法备忘单!

Datawhale • 2 年前 • 370 次点击  
 Datawhale干货 
作者:Anthony Barrios编译:追风

机器学习(ML)是人工智能(AI)和计算机科学的一个子领域,主要是利用数据和算法来模仿人的学习方式,逐步提高其准确性。使用这个树状图作为指南,以确定使用哪种ML算法来解决你的AI问题。

图片来源:LatinX 在 AI™ 中的机器学习算法备忘单

如果你想知道在不同的应用程序中使用哪些机器学习算法,或者你是一个开发者,同时为你试图解决的问题寻找一种方法,请继续阅读下文,并以这些步骤作为指导。

无监督学习使用未标记的信息数据,这样机器应该在没有指导的情况下根据模式、相似性和差异来工作。

另一方面,有监督学习有一个 "老师" 存在,他负责通过标记数据来训练机器工作。接下来,机器会收到一些示例,使其能够产生正确的结果。

但是对于这些类型的学习,有一种混合的方法,这种半监督学习适用于有标签和无标签的数据。这种方法使用一个极小的标记数据集来训练和标记其余数据,并进行相应的预测,最后给出问题的解决方案。

首先,你需要知道你所处理的维数,它意味着你的问题中输入的数量(也被称为特征)。如果你正在处理一个大数据集或许多特征,你可以选择降维算法。

一、无监督学习:降维

数据集合中的大量维度可能会对机器学习算法的性能产生重大影响。"维度诅咒" 是一个用来描述大维度可能造成的麻烦的术语,例如,聚类中的 "距离聚集(Distance Concentration)" 问题,即随着数据维度的增加,不同的数据点会有相同的值。

最小化训练数据中输入变量数量的技术被称为 "降维"。

现在你需要熟悉特征提取特征选择的概念,以便继续学习。

将原始数据转化为可以处理的数字特征,同时保留原始数据集的信息,这一过程被称为特征提取。它比直接将机器学习应用于原始数据产生更好的结果。

它用于三种已知的降维算法,包括主成分分析、奇异值分解和线性判别分析,但你需要清楚地知道你想用哪种工具来寻找模式或从数据中推断出新的信息。

如果你不希望合并数据中的变量,而是想通过只保留重要的特征来去除不需要的特征,那么你可以使用主成分分析算法。

PCA(主成分分析)

主成分分析是一种降低数据集维数的数学算法,在保留大部分信息的同时简化变量的数量。这种以准确性换取简单性的方法被广泛用于在大型数据集中寻找模式。

图片来源:什么是主成分分析?

https://liorpachter.wordpress.com/2014/05/26/what-is-principal-component-analysis/

在线性连接方面,它在有大量数据存在的情况下有着广泛的应用,如媒体编辑、统计质量控制、投资组合分析,以及人脸识别、图像压缩等许多应用。

另外,如果你想要一个通过组合你正在使用的数据的变量来工作的算法,简单的PCA可能不是你使用的最佳工具。接下来,你可以有一个概率模型或一个非概率模型。概率数据是涉及到随机选择的数据,是大多数科学家的首选,可以得到更准确的结果。而非概率数据不涉及这种随机性。

如果你正在处理非概率数据,你应该使用奇异值分解算法。

SVD(奇异值分解)

在机器学习领域,SVD允许数据被转化为一个可以轻松区分类别的空间。这种算法将一个矩阵分解为三个不同的矩阵。例如,在图像处理中,使用数量减少的矢量来重建与原始图像非常接近的图片。

使用给定数量的组件压缩图像

与PCA算法相比,两者都可以对数据进行降维处理。但PCA跳过了不太重要的成分,而SVD只是把它们变成特殊的数据,表示为三个不同的矩阵,更容易操作和分析。

当涉及到概率方法时,对于更抽象的问题,最好使用线性判别分析算法。

LDA(线性判别分析)

线性判别分析(LDA)是一种分类方法,在这种方法中,先前已经确定了两个或更多的组,根据其特征将新的观察结果归为其中一个。

它不同于PCA,因为LDA发现了一个优化组可分离性的特征子空间,而PCA忽略了类标签,专注于捕捉数据集的最高方差方向。

该算法使用贝叶斯定理,这是一个概率定理,用于根据一个事件与另一个事件的关系来确定其发生的可能性。

它经常被用于人脸识别、客户识别和医学领域,以识别病人的疾病状况。

从UMIST数据库中随机选取的五个主体(类)的170张人脸图像在(a)基于PCA的子空间,(b)基于D-LDA的子空间,以及(c)基于DF-LDA的子空间的分布。

资料来源:Face recognition using LDA-based algorithms

https://www.researchgate.net/publication/5613964FacerecognitionusingLDA-based_algorithms

下一步是选择你是否希望你的算法有响应,这意味着你要开发一个基于标记数据的预测模型来教导你的机器。如果你愿意使用非标签数据,你可以使用聚类技术,这样你的机器就可以在没有指导的情况下工作,搜索相似性。

另一方面,选择相关特征(变量、预测因子)的子集用于模型创建的过程被称为特征选择。它有助于简化模型,使研究人员和用户更容易理解它们,以及减少训练周期和避免维度诅咒。

它包括聚类法、回归法和分类法。

二、监督学习:聚类

聚类是一种分离具有相似特征的群体并将其分配到群组的技术。

如果你正在寻找一种分层的算法:

Hierarchical Clustering(层次聚类)

这种类型的聚类是机器学习中最流行的技术之一。层次聚类协助一个组织对数据进行分类,以确定相似性,以及不同的分组和特征,从而使其定价、商品、服务、营销信息和其他方面的业务有的放矢。它的层次结构应显示出类似于树状数据结构的数据,即所谓的树状图。有两种方法对数据进行分组:聚类和分化。

聚合式聚类是一种 "自下而上" 的方法。换句话说,每个项目首先被认为是一个单元素集群(叶子)。在该方法的每个阶段,最具可比性的两个集群被连接成一个新的更大的集群(结点)。这种方法反复进行,直到所有的点都属于单个大簇(根)。

分化聚类以一种 "自上而下" 的方式工作。它从根部开始,所有项目都分组在一个集群中,然后在每个迭代阶段将最多的项目分成两个。迭代程序直到所有的项目都在他们的组中。

如果你不寻找分层解决方案,则必须确定你的方法是否需要指定要使用的集群数量。如果你不需要定义,你可以利用基于密度的有噪声的应用程序空间聚类算法。

DBSCAN(基于密度的有噪声的应用程序空间聚类法)

当涉及到任意形状的聚类或检测异常值时,最好使用基于密度的聚类方法。DBSCAN是一种检测那些任意形状的聚类和有噪声的聚类方法,它根据两个参数:eps和minPoints将彼此接近的点分组。

eps告诉我们两个点之间需要有多大的距离才能被视为一个集群。而minPoints是创建一个集群的最小点数。

我们在分析Netflix服务器的异常值时使用了这种算法。流媒体服务运行着数以千计的服务器,通常只有不到百分之一的服务器能够变得不健康,这会降低流媒体的性能。真正的问题是这个问题不容易被发现,为了解决这个问题,Netflix使用DBSCAN指定一个要监测的指标,然后收集数据,最后传递给算法来检测服务器的异常值。

资料来源:Tracking down the Villains: Outlier Detection at Netflix

日常使用可以是电子商务向客户推荐产品。对用户之前购买过的产品数据应用DBSCAN。

如果你需要指定聚类的数量,有三种现有的算法可供使用,包括K-Modes、K-Means和高斯混合模型。接下来,你需要知道是否要使用分类变量,这是一种离散变量,通过对观察值进行分组来捕捉定性的后果。如果你要使用它们,你可以选择K-Modes。

K-Modes

这种方法被用来对分类变量进行分组。我们确定这些类型的数据点之间的总不匹配度。我们的数据点之间的差异越少,它们就越相似。

K-Modes和K-Means之间的主要区别是:对于分类数据点,我们不能计算距离,因为它们不是数字值。

这种算法被用于文本挖掘应用、文档聚类、主题建模(每个聚类组代表一个特定的主题)、欺诈检测系统和市场营销。

对于数值型数据,你应该使用K-Means聚类。

K-Means

数据被聚类为k个组,其方式是同一聚类中的数据点是相关的,而其他聚类中的数据点则相距较远。这种距离经常用欧几里得距离来衡量。换句话说,K-Means算法试图最小化聚类内的距离,最大化不同聚类之间的距离。

搜索引擎、消费者细分、垃圾邮件检测系统、学术表现、缺陷诊断系统、无线通信和许多其他行业都使用K-Means聚类。

如果预期的结果是基于概率的,那么你应该使用高斯混合模型。

GMM(高斯混合模型)

这种方法意味着存在许多高斯分布,每个高斯分布代表一个集群。该算法将确定每个数据点属于给定批次数据的每个分布的概率。

GMM与K-Means不同,因为在GMM中,我们不知道一个数据点是否属于一个指定的聚类,我们使用概率来表达这种不确定性。而K-Means方法对一个数据点的位置是确定的,并开始在整个数据集上迭代。

高斯混合模型经常被用于信号处理、语言识别、异常检测和音乐的流派分类。

在使用标记数据来训练机器的情况下,首先,你需要指定它是否要预测数字,这种数字预测将有助于算法解决问题。如果是这样的话,你可以选择回归算法。

三、监督学习:回归

回归是一种机器学习算法,其结果被预测为一个连续的数值。这种方法通常用于银行、投资和其他领域。

在这里,你需要对速度和准确性做出取舍。如果你正在寻找速度,你可以使用决策树算法或线性回归算法。

决策树

决策树是一个类似树形数据结构的流程图。在这里,数据根据一个给定的参数被连续分割。每个参数允许在一个树节点中,而整个树的结果位于叶子中。有两种类型的决策树。

  • 分类树(是/否类型),这里的决策变量是分类的。
  • 回归树(连续数据类型),这里的决策或结果变量是连续的。

当特征和输出变量之间存在复杂的相互作用时,决策树就会派上用场。当存在缺失的特征,类别和数字特征的混合,或特征大小的巨大差异时,与其他方法相比,它们的表现更好。

该算法用于提高促销活动的准确性、欺诈检测以及患者严重或可预防疾病的检测。

线性回归

基于一个给定的自变量,这种方法预测因变量的值。因此,这种回归方法决定了输入(自变量)和输出(因变量)之间是否存在线性联系。这也是线性回归这一术语的由来。

线性回归非常适合于那些特征和输出变量具有线性关系的数据集。

它通常用于预测(这对小公司了解销售效果特别有用),了解广告支出和收入之间的联系,以及在医疗行业了解药物剂量和病人血压之间的相关性。

另外,如果你的算法需要准确性,你可以使用以下三种算法。神经网络、梯度提升树和随机森林。

神经网络

需要一个神经网络来学习特征和目标之间复杂的非线性关系。它是一种模拟人脑中神经元工作的算法。有几种类型的神经网络,包括香草神经网络(只处理结构化数据),以及循环神经网络和卷积神经网络,它们都可以处理非结构化数据。

当你有大量的数据(和处理能力),并且准确性对你很重要时,你几乎肯定会利用神经网络。

这种算法有很多应用,例如释义检测、文本分类、语义解析和问答。

Gradient Boosting Tree(梯度提升树)

梯度提升树是一种将不同树的输出合并进行回归或分类的方法。这两种监督学习都结合了大量的决策树,以减少每棵树单独面对的过拟合的危险(一种统计建模错误,当一个函数与少量数据点过于紧密匹配时,就会出现这种情况,使得模型的预测能力下降)。这种算法采用了Boosting,它需要连续组合弱学习器(通常是只有一次分裂的决策树,称为决策树桩),以便每棵新树都纠正前一棵树的错误。

当我们希望减少偏差误差时,也就是模型的预测与目标值之间的差异,我们通常采用梯度提升算法。

当数据的维度较少,基本的线性模型表现不佳,可解释性并不重要,而且没有严格的延迟限制时,梯度提升算法是最有利的。

它被用在很多研究中,比如基于大师级运动员动机的性别预测算法,使用梯度提升决策树,探索他们基于心理维度预测性别的能力,评估参加大师级运动的原因作为统计方法。

随机森林

随机森林是一种解决回归和分类问题的方法。它利用了集成学习,这是一种通过结合几个分类器来解决复杂问题的技术。

它由许多决策树组成,其中每一个决策树的结果都会以平均或平均决策的方式得出最终结果。树的数量越多,结果的精确度就越高。

当我们有一个巨大的数据集并且可解释性不是一个关键问题时,随机森林是合适的,因为随着数据集的增大,它变得越来越难以把握。

这种算法被用于股票市场分析、医疗领域的病人诊断、预测贷款申请人的信用度,以及欺诈检测。

对于非数字预测算法,你可以选择分类方法而不是回归。

四、监督学习:分类

与回归方法一样,你选择的结果是偏向于速度还是准确性。

如果你在寻找准确性,你不仅可以选择核支持向量机,还可以使用之前提到的其他算法,如神经网络、梯度提升树和随机森林。现在,让我们来介绍一下这个新算法。

Kernel Support Vector Machine(核支持向量机)

在支持向量机模型中,通常使用核技术来连接线性和非线性。为了理解这一点,有必要知道SVM方法学习如何通过形成决策边界来分离不同的组。

但是,当我们在一个维度较高的数据集面前,而且成本昂贵时,建议使用这种核方法。它使我们能够在原始特征空间中工作,而不必在高维空间中计算数据的坐标。

它主要用于文本分类问题,因为大多数问题都可以被线性分离。

当需要速度的时候,我们需要看看我们要采用的技术是否是可解释的,这意味着它可以解释你的模型中从头到尾发生了什么。在这种情况下,我们可能会使用决策树算法或Logistic回归算法。

Logistic Regression(逻辑回归)

当因变量是分类的时候,就会使用Logistic回归。通过概率估计,它有助于理解因变量和一个或多个自变量之间的联系。

有三种不同类型的Logistic回归。

  • 二元逻辑回归,响应只有两个可能的值。
  • 多项式Logistic回归,三个或更多的结果,没有顺序。
  • 有序逻辑回归,三个或更多的类别,有顺序。

逻辑回归算法在酒店预订中被广泛使用,它(通过统计研究)向你展示了你在预订中可能想要的选项,如酒店房间、该地区的一些行程等等。

如果你只对问题的输入和输出感兴趣,你可以检查你所处理的数据是否太大。如果数量很大,你可以使用线性支持向量机。

Linear Support Vector Machine(线性支持向量机)

线性SVM用于线性可分离的数据。它在具有不同变量的数据(线性可分离数据)中工作,这些变量可以用一条简单的直线(线性SVM分类器)来分离。这条直线代表了用户的行为或通过既定问题的结果。

由于文本通常是线性可分离的,并且有很多特征,因此线性SVM是用于其分类的最佳选择。

在我们的下一个算法中,如果数据量大或者不大,你都可以使用它。

Naïve Bayes(朴素贝叶斯)

这种算法是基于贝叶斯定理的。它包括通过对象的概率进行预测。它被称为Naïve(朴素),是因为它假设一个特征的出现与其他特征的出现无关。

这种方法深受欢迎,因为它甚至可以超越最复杂的分类方法。此外,它构造简单,可迅速建立。

由于其易于使用和高效,它被用来做实时决策。与此同时,Gmail使用这种算法来知道一封邮件是否是垃圾邮件。

Gmail垃圾邮件检测选择一组词或 "标记" 来识别垃圾邮件(这种方法也用于文本分类,它通常被称为词袋)。接下来,他们使用这些tokens(令牌),将其与垃圾邮件和非垃圾邮件进行比较。最后,使用Naïve Bayes算法,他们计算出该邮件是否是垃圾邮件的概率。

总结

我们发现,机器学习是一种被广泛使用的技术,由于它经常发生,因此我们无法识别许多应用。在这篇文章中,我们不仅区分了机器学习的不同方法,还区分了如何根据我们正在处理的数据和我们想要解决的问题来使用它们。

要学习机器学习,你必须具备一些微积分、线性代数、统计学和编程技能的知识。你可以使用不同的编程语言来实现其中一种算法,从Python到C++,以及R语言。这取决于你做出最好的决定,并与你的机器一起开始学习。

原文链接🔗:

https://medium.com/accel-ai/machine-learning-algorithms-cheat-sheet-990104aaaabc

整理不易, 三连

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/137283
 
370 次点击