在理解了我们需要解决的机器学习问题之后,我们可以思考一下我们需要收集什么数据以及我们可以用什么算法。本文我们会过一遍最流行的机器学习算法,大致了解哪些方法可用,很有帮助。
机器学习领域有很多算法,然后每种算法又有很多延伸,所以对于一个特定问题,如何确定一个正确的算法是很困难的。本文中我想给你们两种方法来归纳在现实中会遇到的算法。
学习方式
根据如何处理经验、环境或者任何我们称之为输入的数据,算法分为不同种类。机器学习和人工智能课本通常先考虑算法可以适应的学习方式。
这里只讨论几个主要的学习风格或学习模型,并且有几个基本的例子。这种分类或者组织的方法很好,因为它迫使你去思考输入数据的角色和模型准备的过程,然后选择一个最适合你的问题的算法,从而得到最佳的结果。
监督学习
在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。
监督式学习的常见应用场景如分类问题和回归问题。
常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)
无监督学习
在非监督式学习中,数据并不被特别标识,也没有确定的结果。学习模型是为了推断出数据的一些内在结构。
常见的应用场景包括关联规则的学习(Association rule learning)以及聚类等。
常见算法包括Apriori算法以及K-均值(k-Means)算法。
半监督学习
在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。
应用场景包括分类和回归。
算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。
增强学习
在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,输入数据可以刺激模型并且使模型做出反应。反馈不仅从监督学习的学习过程中得到,还从环境中的奖励或惩罚中得到。在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。
常见的应用场景包括动态系统以及机器人控制等。
常见算法包括Q-Learning以及时间差学习(Temporal difference learning)
当整合数据模拟商业决策时,大多数会用到监督学习和无监督学习的方法。当下一个热门话题是半监督学习,比如图像分类问题,这中问题中有一个大的数据库,但是只有一小部分图片做了标记。增强学习多半还是用在机器人控制和其他控制系统的开发上。
算法相似性
算法基本上从功能或者形式上来分类。比如,基于树的算法,神经网络算法。这是一个很有用的分类方式,但并不完美。因为有许多算法可以轻易地被分到两类中去,比如说Learning Vector Quantization就同时是神经网络类的算法和基于实例的方法。正如机器学习算法本身没有完美的模型一样,算法的分类方法也没有完美的。
在这一部分我列出了我认为最直观的方法归类的算法。我并没有穷尽算法或者分类方法,但是我想对于让读者有一个大致了解很有帮助。如果有你了解的我没有列出来,欢迎留言分享。现在我们开始!
Regression
Regression(回归分析)是试图采用对误差的衡量来探索变量之间的关系的一类算法,关心的是变量之间的关系。回归算法是统计机器学习的利器,应用的是统计方法。在机器学习领域,人们说起回归,有时候是指一类问题,有时候是指一类算法,这一点常常会使初学者有所困惑。常见的回归算法包括:
- 最小二乘法(Ordinary Least Square)
- 逻辑回归(Logistic Regression)
- 逐步式回归(Stepwise Regression)
- 多元自适应回归样条(Multivariate Adaptive Regression Splines)
- 本地散点平滑估计(Locally Estimated Scatterplot Smoothing)
Instance-based Methods
Instance based learning(基于实例的学习)常常用来对决策问题建立模型,所使用的实例或者例子是对模型非常重要的。这样的模型常常先选取一批样本数据,然后根据某些近似性把新数据与样本数据进行比较。通过这种方式来寻找最佳的匹配。因此,基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”,(胜者为王方法和基于内存的方法)。
现在关注的焦点在存储数据的表现形式和相似性测量方法。
- k-Nearest Neighbor(KNN)
- 学习矢量量化(Learning Vector Quantization, LVQ)
- 以及自组织映射算法(Self-Organizing Map , SOM)
Regularization Methods
正则化方法(Regularization Methods)是其他算法(通常是回归算法)的延伸,根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。这个延伸对越简单的模型越有利,并且更擅长归纳。我在这里列出它是因为它的流行和强大。
- Ridge Regression
- Least Absolute Shrinkage and Selection Operator(LASSO)
- 弹性网络(Elastic Net)。
Decision Tree Learning
Decision tree methods(决策树方法) 建立了一个根据数据中实际值决策的模型。它根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。常见的算法包括:
- 分类及回归树(Classification And Regression Tree, CART)
- ID3 (Iterative Dichotomiser 3)
- C4.5
- Chi-squared Automatic Interaction Detection(CHAID)
- Decision Stump
- 随机森林(Random Forest)
- 多元自适应回归样条(MARS)
- 梯度推进机(Gradient Boosting Machine, GBM)
Bayesian
Bayesian method(贝叶斯方法)是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:
- 朴素贝叶斯算法(Naive Bayes)
- 平均单依赖估计(Averaged One-Dependence Estimators, AODE)
- Bayesian Belief Network(BBN)。
Kernel Methods
Kernel Method(基于核的算法)中最著名的莫过于支持向量机(SVM)了。 基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括:
- 支持向量机(Support Vector Machine, SVM)
- 径向基函数(Radial Basis Function ,RBF)
- 线性判别分析(Linear Discriminate Analysis ,LDA)等
Clustering Methods
Clustering(聚类),就像回归一样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括:
- k-Means算法
- 期望最大化算法(Expectation Maximization, EM)。
Association Rule Learning
Association rule learning(联合规则学习)学习通过寻找最能够解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则,是用来对数据间提取规律的方法,通过这些规律可以发现巨量多维空间数据之间的联系,而这些重要的联系可以被组织拿来使用。
- Apriori algorithm
- Eclat algorithm
Artificial Neural Networks
Artificial Neural Networks(人工神经网络)模拟生物神经网络,是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不同的算法。(其中深度学习就是其中的一类算法,我们会单独讨论),重要的人工神经网络算法包括:
- 感知器神经网络(Perceptron Neural Network)
- 反向传递(Back Propagation)
- Hopfield网络(Hopfield Network)
- 自组织映射(Self-Organizing Map, SOM)
- 学习矢量量化(Learning Vector Quantization, LVQ)
Deep Learning
Deep Learning(深度学习)算法是对人工神经网络的发展。 在计算能力变得日益廉价的今天,深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法,这种学习的问题中有很大的数据,但是其中很少是被标记的数据。常见的深度学习算法包括:
- 受限波尔兹曼机(Restricted Boltzmann Machine, RBN)
- Deep Belief Networks(DBN)
- 卷积网络(Convolutional Network)
- 堆栈式自动编码器(Stacked Auto-encoders)。
Dimensionality Reduction
像聚类算法一样,降低维度算法试图分析数据的内在结构,追求和利用数据中的统一的结构,不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这对于对数据进行可视化或者简化数据很有用。常见的算法包括:
- 主成份分析(Principle Component Analysis, PCA)
- 偏最小二乘回归(Partial Least Square Regression,PLS)
- Sammon映射(Sammon Mapping)
- 多维尺度(Multi-Dimensional Scaling, MDS)
- 投影追踪(Projection Pursuit)
Ensemble Methods
Ensemble Methods(集成算法)用一些相对较小的学习模型独立地就同样的样本进行训练,然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法,同时也非常流行。常见的算法包括:
- Boosting
- Bootstrapped Aggregation(Bagging)
- AdaBoost
- 堆叠泛化(Stacked Generalization, Blending)
- 梯度推进机(Gradient Boosting Machine, GBM)
- 随机森林(Random Forest)。
Probabilistic graphical model
Probabilistic graphical model(概率图模型)使用一类图来表达变量相关关系的概率模型,它以图为工具,最常见的是用一个节点表示一个或一组随机变量,节点之间的便表示变量间的概率相关关系,即“变量关系图”。根据变的性质不同,概率图模型大致可分为两类:第一类是使用有向无环图表示变量之间的依赖关系,称为有向图模型或者贝叶斯网(Bayesian network);第二类是使用无向图表示变量之间的相关关系,称为无向图模型或者马尔可夫网(Markov network)。
- 隐马尔可夫模型(Hidden Markov Model,HMM)
- 马尔可夫随机场(Markov Random Field,MRF)
- 条件随机场(Conditional Random Field,CRF)
其他资源
这趟机器学习算法之旅意在让你对有什么算法和关联算法的一些工具给你一个总体了解。
下面是一些其他资源, 请不要觉得太多,了解越多算法对你越有好处,但是对某些算法有深层次的了解也会很有用。
List of Machine Learning Algorithms: 这是维基上的资源,虽然很全,但我认为分类不是很好。
Machine Learning Algorithms Category: 这也是在维基上的资源,比上面的略好一点,用字母排序。
CRAN Task View: Machine Learning & Statistical Learning: 机器学习算法的R语言拓展包,看看对于你了解别人都在用什么比较好。
Top 10 Algorithms in Data Mining: 这是发表的文章(Published article),现在是一本书(book),包括了最流行的数据挖掘算法。另一个基础的算法列表,这里列出的算法少很多,有助于你深入学习。