Python 全栈 60 天精通之路

Day 60:AI 专家 Alicia:7500 字通俗易懂总结 10 种机器学习工程师或数据分析师必备的算法模型

发布日期:2022年3月14日 14:57 阅读: 272 访问: 273

机器学习作为一个非常热门的技术,被广泛地应用在现实工作生活中的各个领域。越来多的人从事了数据分析师和数据科学家的工作。这个行业的需求量很大,而且薪水一般都很高。而且对于很多的岗位,入门的门槛也不是很高,这样就更使得越来越多的人加入到从事数据分析的工作岗位中去。 机器学习,可以理解为是一个模型,或者是一个基于你的数据上建立的一个数学表达式。而这个数学表达式可以通过我们所拥有的数据

机器学习作为一个非常热门的技术,被广泛地应用在现实工作生活中的各个领域。越来多的人从事了数据分析师和数据科学家的工作。这个行业的需求量很大,而且薪水一般都很高。而且对于很多的岗位,入门的门槛也不是很高,这样就更使得越来越多的人加入到从事数据分析的工作岗位中去。

机器学习,可以理解为是一个模型,或者是一个基于你的数据上建立的一个数学表达式。而这个数学表达式可以通过我们所拥有的数据建立起来,也就是我们通常说的训练,通过在已知数据上的训练,就可以建立这个数学表达式。

在这个信息爆炸的时代,在这个迅速发展的时代,我们需要有更巧妙的学习方法。那么对于你,不论是刚刚从事这个行业,还是已经在这个行业的路上,我们来一起总结一下当今十大机器学习方法如下:

  • 分类问题(Classification)
  • 回归分析(Regression)
  • 聚类分析(Clustering)
  • 神经网络和深度学习(Neural Networks and Deep Learning)
  • 迁移学习(Transfer Learning)
  • 文本数据挖掘(Text Mining)
  • 嵌入技术(Embedding techniques)
  • 降维技术(Dimensionality Reduction)
  • 集成学习(Ensemble Learning)
  • 强化学习(Reinforcement Learning)

下面我们一起来看一看这十大机器学习的简介。

1. 分类问题(Classification)

分类问题是一种监督学习(Supervised machine learning)的机器学习模型,它是用来所训练建立的模型来预测一个新的数据样本是属于哪一种类别。

比如,在医学研究中,我们可以建立一个模型来预测一个病人会不会在一年之内死亡,或者在图像处理中来预测一个图像中有没有肿瘤。这两个例子都属于二分类问题。还有的属于多分类问题,比如我们需要预测一个病人属于高危人群、低危人群还是中间人群,这样的话,它的输出就是三类:高危、低危、中间。

分类问题被广泛的应用在各个领域之中。比如在我自己的工作中,几乎每个项目都跟分类问题相关。我们现在总结一下经常用到的分类问题的模型如下:

  • 线性判别分析(Linear Discriminant Analysis)
  • 逻辑回归(Logistic Regression)
  • 朴素贝叶斯分类器(Naive bayes classifier)
  • 支持向量机(Support vector machines)
  • 最近邻居法(k-nearest neighbor algorithm)
  • 提升方法(Boosting)
  • 决策树(Decision trees)
  • 随机森林(random forests)
  • 神经网络和深度学习(Neural networks and Deep learning)
  • 学习式向量量化(learning vector quantization)

如果是初学者,建议可以从简单的模型开始,比如 SVM 或者 logistic regression。如果你用 Python 或者 R,都已经有了很好的包直接可以调用。有的时候学习这种机器学习的应用型模型,一个很好的方法就是运行一遍,因为这样你能看得见,摸得着。否则只凭想象,可能会很难得到重点。

2. 回归分析(Regression)

回归分析是数据分析的一种方法,它也是属于监督学习(Supervised machine learning)里面的一种方法。主要是确定数据之间是否有一定的关系或者联系,也就是来建立因变量(通常用 Y 来表示)和 自变量(X)之间的数学关系。

在数据分析中,回归分析基于以前的数据来建立模型,然后用于对以后数据的预测。回归分析是通过大量的数据,利用统计方法来计算出来的函数关系表达式。

