机器学习(ML)-- 算法框架及基础 - Go语言中文社区

机器学习(ML)-- 算法框架及基础


第一部分:机器学习算法框架及基础

一、框架图

    
机器学习框架图

二、降维与特征选择

    
在这里插入图片描述

1、降维

  • 降维的作用
        1.降低时间复杂度和空间复杂度;2.节省了提取不必要特征的开销;3.去掉数据集中夹杂的噪音;4.较简单的模型在小数据集上有更强的鲁棒性;5.当数据能有较少的特征进行解释,我们可以更好的解释数据;6.实现数据可视化。
  • 几种降维方法:
    (1)主成分分析算法(PCA)
        Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
        通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数据内在结构)
        设n维向量w为目标子空间的一个坐标轴方向(称为映射向量),最大化数据映射后的方差,有:
    在这里插入图片描述
        其中m是数据实例的个数, xi是数据实例i的向量表达, x拔是所有数据实例的平均向量。定义W为包含所有映射向量为列向量的矩阵,经过线性代数变换,可以得到如下优化目标函数:
        
    在这里插入图片描述
        其中tr表示矩阵的迹。
        
    在这里插入图片描述
        A是数据协方差矩阵。
        容易得到最优的W是由数据协方差矩阵前k个最大的特征值对应的特征向量作为列向量构成的。这些特征向量形成一组正交基并且最好地保留了数据中的信息。
        PCA的输出就是Y = WX,由X的原始维度降低到了k维。
        PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性。但是这样投影以后对数据的区分作用并不大,反而可能使得数据点揉杂在一起无法区分。这也是PCA存在的最大一个问题,这导致使用PCA在很多情况下的分类效果并不好。具体可以看下图所示,若使用PCA将数据点投影至一维空间上时,PCA会选择2轴,这使得原本很容易区分的两簇点被揉杂在一起变得无法区分;而这时若选择1轴将会得到很好的区分结果。
        在这里插入图片描述
        Discriminant Analysis所追求的目标与PCA不同,不是希望保持数据最多的信息,而是希望数据在降维后能够很容易地被区分开来。后面会介绍LDA的方法,是另一种常见的线性降维方法。另外一些非线性的降维方法利用数据点的局部性质,也可以做到比较好地区分结果,例如LLE,Laplacian Eigenmap等。
    (2)LDA
        Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分。
        假设原始数据表示为X,(m*n矩阵,m是维度,n是sample的数量)
        既然是线性的,那么就是希望找到映射向量a,使得aX后的数据点能够保持以下两种性质:
        1、同类的数据点尽可能的接近(within class)
        2、不同类的数据点尽可能的分开(between class)
        所以呢还是上次PCA用的这张图,如果图中两堆点是两类的话,那么我们就希望他们能够投影到轴1去(PCA结果为轴2),这样在一维空间中也是很容易区分的。
        在这里插入图片描述
    (3)局部线性嵌入(LLE)
        Locally linear embedding(LLE)是一种非线性降维算法,它能够使降维后的数据较好地保持原有流形结构。LLE可以说是流形学习方法最经典的工作之一。很多后续的流形学习、降维方法都与LLE有密切联系。
        在这里插入图片描述
        见图,使用LLE将三维数据(b)映射到二维(c)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。
        但是LLE在有些情况下也并不适用,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间,且不能保持原有的数据流形。那么我们在处理数据中,首先假设数据不是分布在闭合的球面或者椭球面上。如图,LLE降维算法使用实例:
        在这里插入图片描述
        LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:(1)寻找每个样本点的k个近邻点;(2)由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。具体的算法流程如下图所示:
    (4)Laplacian Eigenmaps 拉普拉斯特征映射
        Laplacian Eigenmaps 看问题的角度和LLE有些相似,也是用局部的角度去构建数据之间的关系。它的直观思想是希望相互间有关系的点在降维后的空间中尽可能的靠近。Laplacian Eigenmaps可以反映出数据内在的流形结构。

