美文网首页数据-R语言-图表-决策-Linux-Python
我们应该选择哪种机器学习算法呢?

我们应该选择哪种机器学习算法呢?

作者: 想跳舞的兔子 | 来源:发表于2018-07-04 14:35 被阅读152次

    对于一个初学者或者使用机器学习算法项目经验不够充分的人来说,当面对多种机器学习算法的时候,我们应该如何取舍?这个问题的答案是由很多因素决定的,这些因素包括:

    1.数据的大小,质量以及性质

    2.可用的计算时间

    3.项目的紧迫性

    4.你想用这些数据做什么

    就连一个资深的数据科学家可能也无法在尝试不同的算法前准确说出那个算法是最好的。所以,我们这里并不是提倡用一种方法来实现,而是希望对首先尝试哪些算法根据一些明确的因素,提供一些指导。

    机器学习算法备忘单

    以下我们就讲解如何根据这张算法备忘单里的算法类型来选择我们需要的算法作为尝试。

    不过这也只是一种选择优先尝试模型的方法,要得出你工程数据的最好算法,可能最好的方式是把这些算法都尝试一遍。(当然,这张备忘单里的算法并不完备,但是可以学习判别标准)

    阅读方法: 注意备忘单里的labels,根据yes,no的指标,eg:

    If you want to perform dimension then use principal component analysis.       

    If you need a numeric prediction quickly, use decision trees or logistic regression.   

    If you need a hierarchical result, use hierarchical clustering.


    机器学习算法的类型:监督学习(supervised Learning),半监督学习(semi-supervised Learning),无监督学习(unsupervised learning),强化学习(reinforcement learning)

    监督学习

    输入数据包含了有标记的训练样本和希望的输出,我们建立模型训练输入和输出之间的关系,当出现新数据的时候,我们可以根据已有数据建立的模型来预测输出。

    Classification:当数据用于预知数据的类别(有类别的离散数据)时,这种监督学习称为分类。这种情况发生于给定离散的标签或者指示器的时候,可以是判断一张图片是猫还是狗。当有两个标签的时候,我们称为binary classification,当超过两类的时候,我们称为multi-class classification.

    Regression:当需要预知的数据是连续的时候,这就是一个回归问题了。

    Forecasting:这是一种根据历史和当前数据来进行预知的过程。主要常用来分析趋势。最常用的例子应该是根据当年和前几年的销售量,预判下一年的销售量

    半监督学习

    当监督学习的样本标记很昂贵和耗时的时候,在有限的样本标记下,我们使用未标记样本来强化监督学习,这种情况称为semi-supervised.半监督的学习,可以使用未标记样本数据和一小部分标记的样本数据来改进学习精度。

    无监督学习

    当使用无监督学习时,采用的是完全没有标记的数据样本。用于发现数据里面的内在模式,如聚类结构,低维流形,稀疏树和图

    Clustering:把一堆数据样本中最为接近的样本聚类为一类。这通常用于把一整个数据集划分为多个组。分析在每个组进行来帮助用户来找到内在模式

    Dimension reduction:减少数据的维度。在许多用用中,原始数据有很高维度的特征,但有些特征是冗余或者是于当前任务无关的。减小维度有助于帮助我们找到真实的,潜在的关系

    强化学习

    强化学习基于环境的反馈来分析和优化代理的行为。算法尝试不同的场景来发现那种行为会产生最大的回报,而不是被告知采取哪种行为。尝试-错误和延迟奖励是强化学习区分与其他技术的特点。


    选择算法时应注意的几个问题

    当选择算法的时候,需要考虑这几个因素:精度,训练时间和易用性。许多用户会把准确度放在第一位,而初学者则倾向于关注他们最了解的算法。

    当获得一个数据集的时候,首先要考虑的是如何获得结果,而不管这结果看起来怎么样。初学者倾向于选择易于实现并能快速获得结果的算法。这是很好的第一步,一旦你获得结果并熟悉数据后,你可能花更多的时间使用更复杂的算法来增强对数据的理解从而进一步改进结果。

    即时在这个阶段,最好的算法们都未必可以获得最高的精度,因为算法通常需要仔细的调整和广泛的训练已获得起最佳可以达到的性能。

    何时使用特定算法

    更仔细的观察每个算法可以帮助我们了解他们提供的内容以及它们是如何使用的。这些描述提供了更多的细节并给出了何时使用特定算法与备忘单里一致的额外提示。

    Linear Regression and Logistic Regression

    Linear regression在连续变量y和一个或多个预测因子X之间建立关系。y=WX+ϵ,对于给定的训练样本{xi,yi}, i=1~N,参数向量W是可以被学习的到的。

    当因变量不是连续而是分类的,则可以使用logit链接函数将Linear Regression转化为Logistic Regression

     Logistic Regression是一种简单,快速,但强大的分类算法。这里我们讨论因变量的二类情形:y只有两个值yi∈(−1,1),i=1~N(这可以很容易的扩展为multi-class分类问题)

    在logistic 回归中 我们使用一个不同的假设累来尝试预测一个给定的示例属于“1”类概率与它属于“-1”类的概率。函数形式为:p(yi=1|xi)=σ(wxi)  和 p(yi=−1|xi)=1−σ(wxi),这能保证任意数据属于这两类的概率和为1即:p(yi=−1|xi)+p(yi=1|xi)=1,其中 σ(x)=1/(1+exp(−x)),这是一个sigmoid函数。对于给定的训练样本,参数W可以通过最大化数据集的log-likelihood来获得。

    Linear SVM and kernel SVM

    核技巧是用于将低维上非线性可分的函数映射成高维线性可分函数。支持向量机(SVM)训练算法发现有超平面的法向量和偏差b表示的分类器。这个超平面(边界)尽可能宽地分隔不同的类。该问题可以转化为约束优化问题:

           minimize w :||w||        subject to yi(wxi−b)≥1,i=1,…,n.

    当分类不是线性可分的,核技巧可以用来映射到一个非线性可分的空间到一个更高维的线性可分空间,当大多数因变量都是数字的,logistic regression 和SVM应当首当其冲用来做分类。这些模型很容易实现,参数也容易调,而且性能也不错,对于初学者来说这是比较适合的模型。

    Trees and ensemble trees

    决策树,随机森林和梯度提升都是基于决策树的算法。决策树有很多种变体,但他们都做同样的事情:将特征空间细分为具有相同标签的区域。决策树易于理解和实现。但是当我们过度探讨分支并走的非常深入时,它们往往会出现数据过拟合。随机森林和梯度提升是使用树算法的两种常用的方法:可实现良好精度并克服过拟合。

    Neural networks and deep learning

    神经网络由于其并行和分布式处理能力而在20世纪80年代中期蓬勃发展。但是由于广泛应用于优化神经网络参数的反向传播训练算法的低效性,阻碍了这一领域的研究。支持向量机和其他简单的模型,通过求见凸优化问题可以很容易的被训练,逐渐取代了神经网络在机器学习中的应用。

    近年来,新的改进的训练方法,如无监督的预训练和逐层贪婪训练引起了对神经网络兴趣的复苏。日益强大的计算能力,如图形处理单元(GPU)和大规模并行处理(MPP),也刺激了神经网络的复兴。随着神经网络的复兴,发明了具有数千层的模型。

    换言之,浅层神经网络已经发展成为深度学习神经网络。深度神经网络在监督学习中非常成功。当用于语言和图像识别的时候,深度学习和人类一样好,甚至更好。应用于无监督学习任务时,如特征提取,深度学习也可以在较少的人为干预下,从原始图像或演讲中提取特征。

    一个神经网络由三部分组成:输入层,隐藏层和输出层。训练样本定义输入和输出层。当输出层是一个分类变量的时候,这个神经网络用于解决分类问题。当输出层是一个连续变量的时候,这个神经网络用于解决回归问题。当输出层和输入层个数一样的时候,神经网络可以用来提取内在特征。隐藏层的数量决定了模型的复杂度和建模能力。

    k-means/k-modes, GMM (Gaussian mixture model) clustering

    K均值和高斯混合模型(GMM)的目的是将n个观测值分割成k个簇。K均值定义了硬分配:每个样本只能和一个簇有关联。GMM定义了软分配:每个样本都与每个簇有关联的概率。当给定聚类个数K的时候,这两个算法都可以简单和快速的聚类。

    DBSCAN

    当聚类的数值K没有给定的时候,可以使用DBSCAN(基于密度的聚类算法)来密度扩散连接样本。

    Hierarchical clustering

    层次分块可以用树形结构进行可视化。它不需要聚类的个数作为输入,并且可以使用不同的K值在不同的颗粒度级别上查看分块(即可以细化/粗化簇)

    PCA,SVD and LDA

    通常我们并不想把大量的特征直接用于机器学习算法中,因为一些特征可能是无关的,或者内在的维度可能小于特征值的数量。主成分分析(PCA),奇异值分解(SVD)和潜在狄利克雷分配(LDA)都可以用来降低维度。

    PCA是一种无监督的聚类方法,它在尽可能多的保存信息的基础上,将原始数据映射到低维空间。PCA基本上找到了一个子空间,它保留了数据方差,子空间由数据协方差矩阵的主特征向量定义。

    SVD和PCA有关,SVD是中心化数据矩阵的奇异值分解提供了主元的左奇异向量,该向量和PCA发现的子空间是相同的。而SVD是一种更通用的技术,因为他可以做PCA可能无法做的事情。例如,用户与电影举证的SVD能够提取可以在推荐系统中使用的用户档案盒电影档案。此外,在自然 语言处理(NLP)中,SVD也被广泛地用作主题建模工具,被称为潜在语义分析。

    NLP的一个相关技术是潜在狄利克雷分配(LDA),LDA是以概率为主题的文档生成模型,它将文档分解成主题,这与高斯混合模型(GMM)将连续数据分解为不同的高斯密度有异曲同工之处。但与GMM不同的是,LDA模型是离散数据(文档中的单词),且限制了主题分布是服从Dirichlet先验分布的。

    结论

    这是一个容易遵循的工作流程。当试图解决一个新问题时我们可以获取的信息为:

    1.定义问题:希望解决什么问题?

    2.简单开始:熟悉数据和基线的结果

    3.然后尝试一些复杂的模型。

    相关文章

      网友评论

        本文标题:我们应该选择哪种机器学习算法呢?

        本文链接:https://www.haomeiwen.com/subject/qogduftx.html