当只涉及到一个自变量的时候,称之为一元回归分析,而涉及到多个自变量的时候,称之为多元回归分析。除此之外,还会按照自变量和因变量之间的关系分成线性回归和非线性回归。

常用的回归分析方法总结如下:

  • 线性回归(Linear Regression)
  • 多项式回归(Polynomial regression)
  • 逻辑回归(Logistic regression)
  • Lasso 回归(Lasso Regression)
  • 逐步回归(Stepwise Regression)
  • 岭回归(Ridge Regression)
  • ElasticNet 回归(ElasticNet Regression)
  • 决策树回归(Decision trees Regression)
  • 随机森林回归(random forest Regression)
  • 神经网络回归(neural networks Regression)

我们列出了这么多中回归模型方法,不用担心,也不要迷茫。在你的实际工作中其实可以从最简单的线性回归开始写代码,实现一遍以后,你会有很深的理解,别的回归模型也是一样的流程。

3. 聚类分析(Clustering)

聚类问题是一种非监督学习(Unsupervised machine learning)的一种方法,目的是把具有相似特征的观测分到相同的组里面(group)。聚类学习不需要预先知道输出或者标签,而是会给出相对应的输出或者标签。

在聚类算法模型中,非常流行而且较早的模型称之为 K-Means 模型,名称中的 K 你可以自己定义,也就是你希望自己的数据会被分成几类,比如你希望整个数据集被分成 5 类,那么这里 K=5。K-Means 的基本原理就是随机取 K 个点作为每个类的中心,然后计算每个点离各个中心的距离,根据最短距离把这些点分到属于每个中心的类里面,然后再重新计算每个类的中心点,如果中心点基本上不变了,那么聚类分析就完成了;否则就会重复前面的过程。

我们总结工作中经常用到的聚类方法如下:

  • K-Means 聚类(K-Means Clustering)
  • 层次聚类(Hierarchical Clustering)
  • 均值漂移聚类(Mean Shift Clustering)
  • 基于密度的聚类方法(Density-based spatial clustering of applications with noise,DBSCAN)
  • PAM 聚类(Partitioning around medoids,PAM)
  • 高斯混合模型的最大期望聚类(Expectation–Maximization Clustering using Gaussian Mixture Models)

关于更好地理解什么是聚类分析,建议还是使用一个数据集,真实的数据也好,如果没有真实的数据,那么自己随机生成一个也行。如果不知道怎么生成自己随机生成数据集。然后从简单常用的 k-means 开始,使用 Python 或者 R 来实现一遍,那么你会有很好的理解,达到事半功倍的效果。

4. 神经网络和深度学习(Neural Networks and Deep Learning)

随着计算水平的提高和超级计算机的出现,人工神经网络和深度学习被越来越广泛的应用在了各个领域。因为深度学习的预测效果好,在很多个预测任务上,深度学习模型都胜出了传统的机器学习模型。而且对于深度学习模型而言,它没有什么一个具体的数学函数表达式或者方程。

深度学习模型对于计算机的要求较高,尤其是数据量很大,而且又有很多的参数。而这种模型在训练过程中会自动的不断更新这些参数的值。所以当我们用大数据训练深度学习模型时,计算机要足够强大。

我们总结经常用到的深度学习模型,并且简单明了的介绍模型的工作原理。

4.1 深度神经网络(Deep Neural Networks,DNN)

深度神经网络 DNN 是深度学习的一个模型框架,在深度神经网络学习中,模型通常由输入层(Input layer),一个或者多个隐藏层(Hidden layers),还有输出层(Output layer)组成。如果模型中有很多个隐藏层,那么这个网络就很“深”,这也是深度神经网络的由来。

由于 DNN 包括了多层隐藏层,这样它就更好的构建了非线性系统模型,提高了模型的预测能力,也会使得模型有较好的推广性。也是由于 DNN 的多层隐藏层,可能会使得模型的运行时间会很长,还可能会出现过拟合现象。为了防止过拟合现象,一种处理方法就是丢弃法("dropout"),也就是在训练中随机丢弃一部分隐层单元来避免模型需要考虑所有的信息即使是很稀少的信息。