2、特征选择

  • 特征选择的目标
        引用自吴军《数学之美》上的一句话:一个正确的数学模型应当在形式上是简单的。构造机器学习的模型的目的是希望能够从原始的特征数据集中学习出问题的结构与问题的本质,当然此时的挑选出的特征就应该能够对问题有更好的解释,所以特征选择的目标大致如下:
        <1>提高预测的准确性
        <2>构造更快,消耗更低的预测模型
        <3>能够对模型有更好的理解和解释
  • 特征选择的方法
        主要有三种方法:
    (1)Filter方法
        其主要思想是:对每一维的特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。
        主要的方法有:
        Chi-squared test(卡方检验)、information gain(信息增益)、correlation coefficient scores(相关系数)
    (2)Wrapper方法
        其主要思想是:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GA,PSO,DE,ABC等。
        主要方法有:recursive feature elimination algorithm(递归特征消除算法)
    (3)Embedded方法
        其主要思想是:在模型既定的情况下学习出对提高模型准确性最好的属性。这句话并不是很好理解,其实是讲在确定模型的过程中,挑选出那些对模型的训练有重要意义的属性。
        主要方法:正则化,岭回归就是在基本线性回归的过程中加入了正则项。
  • 特征选择和降维的相同点和不同点
        特征选择和降维有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性(或者称为特征)的数目;但是两者所采用的方式方法却不同:降维的方法主要是通过属性间的关系,如组合不同的属性得新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。

三、评估方法

    学习器的学习能力和泛化能力是由学习器的算法和数据的内在结构共同决定的。对于学习器的算法,不同的参数设置能导致算法生成不同的模型,如何评估一个模型的好坏,我们通常从其泛化误差来进行评估。
    泛化误差的定义是学习器在新样本上的误差,而新样本我们通常是不知道其真实输出的,那么如何评估呢?为此,通常在训练集中分出一部分数据,这些并不参与学习器的学习,而是使用其他的剩余样本来训练样本,用这些选出来的样本进行泛化误差的计算。这些被选出来的样本我们称之为验证集(testing set)因为我们假设验证样本的是从真实样本中独立同分布的采样而来,从而可以将测试误差当作泛化误差的近似。
    给定一个数据集D={(x1,y1),(x2,y2),⋅⋅⋅,(xm,ym)},如何从中选出我们所需的训练集S和验证集T呢?常用的方法有以下几种。

  • 留出法
        留出法是直接将数据集D划分为两个互斥的集合。其中一个作为验证集,一个作为训练集。
        <1>注意,两个样本子集的划分尽量保证数据分布的一致性,即子集中正反样本的数目尽量平衡。通常用分层采样来保留类别比例。
        <2>一次划分往往容易导致结果不稳定,通常采用多次划分重复评估取平均值的方法来提高可靠性。
        <3>通常使用数据的2/3∼4/5作为训练,剩余的用作验证。
  • 交叉验证法
        将数据集划为k个大小近似的互斥子集,每个子集都是通过分层采样得到。每次都将k−1个子集作为训练集,剩余的一个子集作为验证集。这样就能有k次试验。因此,此种方法也称为“k折交叉验证”(k-fold cross validation)。
  • 自助法
        使用自助采样法:每次有放回的从数据集中采样一个数据,重复m次获得一个子样本集。这样的子样本集中可能含有同样的样本。用没有出现在该子样本集中的样本数据作为验证样本集。一个样本不被采样到的概率为:
        在这里插入图片描述
        自助法适用于数据集小、难以有效划分训练集/验证集的场合。

四、过拟合与欠拟合

  • 1、欠拟合:模型在训练和预测时表现都不好的情况,型没有很好地捕捉到数据特征,不能够很好地拟合数据。
    解决方法:
        添加其他特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
    (1)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。
    (2)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
  • 2、过拟合:在训练数据上表现良好,在未知数据上表现差。
    解决方法:
    (1)特征筛选,通过相关性、方差大小等筛选特征。
    (2)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
    (3)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。
    (4)采用正则化方法。正则化方法包括L0正则、L1正则和L2正则,而正则一般是在目标函数之后加上对于的范数。但是在机器学习中一般使用L2正则,下面看具体的原因。
        L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。两者都可以实现稀疏性,既然L0可以实现稀疏,为什么不用L0,而要用L1呢?个人理解一是因为L0范数很难优化求解(NP难问题),二是L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。所以大家才把目光和万千宠爱转于L1范数。

    L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。L2正则项起到使得参数w变小加剧的效果,但是为什么可以防止过拟合呢?一个通俗的理解便是:更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合,以提高模型的泛化能力。还有就是看到有人说L2范数有助于处理 condition number不好的情况下矩阵求逆很困难的问题。
(5)采用dropout方法。这个方法在神经网络里面很常用。dropout方法是ImageNet中提出的一种方法,通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作。具体看下图:
    在这里插入图片描述


  • 本博客机器学习算法自然语言处理神经网络数据分析系列持续更新~~~~~~~~~~
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41657760/article/details/90795560
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