目录
正则化算法(Regularization Algorithms)
集成算法(Ensemble Algorithms)
决策树算法(Decision Tree Algorithm)
回归(Regression)
人工神经网络(Artificial Neural Network)
深度学习(Deep Learning)
支持向量机(Support Vector Machine)
降维算法(Dimensionality Reduction Algorithms)
聚类算法(Clustering Algorithms)
基于实例的算法(Instance-based Algorithms)
贝叶斯算法(Bayesian Algorithms)
关联规则学习算法(Association Rule Learning Algorithms)
图模型(Graphical Models)
实验[1]:比较在不同数据集上(121个),不同的分类器(179个)的实际效果。
正则化算法(Regularization Algorithms)
它是另一种方法(通常是回归方法)的拓展,这种方法会基于模型复杂性对其进行惩罚,它喜欢相对简单能够更好的泛化的模型。
例子:
岭回归(Ridge Regression)
最小绝对收缩与选择算子(LASSO)
GLASSO
弹性网络(Elastic Net)
最小角回归(Least-Angle Regression)
适用范围:
优点:
其惩罚会减少过拟合
总会有解决方法
缺点:
惩罚会造成欠拟合
很难校准
集成算法(Ensemble algorithms)
集成方法是由多个较弱的模型集成模型组,其中的模型可以单独进行训练,并且它们的预测能以某种方式结合起来去做出一个总体预测。
该算法主要的问题是要找出哪些较弱的模型可以结合起来,以及结合的方法。这是一个非常强大的技术集,因此广受欢迎。
核心理念:三个臭皮匠,顶个诸葛亮。
翻译过来就是:当我们把多个较弱的分类器结合起来的时候,它的结果会比一个强的分类器更强
典型的例子是AdaBoost。
AdaBoost的实现是一个渐进的过程,从一个最基础的分类器开始,每次寻找一个最能解决当前错误样本的分类器。用加权取和(weighted sum)的方式把这个新分类器结合进已有的分类器中。
它的好处是自带了特征选择(feature selection),只使用在训练集中发现有效的特征(feature)。这样就降低了分类时需要计算的特征数量,也在一定程度上解决了高维数据难以理解的问题。
最经典的AdaBoost实现中,它的每一个弱分类器其实就是一个决策树。、
随机森林也是一种典型的集成算法。它首先随机选取不同的特征(feature)和训练样本(training sample),生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。
随机森林在现实分析中被大量使用,它相对于决策树,在准确性上有了很大的提升,同时一定程度上改善了决策树容易被攻击的特点。
同样是弱分类器组合的思路,相对于Boosting,其实Bagging更好理解。它首先随机地抽取训练集(training set),以之为基础训练多个弱分类器。然后通过取平均,或者投票(voting)的方式决定最终的分类结果。
因为它随机选取训练集的特点,Bagging可以一定程度上避免过渡拟合(overfit)。
在[1]中,最强的Bagging算法是基于SVM的。如果用定义不那么严格的话,随机森林也算是Bagging的一种。
例子:
Boosting
Bootstrapped Aggregation(Bagging)
AdaBoost
层叠泛化(Stacked Generalization)(blending)
梯度推进机(Gradient Boosting Machines,GBM)
梯度提升回归树(Gradient Boosted Regression Trees,GBRT)
随机森林(Random Forest)
随机森林适用情景:
数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。
Boosting使用情景:
好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。
Bagging使用情景:
相较于经典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和参数的选择关系比较大,用默认参数往往没有很好的效果。
虽然调对参数结果会比决策树和LR好,但是模型也变得复杂了,没事有特别的原因就别用它了。
优点:
当先最先进的预测几乎都使用了算法集成。它比使用单个模型预测出来的结果要精确的多
缺点:
需要大量的维护工作
决策树算法(Decision Tree Algorithm)
决策树学习使用一个决策树作为一个预测模型,它将对一个 item(表征在分支上)观察所得映射成关于该 item 的目标值的结论(表征在叶子中)。
树模型中的目标是可变的,可以采一组有限值,被称为分类树;在这些树结构中,叶子表示类标签,分支表示表征这些类标签的连接的特征。
决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。
虽然生成的树不容易给用户看,但是数据分析的时候,通过观察树的上层结构,能够对分类器的核心思路有一个直观的感受。
举个简单的例子,当我们预测一个孩子的身高的时候,决策树的第一层可能是这个孩子的性别。男生走左边的树进行进一步预测,女生则走右边的树。这就说明性别对身高有很强的影响。
例子:
分类和回归树(Classification and Regression Tree,CART)
Iterative Dichotomiser 3(ID3)
C4.5 和 C5.0(一种强大方法的两个不同版本)
适用情景:
因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。
同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。
受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石。
优点:
容易解释
非参数型
简单的理解和解释。树可以被可视化。
需要很少的数据准备。其他技术通常需要数据归一化,需要创建虚拟变量,并删除空值。请注意,此模块不支持缺少值。
使用树的成本(即,预测数据)在用于训练树的数据点的数量上是对数的。
能够处理数字和分类数据。其他技术通常专门用于分析只有一种变量类型的数据集。有关更多信息,请参阅算法
能够处理多输出问题。
使用白盒模型。如果给定的情况在模型中是可观察的,那么条件的解释很容易用布尔逻辑来解释。相比之下,在黑匣子模型(例如,在人造神经网络中),结果可能更难解释。
可以使用统计测试验证模型。这样可以说明模型的可靠性。
即使其假设被数据生成的真实模型有些违反,表现良好。
缺点:
趋向过拟合
可能或陷于局部最小值中
没有在线学习
策树学习者可以创建不能很好地推广数据的过于复杂的树。这被称为过拟合。修剪(目前不支持)的机制,设置叶节点所需的最小采样数或设置树的最大深度是避免此问题的必要条件。
决策树可能不稳定,因为数据中的小变化可能会导致完全不同的树生成。通过使用合奏中的决策树来减轻这个问题。
在最优性的几个方面甚至是简单的概念,已知学习最优决策树的问题是NP完整的。因此,实际的决策树学习算法基于启发式算法,例如在每个节点进行局部最优决策的贪心算法。这样的算法不能保证返回全局最优决策树。这可以通过在综合学习者中训练多个树木来缓解,其中特征和样本随机抽样取代。
有一些难以学习的概念,因为决策树不能很容易地表达它们,例如XOR,奇偶校验或复用器问题。
如果某些类占主导地位,决策树学习者会创造有偏见的树。因此,建议在拟合之前平衡数据集与决策树。
回归(Regression)算法
回归是用于估计两种变量之间关系的统计过程。当用于分析因变量和一个 多个自变量之间的关系时,该算法能提供很多建模和分析多个变量的技巧。具体一点说,回归分析可以帮助我们理解当任意一个自变量变化,另一个自变量不变时,因变量变化的典型值。最常见的是,回归分析能在给定自变量的条件下估计出因变量的条件期望。
回归算法是统计学中的主要算法,它已被纳入统计机器学习。
回归方法的核心就是为函数找到最合适的参数,使得函数的值和样本的值最接近。例如线性回归(Linear regression)就是对于函数f(x)=ax+b,找到最合适的a,b。
逻辑回归拟合的就不是线性函数了,它拟合的是一个概率学中的函数,f(x)的值这时候就反映了样本属于这个类的概率。
例子:
普通最小二乘回归(Ordinary Least Squares Regression,OLSR)
线性回归(Linear Regression)
逻辑回归(Logistic Regression)
逐步回归(Stepwise Regression)
多元自适应回归样条(Multivariate Adaptive Regression Splines,MARS)
本地散点平滑估计(Locally Estimated Scatterplot Smoothing,LOESS)
逻辑回归适用情景:
LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。
因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。
虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。
优点:
直接、快速
知名度高
缺点:
要求严格的假设
需要处理异常值
人工神经网络
人工神经网络是受生物神经网络启发而构建的算法模型。
它是一种模式匹配,常被用于回归和分类问题,但拥有庞大的子域,由数百种算法和各类问题的变体组成。
它的核心思路是利用训练样本(training sample)来逐渐地完善参数。还是举个例子预测身高的例子,如果输入的特征中有一个是性别(1:男;0:女),而输出的特征是身高(1:高;0:矮)。那么当训练样本是一个个子高的男生的时候,在神经网络中,从“男”到“高”的路线就会被强化。同理,如果来了一个个子高的女生,那从“女”到“高”的路线就会被强化。
最终神经网络的哪些路线比较强,就由我们的样本所决定。
神经网络的优势在于,它可以有很多很多层。如果输入输出是直接连接的,那它和LR就没有什么区别。但是通过大量中间层的引入,它就能够捕捉很多输入特征之间的关系。卷积神经网络有很经典的不同层的可视化展示(visulization),我这里就不赘述了。
神经网络的提出其实很早了,但是它的准确率依赖于庞大的训练集,原本受限于计算机的速度,分类效果一直不如随机森林和SVM这种经典算法。
例子:
感知器
反向传播
Hopfield 网络
径向基函数网络(Radial Basis Function Network,RBFN)
使用情景:
数据量庞大,参数之间存在内在联系的时候。
当然现在神经网络不只是一个分类器,它还可以用来生成数据,用来做降维,这些就不在这里讨论了。
优点:
在语音、语义、视觉、各类游戏(如围棋)的任务中表现极好。
算法可以快速调整,适应新的问题。
缺点:
需要大量数据进行训练
训练要求很高的硬件配置
模型处于「黑箱状态」,难以理解内部机制
元参数(Metaparameter)与网络拓扑选择困难。
深度学习(Deep Learning)
深度学习是人工神经网络的最新分支,它受益于当代硬件的快速发展。
众多研究者目前的方向主要集中于构建更大、更复杂的神经网络,目前有许多方法正在聚焦半监督学习问题,其中用于训练的大数据集只包含很少的标记。
例子:
深玻耳兹曼机(Deep Boltzmann Machine,DBM)
Deep Belief Networks(DBN)
卷积神经网络(CNN)
Stacked Auto-Encoders
优点/缺点:见神经网络
支持向量机(Support Vector Machines)
给定一组训练事例,其中每个事例都属于两个类别中的一个,支持向量机(SVM)训练算法可以在被输入新的事例后将其分类到两个类别中的一个,使自身成为非概率二进制线性分类器。
SVM 模型将训练事例表示为空间中的点,它们被映射到一幅图中,由一条明确的、尽可能宽的间隔分开以区分两个类别。
随后,新的示例会被映射到同一空间中,并基于它们落在间隔的哪一侧来预测它属于的类别。
SVM的核心思想就是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。
最早的SVM是平面的,局限很大。但是利用核函数(kernel function),我们可以把平面投射(mapping)成曲面,进而大大提高SVM的适用范围。
提高之后的SVM同样被大量使用,在实际分类中展现了很优秀的正确率。
适用情景:
SVM在很多数据集上都有优秀的表现。
相对来说,SVM尽量保持与样本间距离的性质导致它抗攻击的能力更强。
和随机森林一样,这也是一个拿到数据就可以先尝试一下的算法。
优点:
在非线性可分问题上表现优秀
缺点:
非常难以训练
很难解释
降维算法(Dimensionality Reduction Algorithms)
和集簇方法类似,降维追求并利用数据的内在结构,目的在于使用较少的信息总结或描述数据。
这一算法可用于可视化高维数据或简化接下来可用于监督学习中的数据。许多这样的方法可针对分类和回归的使用进行调整。
其中判别分析主要是统计那边在用。判别分析的典型例子是线性判别分析(Linear discriminant analysis),简称LDA。
(这里注意不要和隐含狄利克雷分布(Latent Dirichlet allocation)弄混,虽然都叫LDA但说的不是一件事。)
LDA的核心思想是把高维的样本投射(project)到低维上,如果要分成两类,就投射到一维。要分三类就投射到二维平面上。这样的投射当然有很多种不同的方式,LDA投射的标准就是让同类的样本尽量靠近,而不同类的尽量分开。对于未来要预测的样本,用同样的方式投射之后就可以轻易地分辨类别了。
例子:
主成分分析(Principal Component Analysis (PCA))
主成分回归(Principal Component Regression (PCR))
偏最小二乘回归(Partial Least Squares Regression (PLSR))
Sammon 映射(Sammon Mapping)
多维尺度变换(Multidimensional Scaling (MDS))
投影寻踪(Projection Pursuit)
线性判别分析(Linear Discriminant Analysis (LDA))
混合判别分析(Mixture Discriminant Analysis (MDA))
二次判别分析(Quadratic Discriminant Analysis (QDA))
灵活判别分析(Flexible Discriminant Analysis (FDA))
判别分析使用情景:
判别分析适用于高维数据需要降维的情况,自带降维功能使得我们能方便地观察样本分布。它的正确性有数学公式可以证明,所以同样是很经得住推敲的方式。
但是它的分类准确率往往不是很高,所以不是统计系的人就把它作为降维工具用吧。
同时注意它是假定样本成正态分布的,所以那种同心圆形的数据就不要尝试了。
优点:
可处理大规模数据集
无需在数据上进行假设
缺点:
难以搞定非线性数据
难以理解结果的意义
聚类算法(Clustering Algorithms)
聚类算法是指对一组目标进行分类,属于同一组(亦即一个类,cluster)的目标被划分在一组中,与其他组目标相比,同一组目标更加彼此相似(在某种意义上)。
例子:
K-均值(k-Means)
k-Medians 算法
Expectation Maximi 封层 ation (EM)
最大期望算法(EM)
分层集群(Hierarchical Clstering)
优点:
让数据变得有意义
缺点:
结果难以解读,针对不寻常的数据组,结果可能无用。同样的数据每次得到的结果可能不同。有不好的局部最小值
k均值非常依赖初始簇中心的位置,
基于实例的算法(Instance-based Algorithms)
基于实例的算法(有时也称为基于记忆的学习)是这样学 习算法,不是明确归纳,而是将新的问题例子与训练过程中见过的例子进行对比,这些见过的例子就在存储器中。
之所以叫基于实例的算法是因为它直接从训练实例中建构出假设。这意味这,假设的复杂度能随着数据的增长而变化:最糟的情况是,假设是一个训练项目列表,分类一个单独新实例计算复杂度为 O(n)
典型的例子是KNN,它的思路就是——对于待判断的点,找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。
它的特点是完全跟着数据走,没有数学模型可言。
例子:
K 最近邻(k-Nearest Neighbor (kNN))
学习向量量化(Learning Vector Quantization (LVQ))
自组织映射(Self-Organizing Map (SOM))
局部加权学习(Locally Weighted Learning (LWL))
适用范围:
需要一个特别容易解释的模型的时候。
比如需要向用户解释原因的推荐算法。
优点:
算法简单、结果易于解读
缺点:
内存使用非常高
计算成本高
不可能用于高维特征空间
贝叶斯算法(Bayesian Algorithms)
贝叶斯方法是指明确应用了贝叶斯定理来解决如分类和回归等问题的方法。
典型的例子是Naive Bayes,核心思路是根据条件概率计算待判断点的类型。
是相对容易理解的一个模型,至今依然被垃圾邮件过滤器使用。
例子:
朴素贝叶斯(Naive Bayes)
高斯朴素贝叶斯(Gaussian Naive Bayes)
多项式朴素贝叶斯(Multinomial Naive Bayes)
平均一致依赖估计器(Averaged One-Dependence Estimators (AODE))
贝叶斯信念网络(Bayesian Belief Network (BBN))
贝叶斯网络(Bayesian Network (BN))
适用情景:
需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候。
可以高效处理高维数据,虽然结果可能不尽如人意。
优点:
快速、易于训练、给出了它们所需的资源能带来良好的表现
1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
如果输入变量是相关的,则会出现问题
1) 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
4)对输入数据的表达形式很敏感。
关联规则学习算法(Association Rule Learning Algorithms)
关联规则学习方法能够提取出对数据中的变量之间的关系的最佳解释。比如说一家超市的销售数据中存在规则 {洋葱,土豆}=> {汉堡},那说明当一位客户同时购买了洋葱和土豆的时候,他很有可能还会购买汉堡肉。
例子:
Apriori 算法(Apriori algorithm)
Eclat 算法(Eclat algorithm)
FP-growth
图模型(Graphical Models)
图模型或概率图模型(PGM/probabilistic graphical model)是一种概率模型,一个图(graph)可以通过其表示随机变量之间的条件依赖结构(conditional dependence structure)。
例子:
贝叶斯网络(Bayesian network)
马尔可夫随机域(Markov random field)
链图(Chain Graphs)
祖先图(Ancestral graph)
优点:
模型清晰,能被直观地理解
缺点:
确定其依赖的拓扑很困难,有时候也很模糊