深度神经网络 DNN 也被广泛医疗行业以及多媒体中,像在医疗行业中,对于一系列的病人的死亡预测,很多的工作和发表的论文都证明了 DNN 准确的预测能力。希望在各个领域人们会训练出更好的 DNN 模型。

4.2 卷积神经网络(CNN)

卷积神经网络(CNN)主要应用在图像处理中,CNN 的特殊模型结构使得它在图像处理中有着独特的优越性。

  • 卷积层:可以看作是不同的滤波器,主要作用是特征提取,保留图片的特征。
  • 池化层:有效地避免过拟合,降维。
  • 全连接层:输出任务需要得到的结果。

CNN 被广泛地应用于图像处理中的分类问题、目标定位问题,以及人脸识别问题等等。

4.3 循环神经网络(Recurrent neural network,RNN)

循环神经网络(RNN)也被称为递归神经网络,RNN 主要擅长处理时间序列数据,因为它具有短期的记忆能力,这样它就可以把以前的信息传递到下一个时间点,从而像人一样对于以前的发生的事情有了记忆。

RNN 可以看成是 DNN 的一种变型,在 DNN 中的上层隐含层的输出会作用到本层神经元上,即循环递归的概念。RNN 可以处理时间序列数据的应用模式,比如自然语言处理、文本生成等等。

4.4 长短期记忆模型(Long short-term memory,LSTM)

长短期记忆模型 LSTM 是 RNN 的改进,主要来解决 RNN 中短期记忆的问题,也就是我们希望让模型可以对重要的信息有更长的记忆。比如对于自己很有意义的事情,也能记忆很长时间,像我们可以深刻的记住自己认为很重要很美好的事情。

LSTM 模型可以实现长期记忆的功能,它主要通过隐含层上增加输入门、输出门和遗忘门,改变了历史数据对当前隐含层的影响方式,使得 RNN 中较远历史数据梯度丢失的问题得以解决。LSTM 被广泛应用在文本识别、时间序列预测、机器人控制、语音识别等等。

在很多的研究工作和发表的论文中,往往不是只是用一种模型。在实际工作中,往往混合使用。比如 CNN 和 RNN 在顶层输出之前往往会接上全连接层。随着技术的发展,也许越来越多的混合模型会被发明和训练出来。

参考:

5. 迁移学习(Transfer Learning)

迁移学习(Transfer Learning)也是现在机器学习领域中的一个热点。它非常符合我们的生活和学习习惯。比如,我们花了几个月的时间建立了一个深度学习模型来判别图像中的牡丹花,而且模型取得了很好的预测效果。

当我们接到一个新的任务比如来判断图像中有没有玫瑰花,那么我们应该怎么做呢?需要从头开始建立新的模型吗?还是可以把以前判别牡丹花的模型应用到玫瑰花上呢?答案当然是可以把用在牡丹花上的知识借来用在玫瑰花上,这种再次使用的技术就叫做迁移学习(Transfer Learning)。

迁移学习(Transfer Learning)是再次使用以前已经训练好的模型中的知识和信息,然后再次使用到一个新的类似的任务工作中去。这样迁移学习的优点自然很多:

  • 我们可以把好的信息传递到新的模型中从而可能会提高新的模型的能力;
  • 使用较少的数据量来训练新的数据模型,从而减少新模型的训练时间;
  • 当新的数据集只有很少的数据点时,会传输旧模型的知识过来,从而尽可能的帮助建立好的模型。

实现迁移学习(Transfer Learning)的一个例子我们可以想像如下情景。比如我们在上面的例子中使用了 15 层隐藏层来判断图像中是否有牡丹花,通过一系列的实验,我们发现可能有 13 层会对玫瑰花的预测有用,这样我们就可以把这 13 层已经存在的训练好的 13 层,和新的一个 layer 结合起来,然后这个组合的模型去预测图像中有没有玫瑰花。这样,虽然我们的任务是不一样的,但是仍然可以在此使用已经存在的信息,最大可能的应用在新的任务中去。

实现迁移学习(Transfer Learning)被越来越多地应用在游戏活动、不同种类型的癌症检测,以及文本识别等等问题和领域中。

