机器学习中,模型、算法如何选择?
来自:https://zhuanlan.zhihu.com/p/32953163
人工智能中涉及的算法太多,就机器学习中用到的也不少,如何才能选择合适的算法?
That is the question. 下来笔者就带领大家看看都有哪些算法,以及如何选择。
本文的大纲:
一,从机器学习问题角度分类
二,从算法的功能角度分类
三,机器学习算法决策树
---------------------------
一,从机器学习问题角度分类
我们先从机器学习问题本身分类的角度来看,我们可以分成下列类型的算法。
监督学习
机器学习中有一大部分的问题属于监督学习的范畴,简单口语化地说明,这类问题中,给定的训练样本中,每个样本的输入x都对应一个确定的结果y,我们需要训练出一个模型(数学上看是一个x→y的映射关系f),在未知的样本x′给定后,我们能对结果y′做出预测。
这里的预测结果如果是离散值(很多时候是类别类型,比如邮件分类问题中的垃圾邮件/普通邮件,比如用户会/不会购买某商品),那么我们把它叫做分类问题(classification problem);如果预测结果是连续值(比如房价,股票价格等等),那么我们把它叫做回归问题(regression problem)。
有一系列的机器学习算法是用以解决监督学习问题的,比如最经典的用于分类问题的朴素贝叶斯、逻辑回归、支持向量机等等;比如说用于回归问题的线性回归等等。
无监督学习
有另外一类问题,给我们的样本并没有给出“标签/标准答案”,就是一系列的样本。而我们需要做的事情是,在一些样本中抽取出通用的规则。这叫做无监督学习。包括关联规则和聚类算法在内的一系列机器学习算法都属于这个范畴。
半监督学习
这类问题给出的训练数据,有一部分有标签,有一部分没有标签。我们想学习出数据组织结构的同时,也能做相应的预测。此类问题相对应的机器学习算法有自训练(Self-Training)、直推学习(Transductive Learning)、生成式模型(Generative Model)等。
总体说来,最常见是前两类问题,而对应前两类问题的一些机器学习算法如下:
算法分类
二,从算法的功能角度分类
我们也可以从算法的共性(比如功能,运作方式)角度对机器学习算法分类。下面我们根据算法的共性去对它们归个类。不过需要注意的是,我们下面的归类方法可能对分类和回归有比较强的倾向性,而这两类问题也是最常遇到的。
回归算法(Regression Algorithms)
网络图片,侵删
回归算法是一种通过最小化预测值与实际结果值之间的差距,而得到输入特征之间的最佳组合方式的一类算法。对于连续值预测有线性回归等,而对于离散值/类别预测,我们也可以把逻辑回归等也视作回归算法的一种,常见的回归算法如下:
- Ordinary Least Squares Regression (OLSR)
- Linear Regression
- Logistic Regression
- Stepwise Regression
- Locally Estimated Scatterplot Smoothing (LOESS)
- Multivariate Adaptive Regression Splines (MARS)
基于实例的算法(Instance-based Algorithms)
网络图片,侵删
这里所谓的基于实例的算法,我指的是我们最后建成的模型,对原始数据样本实例依旧有很强的依赖性。这类算法在做预测决策时,一般都是使用某类相似度准则,去比对待预测的样本和原始样本的相近度,再给出相应的预测结果。常见的基于实例的算法有:
- k-Nearest Neighbour (kNN)
- Learning Vector Quantization (LVQ)
- Self-Organizing Map (SOM)
- Locally Weighted Learning (LWL)
决策树类算法(Decision Tree Algorithms)
网络图片,侵删
决策树类算法,会基于原始数据特征,构建一颗包含很多决策路径的树。预测阶段选择路径进行决策。常见的决策树算法包括:
- Classification and Regression Tree (CART)
- Iterative Dichotomiser 3 (ID3)
- C4.5 and C5.0 (different versions of a powerful approach)
- Chi-squared Automatic Interaction Detection (CHAID)
- M5
- Conditional Decision Trees
贝叶斯类算法(Bayesian Algorithms)
这里说的贝叶斯类算法,指的是在分类和回归问题中,隐含使用了贝叶斯原理的算法。包括:
- Naive Bayes
- Gaussian Naive Bayes
- Multinomial Naive Bayes
- Averaged One-Dependence Estimators (AODE)
- Bayesian Belief Network (BBN)
- Bayesian Network (BN)
聚类算法(Clustering Algorithms)
网络图片,侵删
聚类算法做的事情是,把输入样本聚成围绕一些中心的『数据团』,以发现数据分布结构的一些规律。常用的聚类算法包括:
- k-Means
- Hierarchical Clustering
- Expectation Maximisation (EM)
关联规则算法(Association Rule Learning Algorithms)
网络图片,侵删
关联规则算法是这样一类算法:它试图抽取出,最能解释观察到的训练样本之间关联关系的规则,也就是获取一个事件和其他事件之间依赖或关联的知识,常见的关联规则算法有:
- Apriori algorithm
- Eclat algorithm
人工神经网络类算法(Artificial Neural Network Algorithms)
网络图片,侵删
这是受人脑神经元工作方式启发而构造的一类算法。需要提到的一点是,我把“深度学习”单拎出来了,这里说的人工神经网络偏向于更传统的感知算法,主要包括:
- Perceptron
- Back-Propagation
- Radial Basis Function Network (RBFN)
深度学习(Deep Learning Algorithms)
网络图片,侵删
深度学习是近年来非常火的机器学习领域,相对于上面列的人工神经网络算法,它通常情况下,有着更深的层次和更复杂的结构。该类算法广泛应用于计算机视觉。
- Deep Boltzmann Machine (DBM)
- Deep Belief Networks (DBN)
- Convolutional Neural Network (CNN)
- Stacked Auto-Encoders
降维算法(Dimensionality Reduction Algorithms)
网络图片,侵删
从某种程度上说,降维算法和聚类其实有点类似,因为它也在试图发现原始训练数据的固有结构,但是降维算法在试图,用更少的信息(更低维的信息)总结和描述出原始信息的大部分内容。
有意思的是,降维算法一般在数据的可视化,或者是降低数据计算空间有很大的作用。它作为一种机器学习的算法,很多时候用它先处理数据,再灌入别的机器学习算法学习。主要的降维算法包括:
- Principal Component Analysis (PCA)
- Principal Component Regression (PCR)
- Partial Least Squares Regression (PLSR)
- Sammon Mapping
- Multidimensional Scaling (MDS)
- Linear Discriminant Analysis (LDA)
- Mixture Discriminant Analysis (MDA)
- Quadratic Discriminant Analysis (QDA)
- Flexible Discriminant Analysis (FDA)
模型融合算法(Ensemble Algorithms)
网络图片,侵删
严格意义上来说,这不算是一种机器学习算法,而更像是一种优化手段/策略,它通常是结合多个简单的弱机器学习算法,去做更可靠的决策。拿分类问题举个例,直观的理解,就是单个分类器的分类是可能出错,不可靠的,但是如果多个分类器投票,那可靠度就会高很多。常用的模型融合增强方法包括:
- Random Forest
- Boosting
- Bootstrapped Aggregation (Bagging)
- AdaBoost
- Stacked Generalization (blending)
- Gradient Boosting Machines (GBM)
- Gradient Boosted Regression Trees (GBRT)
三,机器学习算法决策树
为了达到快速选择算法的目的,特将常用算法制作了一棵决策树,每一组条件都是对应一条路径,能找到相对较为合适的一些解决方法,如下图:
首先样本量如果非常少的话,其实所有的机器学习算法都没有办法从里面“学到”通用的规则和模式,所以多弄点数据是王道。然后根据问题是有/无监督学习和连续值/离散值预测,分成了分类、聚类、回归和 维度约减 四个方法类,每个类里根据具体情况的不同,又有不同的处理方法。
有了这棵决策树,就可以很轻松的根据拥有的数据和目的选择合适的算法,祝各位学习愉快。