6. 文本数据挖掘(Text Mining)

文本数据挖掘是利用某些方法比如自然语言处理(Natural language processing,NLP)技术把一堆没有结构的数据处理成有结构的数据的一种人工智能技术,而处理后的这些有结构的数据可以作为机器学习和深度学习模型的输入,也可以直接分析这些数据产生想要的结果。文本挖掘的目的就是从一堆有结构的,和非结构的数据中寻找有价值的信息从而来解决实际问题。

人的自然语言中包含着大量的信息,是当今社会数据的一个重要和一个很大比例的组成部分。怎么从这些语言信息中获取有用的信息?从而可以训练机器为我们服务。比如现在我们的手机可以自动地把语音电话翻译成文本文件,电脑可以帮我们自动地改正拼写错误的单词,等等。在这些处理技术中,自然语言处理(NLP)是数据挖掘中一种最经常使用的方法。

自然语言处理(NLP)本身不是一种机器学习的方法,而是利用 NLP 可以把文本信息处理成合适的数据,从而这些被处理的数据可以作为机器学习模型的输入。当我们面临一大堆没有结构,而且格式是各种各样的巨多文件时,也许这些文件中还包含着各种各样的拼写错误,或者还有漏写的字等等,这时候我们可以使用 NLP 技术来处理。现在最流行的处理文本文件的包就是 NLTK,大家可以自己搜一下,试一下。

词频矩阵(Term Frequency Matrix)

怎么才能把杂乱的文本信息处理成有规律的,机器学习模型可以认识的信息呢?一种很自然的想法就是把文本信息转化成数值型的。有的方法就是根据每个单词在文本中出现的频率来给每个单词赋予一个独特的数值,这样的话文本中的一句话或者一行就可以用一系列的数值表达出来。整个文本就会以数值矩阵的形式表达出来了。这种基于频率的矩阵表达形式称之为词频矩阵(Term Frequency Matrix,TFM)。

有了这个 TFM 矩阵之后,我们可以产生另外一个流行的数值矩阵表达形式,这个矩阵称之为词频逆文件(Term Frequency Inverse Document Frequency,TFIDF),这个 TFIDF 矩阵可以反应每个单词的重要性。它也可以更好地服务于机器学习模型。

但是这种矩阵表达方式主要是建立在单词出现的频率上面,而没有考虑到词和词之间的作用、相似性等等。下面我们将会介绍另外一种新的方法,来克服这些矩阵中的缺点。

7. 嵌入技术(Embedding techniques)

正如我们前面所说的,TFM 和 TFIDF 数值矩阵主要是根据单词在文本中出现的频率而得到的,它没有考虑到词语之间的相似性。为了克服这些方法的局限性,Google 组提出了一种新的嵌入方法,而他们提出的技术在我看来是属于革命性的技术。

在 2013 年,Google 组发表了第一篇关于 Word2Vec 的论文。随后被科研工作者广泛地应用在各个领域之中,因为它确实带来了前所未有的优点和便利。Word2Vec 是一种神经网络模型,它可以把文本中的词语映射到数值空间中,而词语成了有意义的数值以后,我们就可以很方便地对其来进行各种操作,用于各种模型之中。

比如网上流传的著名的“King - Man + Woman = Queen”,之所以可以对词语计算是因为,通过 Word2Vec 技术,它们被转化成了有意义的空间中的数值向量。有了数值向量以后,我们当然就可以进行加减乘除的运算了。从这一点上来讲,Word2Vec 技术真的是一个重要的发明和创新。

当然,通过 Word2Vec 技术而得到向量以后,我们就可以量化词语之间的相似性。比如可以计算常用的余弦 Cosine 相似性,它主要测量了两个向量之间的角度。

我们通过 Word2Vec 技术而得到词语的嵌入向量之后,可以对得到的向量进行分析来研究事物之间的相似性。而很多时候使用过 Word2Vec 是为了对数据进行预处理,把得到的嵌入向量作为新的机器学习或者深度学习模型的输入。比如,我们从朋友圈里面得到大量的文字信息,通过 Word2Vec 嵌入技术,得到嵌入向量,而这些向量可以作为预测模型的输入,然后来预测一个新的朋友用户在未来一年里买新车的概率。

基于 Word2Vec 技术的流行,很多好的包 packages 也早就已经出来,可以很方便地调用已经写好的函数。比如可以使用 Python 里面的 gensim,里面已经有写好的函数 Word2Vec(),我们只需要定义自己需要的参数就行了。建议自己找一些简单的句子,运行一遍 Word2Vec(),就可以看到这里面的奥妙。

8. 降维技术(Dimensionality Reduction)

降维是一个去掉冗余的不重要的变量,而只留下主要的可以保持信息的变量的过程。通常通过两种途径来实现,一个是特征选择(Feature Selection),一种是特征提取(Feature Extraction)。

在我们实际的工作中,往往会遇到大数据。这些大数据不仅仅是样本量大,往往有时候变量很多,可能会有成千上万个变量,或者称之为特征。而有时候有些特征根本就不重要,也提供不了重要的信息,它们只是一些噪音。在这种情况下,降低特征个数就非常重要。

比如在图像处理分析中,通常会有很多幅图像,比如图像是从不同角度、不同位置得到的一组庞大的图像集,而每一幅图像又包含太多的像素,这时候降维就很重要,尤其是你的任务不是需要检测每一幅图像里的每一个像素的时候。

降维的一个很流行的方法就是主成分分析(Principal Component Analysis,PCA)方法,这也是我最开始学到的第一个降维方法。PCA 是一种映射法,它会把原来的特征映射到新的空间,新的空间中的特征表示成原来特征的线性组合。而在新的主成分空间中,特征的个数会极大地减少,而研究表明 PCA 可以很好地保持原来特征所提供的信息,也就是说虽然维数大大降低了,但是 PCA 仍然可以最大程度地保留着原来的信息量。

PCA 是一种成功的降维方法,当然也可以用它来 Visualize 高维空间的数据。但是它也有一些局限的地方,比如有些研究称它是一种映射方法,映射后新的特征就变成了原来特征的线性组合,这样它的解释性就没有那么强。比如,你跟医生合作,如果你说线性组合,他们可能根本不关心,他们更想知道的是原来的特征。

所以,鉴于上面的局限性,于 2002 年,Isabelle Guyon 等人发表了一篇文章,题目是“Gene Selection for Cancer Classification using Support Vector Machines“。他们提出了一种新的降维方法,那就是 Recursive feature elimination(RFE)。这种方法没有像 PCA 那样做了线性变换,而是保持了原始的特征,而且它还考虑了原始特征之间的关系(interactions)。这个方法出来之后,变得非常流行,从它的引用率就可以看出来。

当时的 SVM-RFE 是很流行的,后来又有了别的模型的 RFE,比如 Random forest-RFE 等等。你自己也可以搜搜看看。如果感兴趣的话,也建议自己运行一遍试试,看看它的输出到底是什么,自然你就会一目了然了。

另外一种特别流行的、不得不说的降维方法就是 t-Stochastic Neighbor Embedding(tSNE),它是一种非线性的降维方法。我们可以这种方法来降低特征的个数,也就是可以用它来做特征选择,从而把选择后的特征作为机器学习模型的出入。通常情况下,我们经常使用 tSNE 来做数据的可视化(data visualization)。

9. 集成学习(Ensemble Learning)

集成学习方法是结合多个模型算法,从而提高整体的准确性,进而得到更好的预测结果。比如,我们熟知的随机森林就是一种集成学习的方法,它结合了多个决策树的预测结果,而每一个决策树又是用随机的不同的数据训练而成。所以,从这种意义上来讲,随机森林的预测表现一般比单个决策树的表现要好。

集成学习的概念应该不难理解,这个想法广泛地存在于我们的日常生活当中。比如,当我们需要买一台新的笔记本的时候,我们往往是根据自己的需要来选择自己想要的配置,像多大的内存、多大的硬盘,以及什么样的处理器等等。再比如当我们决定买一辆新车的时候,我们也是根据自己的喜好和需要,选择不同的配置,是不是需要有 GPS、有 video 的,什么样的发动机……

集成学习因为结合了多种模型,从一定程度上来讲,集成模型减少了噪音、方差和偏差,而这正是机器学习模型预测过程中产生错误的主要原因。如果我们能降低减少这些产生误差的原因,自然就可以提高模型的整体预测水平,而这也正是集成方法的重点思想所在。

我们还依然记得盲人摸象的故事。故事中,每个人只是摸到了大象的某个局部位置,当然如果只根据所摸到的这个局部位置来预测这是什么物体的话,自然会有偏差,当然不能很好地真实地猜出来。而如果我们结合了所有盲人所得到的信息,把这些信息结合在一起,而进行猜测是什么物体的话,准确率自然会大大提升。

因此,我们再一次看到了集成学习方法的思想所在。它是一种降低方差、偏差和噪音的方法。基本上,每种模型都是在某些情况下表现很好,而在某些特定情况下表现得不好。这样,通过结合这几种单独的模型,那么集成的模型就会某种程度上克服这些缺点,从而整体上胜出任何一个单独的模型。

集成学习模型被广泛的应用于各个领域之中,像土地覆盖图、人脸识别、面部表情识别等等。而比较流行的集成方法有随机森林、XGBoost、贝叶森模型……

10. 强化学习(Reinforcement Learning)

强化学习(Reinforcement Learning)是机器学习领域的三大分支之一,另外两种是我们熟知的监督学习,和非监督学习方法。

强化学习也广泛的存在于我们的日常生活工作中。

比如,我们把一只猫放在一个屋子里,这个屋子里也同时放有小猫爱吃的小鱼。这只猫试图去寻找小鱼。刚开始的时候,这只小猫可能会很随机的找来找去,然而随着小猫呆在这个屋子里的时间越长,它再寻找小鱼的时候就越来越不随机了。也就是说小猫之前的寻找经历帮助它会越来越容易的找到它想吃的小鱼。

上面这个例子便是强化学习的思想,也就是说强化学习是一种帮助智能体(agent)从经验中学习的一种机器学习方法。它是一个通过记录在一个环境中的行动,使用尝试错误或者不断的试错法而最大化预计累计奖励(cumulative reward)。在我们上面的那个例子中,这个猫就是智能体 agent,屋子就是环境 environment,一组可能的小猫的动作 actions 包括比如向前、向后、向左、向右等等。这个奖励 reward 就是小鱼。

强化学习和监督学习是不一样的。在监督学习中,我们用历史已知的数据来训练智能体 agent,而且训练的时候,数据是有 label 的,也就是说我们会告诉什么样的动作 action 是正确的。这样的话,智能体经过训练之后,就会在新的数据上进行预测了。监督学习可以解决分类问题和回归问题。

然而,强化学习不依赖于有标签 label 的数据。我们不会告诉智能体什么样的行动是正确的,它是通过奖罚的方式来启示智能体的某个行动是好的还是坏的。也就是我们上面提到的,强化学习是通过延时反馈和错误尝试去获得学习而得到最大奖励的一种方法,这也是它和监督学习的一个区别。

强化学习也不同于非监督学习方法。在非监督学习中,我们会分析没有标签的数据,从而试图找到数据点潜在的联系和关系,从而确定相似性或者不同性。而强化学习却是试图找到最好的行动从而得到最大的长期的奖励,所以它和非监督学习也是不一样的。

在 1997 年,IBM 的 Deep Blue 战胜了人类最厉害的象棋冠军。在最近的 2016,AlphaGo 也打败了最好的 Go player。它们都是基于强化训练的模型。强化学习应用于广告业、机器人训练等领域中。

小结

以上的十种机器学习方法的总结,希望会对你有一些帮助。理解这些模型的基本思想是一个基本出发点,当然会对你后续的学习会有帮助。在这里还没有覆盖很多别的知识点,像如何评估模型、怎么处理分类问题中的不平衡类别的数据集、交叉验证技术、欠采样和过采样技术等等。可参考专栏之前天的文章。

祝在数据分析师、数据科学家或者机器学习工程师的道路上越来越顺利,越来越喜欢!