当前位置:   article > 正文

数据驱动、机器学习算法入门_数据驱动算法

数据驱动算法

聚类算法

1.K-Means(K均值)聚类

1.1 算法步骤

  1. 首先我们选择一些类/组,并随机初始化它们各自的中心点。中心点是与每个数据点向量长度相同的位置。这需要我们提前预知类的数量(即中心点的数量)。
  2. 计算每个数据点到中心点的距离,数据点距离哪个中心点最近就划分到哪一类中。
  3. 计算每一类中中心点作为新的中心点。
  4. 重复以上步骤,直到每一类中心在每次迭代后变化不大为止。也可以多次随机初始化中心点,然后选择运行结果最好的一个。

1.2 优缺点

优点:

  • 速度快,计算简便

缺点:

  • 我们必须提前知道数据有多少类/组。

K-Medians是K-Means的一种变体,是用数据集的中位数而不是均值来计算数据的中心点。
K-Medians的优势是使用中位数来计算中心点不受异常值的影响
计算中位数时需要对数据集中的数据进行排序,速度相对于K-Means较慢。

2.均值漂移聚类(Mean shift clustering)

均值漂移聚类是基于滑动窗口的算法,来找到数据点的密集区域。这是一个基于质心的算法,通过将中心点的候选点更新为滑动窗口内点的均值来完成,来定位每个组/类的中心点。然后对这些候选窗口进行相似窗口进行去除,最终形成中心点集及相应的分组。

2.1 算法步骤

  1. 确定滑动窗口半径r,以随机选取的中心点C半径为r的圆形滑动窗口开始滑动。均值漂移类似一种爬山算法,在每一次迭代中向密度更高的区域移动,直到收敛。
  2. 每一次滑动到新的区域,计算滑动窗口内的均值来作为中心点,滑动窗口内的点的数量为窗口内的密度。在每一次移动中,窗口会想密度更高的区域移动。
  3. 移动窗口,计算窗口内的中心点以及窗口内的密度,知道没有方向在窗口内可以容纳更多的点,即一直移动到圆内密度不再增加为止。
  4. 步骤一到三会产生很多个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,然后根据数据点所在的滑动窗口进行聚类。

2.2 优缺点

优点:

  • 不同于K-Means算法,均值漂移聚类算法不需要我们知道有多少类/组。
  • 基于密度的算法相比于K-Means受均值影响较小。

缺点:

  • 窗口半径r的选择可能是不重要的。

3. 基于密度的聚类方法(DBSCAN)

与均值漂移聚类类似,DBSCAN也是基于密度的聚类算法。

3.1 算法步骤

  1. 首先确定半径r和minPoints. 从一个没有被访问过的任意数据点开始,以这个点为中心,r为半径的圆内包含的点的数量是否大于或等于minPoints,如果大于或等于minPoints则改点被标记为central point,反之则会被标记为noise point。
  2. 重复1的步骤,如果一个noise point存在于某个central point为半径的圆内,则这个点被标记为边缘点,反之仍为noise point。重复步骤1,知道所有的点都被访问过。

3.2 优缺点

优点:

  • 不需要知道簇的数量

缺点:

  • 需要确定距离r和minPoints

4. 用高斯混合模型(GMM)的最大期望(EM)聚类

假设数据集是按照一定统计过程产生的,那么聚类的过程就是通过样本学习相应统计分布模型的参数

混合模型将数据看作是从不同的概率分布得到的概率的观测值的集合。通常采用高斯分布,称之为高斯混合模型

一个数据的产生可以分成两个过程:

  1. 选择分模型k, 概率为归一化后的$ \alpha _ k $(分模型的个数就是簇的个数)

  2. 由分模型根据概率分布 ϕ ( y ∣ θ k ) \phi(y| \theta _k) ϕyθk生成数据。
    故最终一个数据产生的概率为

这是一个含有隐变量$ \alpha _ k $的概率模型,故需要采用 EM算法学习模型参数。

4.1算法流程

  • Input: 簇的个数K, 阈值epsilon, 最大迭代次数
  • Output: 混合模型参数(包括所有分模型构成的均值向量,alpha向量,方差向量)
  • Step1: 采用Kmeans方法初始化混合模型参数
  • Step2: EM算法学习参数
  • Step3: 根据学习得到的参数,计算每个样本对各个分模型的相应度(即样本来子分模型的概率),样本归属于相应度最大的分模型对应的簇

5. 凝聚层次聚类(hierarchical agglomerative clustering)

K-Means,EM,AP等都属于平面聚类(Flat Clustering),因为这些算法的输出都是返回一个平面的无结构的聚类集合,所以叫做Flat clustering;平面聚类有一个缺陷就是要选择聚类的数目以及初始点,这对于没有经验的人员来说是一件很棘手的工作,因为聚类结果的好坏完全依赖于这一参数的选择,所以很多时候可以考虑下层次聚类算法,避免了聚类数量和初始点的选择。层次聚类算法有多种形式,本篇介绍的这个叫做层次凝聚聚类算法(Hierarchical Agglomerative Clustering),简称HAC,其主要思想就是,先把每一个样本点当做一个聚类,然后不断重复的将其中最近的两个聚类合并(就是凝聚的含义),直到满足迭代终止条件。

层次聚类算法将相似的对象分组到称为聚类的组中。层次聚类算法有两种:

  • 凝聚(Agglomerative )-自下而上的方法。从许多小聚类开始,然后将它们合并到一起,创建更大的聚类。
  • 分裂 (Divisive )- 自上而下的方法。从单个聚类开始,而不是将其拆分为更小的聚类。

5.1 算法步骤

1)将训练样本集中的每个数据点都当做一个聚类;

2)计算每两个聚类之间的距离,将距离最近的或最相似的两个聚类进行合并;

3)重复上述步骤,直到得到的当前聚类数是合并前聚类数的10%,即90%的聚类都被合并了;当然还可以设置其他终止条件,这样设置是为了防止过度合并。

5.2 优缺点

优点

  • 不假设特定数量的聚类(即k均值)
  • 可能对应于有意义的层次关系

缺点

  • 一旦决定组合两个聚类,它就无法撤消
  • 遇到大机器学习数据集时太慢,O(2log())

6. 图团体检测(Graph Community Detection)

降维

img

  • 缺失值比率:如果数据集的缺失值太多,我们可以用这种方法减少变量数。
  • 低方差滤波:这个方法可以从数据集中识别和删除常量变量,方差小的变量对目标变量影响不大,所以可以放心删去。
  • 高相关滤波:具有高相关性的一对变量会增加数据集中的多重共线性,所以用这种方法删去其中一个是有必要的。
  • 随机森林:这是最常用的降维方法之一,它会明确算出数据集中每个特征的重要性。
    前向特征选择和反向特征消除:这两种方法耗时较久,计算成本也都很高,所以只适用于输入变量较少的数据集。
  • 因子分析:这种方法适合数据集中存在高度相关的变量集的情况。
  • PCA:这是处理线性数据最广泛使用的技术之一。
  • ICA:我们可以用ICA将数据转换为独立的分量,使用更少的分量来描述数据。
  • ISOMAP:适合非线性数据处理。
  • t-SNE:也适合非线性数据处理,相较上一种方法,这种方法的可视化更直接。
  • UMAP:适用于高维数据,与t-SNE相比,这种方法速度更快。

1. 主成分分析 PCA

主成分分析算法(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的信息量最大(方差最大),以此使用较少的数据维度,同时保留住较多的原数据点的特性。PCA降维的目的,就是为了在尽量保证“信息量不丢失”的情况下,对原始特征进行降维,也就是尽可能将原始特征往具有最大投影信息量的维度上进行投影。将原特征投影到这些维度上,使降维后信息量损失最小。

1.1 算法步骤

  • 去除平均值
  • 计算协方差矩阵
  • 计算协方差矩阵的特征值和特征向量
  • 将特征值排序
  • 保留前N个最大的特征值对应的特征向量
  • 将原始特征转换到上面得到的N个特征向量构建的新空间中(最后两步,实现了特征压缩)

1.2 优缺点

优点:

  1. 以方差衡量信息的无监督学习,不受样本标签限制。
  2. 由于协方差矩阵对称,因此k个特征向量之间两两正交,也就是各主成分之间正交,正交就肯定线性不相关,可消除原始数据成分间的相互影响
  3. 可减少指标选择的工作量
  4. 用少数指标代替多数指标,利用PCA降维是最常用的算法
  5. 计算方法简单,易于在计算机上实现。

缺点:

  1. 主成分解释其含义往往具有一定的模糊性,不如原始样本完整
  2. 贡献率小的主成分往往可能含有对样本差异的重要信息,也就是可能对于区分样本的类别(标签)更有用
  3. 特征值矩阵的正交向量空间是否唯一有待讨论
  4. 无监督学习

2. 线性判别分析 LDA

线性判别分析(Linear Discriminant Analysis, LDA)是一种经典的线性学习方法,思路是将两种数据投影到一条直线上,使这两种数据之间尽可能远离,且同类数据尽可能聚集在一起。

给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点中心尽可能远离。更简单的概括为一句话,就是“投影后类内方差最小,类间方差最大

2.1 算法步骤

2.2 优缺点

​ 优点:

  • 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
  • LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

​ 缺点:

  • LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
  • LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
  • LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
  • LDA可能过度拟合数据。

3. 局部线性嵌入 LLE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wPjPPwSF-1607418964518)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20201205094754322.png)]

3.1 算法步骤

3.2 优缺点

优点:

  • 可以学习任意维的局部线性的低维流形
  • 算法归结为稀疏矩阵特征分解,计算复杂度相对较小,实现容易。

缺点:

  • 算法所学习的流形只能是不闭合的,且样本集是稠密均匀的。
  • 算法对最近邻样本数的选择敏感,不同的最近邻数对最后的降维结果有很大影响。

4. Laplacian Eigenmaps 拉普拉斯特征映射

希望相互间有关系的点(在图中相连的点)在降维后的空间中尽可能的靠近。Laplacian Eigenmaps可以反映出数据内在的流形结构。

4.1 算法步骤

步骤1:构建图

使用某一种方法来将所有的点构建成一个图,例如使用KNN算法,将每个点最近的K个点连上边。K是一个预先设定的值。

步骤2:确定权重

步骤3:特征映射

4.2 优缺点

随机森林

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。

Bagging(套袋法)

bagging的算法过程如下:

  1. 从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
  2. 对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
  3. 对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)

Boosting(提升法)

boosting的算法过程如下:

  1. 对于训练集中的每个样本建立权值wi,表示对每个样本的关注度。当某个样本被误分类的概率很高时,需要加大对该样本的权值。
  2. 进行迭代的过程中,每一步迭代都是一个弱分类器。我们需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合最为最终分类器。误差越小的弱分类器,权值越大)

Bagging,Boosting的主要区别

  1. 样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
  2. 样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
  3. 预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数其权重越大。
  4. 并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数必须按顺序迭代生成。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

1)Bagging + 决策树 = 随机森林

2)AdaBoost + 决策树 = 提升树

3)Gradient Boosting + 决策树 = GBDT

xgboost

其实算法的原理就是在一颗决策树的基础上不断地加树,比如在n-1颗树地基础上加一棵树变成n颗树的同时算法的精确率不断提高、效果提升。

GBDT是一种基于集成思想下的Boosting学习器,并采用梯度提升的方法进行每一轮的迭代最终组建出强学习器,这样的话算法的运行往往要生成一定数量的树才能达到令我们满意的准确率。当数据集大且较为复杂时,运行一次极有可能需要几千次的迭代运算,这将对我们使用算法造成巨大的计算瓶颈。

虽然GBDT无论在理论推导还是在应用场景实践都是相当完美的,但有一个问题:第n颗树训练时,需要用到第n-1颗树的(近似)残差。从这个角度来看,GBDT比较难以实现分布式,XGBoost正是解决了这个难题。XGBoost是GBDT的高效实现,XGBoost中的基学习器除了可以是CART(GBTree)也可以是线性分类器(GBLinear)。

XGBoost最大的特点在于它能够自动利用CPU的多线程进行并行计算,同时在算法上加以改进提高了精度。

在监督学习中,我们通常会构造一个目标函数和一个预测函数,使用训练样本对目标函数最小化学习到相关的参数,然后用预测函数和训练样本得到的参数来对未知的样本进行分类的标注或者数值的预测。在XGBoost中,目标函数的形式为:Obj(\Theta )=L(\Theta )+\Omega (\Theta )

L(\Theta ):损失函数,常用损失函数有:

img

\Omega (\Theta ):正则化项,之所以要引入它是因为我们的目标是希望生成的模型能准确的预测新的样本(即应用于测试数据集),而不是简单的拟合训练集的结果(这样会导致过拟合)。所以需要在保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能。而正则项就是用于惩罚复杂模型,避免预测模型过分拟合训练数据,常用的正则有
img

上图所展示的就是损失函数与正则化项在模型中的应用。观察发现,如果目标函数中的损失函数权重过高,那么模型的预测精度则不尽人意,反之如果正则项的权重过高,所生成的模型则会出现过拟合情况,难以对新的数据集做出有效预测。只有平衡好两者之间的关系,控制好模型复杂度,并在此基础上对参数进行求解,生成的模型才会“简单有效”(这也是机器学习中的偏差方差均衡)。

半监督学习

半监督学习(Semi-supervised learning)发挥作用的场合是:你的数据有一些有label,一些没有。而且一般是绝大部分都没有,只有少许几个有label。半监督学习算法会充分的利用unlabeled数据来捕捉我们整个数据的潜在分布。它基于三大假设:

​ 1)Smoothness平滑假设:相似的数据具有相同的label。

​ 2)Cluster聚类假设:处于同一个聚类下的数据具有相同label。

​ 3)Manifold流形假设:处于同一流形结构下的数据具有相同label。

标签传播聚类算法

标签传播算法(label propagation)的核心思想非常简单:相似的数据应该具有相同的label。LP算法包括两大步骤:1)构造相似矩阵;2)勇敢的传播吧。

1、相似矩阵构建

​ LP算法是基于Graph的,因此我们需要先构建一个图。我们为所有的数据构建一个图,图的节点就是一个数据点,包含labeled和unlabeled的数据。节点i和节点j的边表示他们的相似度。这个图的构建方法有很多,这里我们假设这个图是全连接的,节点i和节点j的边权重为:

img

​ 这里,α是超参。

​ 还有个非常常用的图构建方法是knn图,也就是只保留每个节点的k近邻权重,其他的为0,也就是不存在边,因此是稀疏的相似矩阵。

2、LP算法

​ 标签传播算法非常简单:通过节点之间的边传播label。边的权重越大,表示两个节点越相似,那么label越容易传播过去。我们定义一个NxN的概率转移矩阵P:

img

​ Pij表示从节点i转移到节点j的概率。假设有C个类和L个labeled样本,我们定义一个LxC的label矩阵YL,第i行表示第i个样本的标签指示向量,即如果第i个样本的类别是j,那么该行的第j个元素为1,其他为0。同样,我们也给U个unlabeled样本一个UxC的label矩阵YU。把他们合并,我们得到一个NxC的soft label矩阵F=[YL;YU]。soft label的意思是,我们保留样本i属于每个类别的概率,而不是互斥性的,这个样本以概率1只属于一个类。当然了,最后确定这个样本i的类别的时候,是取max也就是概率最大的那个类作为它的类别的。那F里面有个YU,它一开始是不知道的,那最开始的值是多少?无所谓,随便设置一个值就可以了。

​ 千呼万唤始出来,简单的LP算法如下:

​ 1)执行传播:F=PF

​ 2)重置F中labeled样本的标签:FL=YL

​ 3)重复步骤1)和2)直到F收敛。

​ 步骤1)就是将矩阵P和矩阵F相乘,这一步,每个节点都将自己的label以P确定的概率传播给其他节点。如果两个节点越相似(在欧式空间中距离越近),那么对方的label就越容易被自己的label赋予,就是更容易拉帮结派。步骤2)非常关键,因为labeled数据的label是事先确定的,它不能被带跑,所以每次传播完,它都得回归它本来的label。随着labeled数据不断的将自己的label传播出去,最后的类边界会穿越高密度区域,而停留在低密度的间隔中。相当于每个不同类别的labeled样本划分了势力范围。

3、变身的LP算法

​ 我们知道,我们每次迭代都是计算一个soft label矩阵F=[YL;YU],但是YL是已知的,计算它没有什么用,在步骤2)的时候,还得把它弄回来。我们关心的只是YU,那我们能不能只计算YU呢?Yes。我们将矩阵P做以下划分:

img

​ 这时候,我们的算法就一个运算:

img

​ 迭代上面这个步骤直到收敛就ok了,是不是很cool。可以看到FU不但取决于labeled数据的标签及其转移概率,还取决了unlabeled数据的当前label和转移概率。因此LP算法能额外运用unlabeled数据的分布特点。

​ 这个算法的收敛性也非常容易证明,具体见参考文献[1]。实际上,它是可以收敛到一个凸解的:

img

​ 所以我们也可以直接这样求解,以获得最终的YU。但是在实际的应用过程中,由于矩阵求逆需要O(n3)的复杂度,所以如果unlabeled数据非常多,那么I – PUU矩阵的求逆将会非常耗时,因此这时候一般选择迭代算法来实现。

半监督SVM

TSNE

t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。该算法可以将对于较大相似度的点,t分布在低维空间中的距离需要稍小一点;而对于低相似度的点,t分布在低维空间中的距离需要更远。

SNE是通过仿射(affinitie)变换将数据点映射到概率分布上,主要包括两个步骤:
SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。
SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似。
我们看到t-SNE模型是非监督的降维,他跟kmeans等不同,他不能通过训练得到一些东西之后再用于其它数据(比如kmeans可以通过训练得到k个点,再用于其它数据集,而t-SNE只能单独的对数据做操作,也就是说他只有fit_transform,而没有fit操作)

优点:

  • 对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。
  • 这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

缺点:

  • 主要用于可视化,很难用于其他目的。比如测试集合降维,因为他没有显式的预估部分,不能在测试集合直接降维;比如降维到10维,因为t分布偏重长尾,1个自由度的t分布很难保存好局部特征,可能需要设置成更高的自由度。
  • t-SNE倾向于保存局部特征,对于本征维数(intrinsic dimensionality)本身就很高的数据集,是不可能完整的映射到2-3维的空间
  • t-SNE没有唯一最优解,且没有预估部分。如果想要做预估,可以考虑降维之后,再构建一个回归方程之类的模型去做。但是要注意,t-sne中距离本身是没有意义,都是概率分布问题。
  • 训练太慢。有很多基于树的算法在t-sne上做一些改进

回归算法

1.线性回归(Linear Regression)

回归是在建模过程中用于分析变量之间的关系、以及变量是如何影响结果的一种技术。线性回归是指全部由线性变量组成的回归模型。例如,最简单的单变量线性回归(Single Variable Linear Regression)是用来描述单个变量和对应输出结果的关系,可以简单的表示成下面的式子:

因为在实际的建模过程中遇到的问题往往更加复杂,用单个变量不能满足描述输出便变量的关系,所以需要用到更多的变量来表示与输出之间的关系,也就是多变量线性回归(Multi Variable Linear Regression)。多变量线性回归模型如下:

其中a为系数,x是变量,b为偏置。因为这个函数只有线性关系,所以只适用于建模线性可分数据。我们只是使用系数权重来加权每个特征变量的重要性。我们使用随机梯度下降(SGD)来确定这些权重a和偏置b,过程如图所示:
这里写图片描述
线性回归的几个特点:

  1. 建模速度快,不需要很复杂的计算,在数据量大的情况下依然运行速度很快。
  2. 可以根据系数给出每个变量的理解和解释
  3. 对异常值很敏感

2. 多项式回归(Polynomial Regression)

线性回归适合于线性可分的数据,当我们处理非线性可分的数据时可以使用多项式回归。在这种回归中,我们是要找到一条曲线来拟合数据点,可以表示成下面的式子:

选择每个变量的确切的质数需要当前数据集合与最终输出的一些先验知识。下面两个图描述了线性回归与多项式回归的比较:
这里写图片描述
这里写图片描述
多项式回归的特点:

  1. 能够拟合非线性可分的数据,更加灵活的处理复杂的关系
  2. 因为需要设置变量的指数,所以它是完全控制要素变量的建模
  3. 需要一些数据的先验知识才能选择最佳指数
  4. 如果指数选择不当容易出现过拟合

3.岭回归(Ridge Regression)

分析岭回归之前首先要说的一个共线性(collinearity)的概念,共线性是自变量之间存在近似线性的关系,这种情况下就会对回归分析带来很大的影响。因为回归分析需要我们了解每个变量与输出之间的关系,高共线性就是说自变量间存在某种函数关系,如果两个自变量(X1和X2)之间存在函数关系,那么当X1改变一个单位时,X2也会相应的改变,这样就没办法固定其他条件来对单个变量对输出的影响进行分析了,因为所分析的X1总是混杂了X2的作用,这样就造成了分析误差,所以回归分析时需要排除高共线性的影响。
高共线性的存在可以通过以下几个方式来确定:

  1. 尽管从理论上讲,该变量与Y高度相关,但是回归系数却不明显
  2. 添加或删除X特征变量时,回归系数会发生明显变化
  3. X特征变量具有较高的成对相关性(pairwise correlations)(检查相关矩阵)

标准线性回归的优化函数如下:

其中X表示特征变量,w表示权重,y表示真实情况。岭回归是针对模型中存在的共线性关系的为变量增加一个小的平方偏差因子(也就是正则项),可以表示成下面的式子:

这样的平方偏差因子向模型中引入了少量偏差,但大大减少了方差。
领回归的特点:

  1. 领回归的假设和最小平方回归相同,但是在最小平方回归的时候我们假设数据服从高斯分布使用的是极大似然估计(MLE),在领回归的时候由于添加了偏差因子,即w的先验信息,使用的是极大后验估计(MAP)来得到最终的参数
    \2. 没有特征选择功能

4.Lasso回归

Lesso与岭回归非常相似,都是在回归优化函数中增加了一个偏置项以减少共线性的影响,从而减少模型方程。不同的是Lasso回归中使用了绝对值偏差作为正则化项,Lasso回归可以表示成下面的式子:

岭回归和Lasso回归之间的差异可以归结为L1正则和L2正则之间的差异:
内置的特征选择(Built-in feature selection):这是L1范数很有用的一个属性,二L2范数不具有这种特性。因为L1范数倾向于产生系数系数。例如,模型中有100个系数,但其中只有10个系数是非零系数,也就是说只有这10个变量是有用的,其他90个都是没有用的。而L2范数产生非稀疏系数,所以没有这种属性。因此可以说Lasso回归做了一种参数选择形式,未被选中的特征变量对整体的权重为0。
稀疏性:指矩阵或向量中只有极少个非零系数。L1范数具有产生具有零值或具有很少大系数的非常小值的许多系数的属性。
计算效率:L1范数没有解析解,但L2范数有。这使得L2范数的解可以通过计算得到。L1范数的解具有稀疏性,这使得它可以与稀疏算法一起使用,这使得在计算上更有效率。

5.弹性网络回归(ElasticNet Regression)

弹性回归网络是Lesso回归和岭回归技术的混合体。它使用了L1和L2正则化,也达到了两种技术共有的效果,弹性回归网络的表达式如下:

在Lasso和岭回归之间进行权衡的一个实际是运行弹性网络在循环的情况下继承岭回归的一些稳定性。
弹性回归网络的优点:

  1. 鼓励在高度相关变量的情况下的群体效应,而不像Lasso那样将其中一些置为0.当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso倾向于随机选择其中一个,而弹性网络倾向于选择两个。
  2. 对所选变量的数量没有限制。

偏最小二乘

典型相关分析

CCA使用的方法是将多维的X和Y都用线性变换为1维的X’和Y’,然后再使用相关系数来看X’和Y’的相关性。**将数据从多维变到1位,也可以理解为CCA是在进行降维,将高维数据降到1维,然后再用相关系数进行相关性的分析。

CCA算法广泛的应用于数据相关度的分析,同时还是偏最小二乘法的基础。但是由于它依赖于数据的线性表示,当我们的数据无法线性表示时,CCA就无法使用,此时我们可以利用核函数的思想,将数据映射到高维后,再利用CCA的思想降维到1维,求对应的相关系数和线性关系,这个算法一般称为KCCA。此外,在算法里只找了相关度最大的奇异值或者特征值,作为数据的相关系数,实际上我们也可以像PCA一样找出第二大奇异值,第三大奇异值,… 得到第二相关系数和第三相关系数。然后对数据做进一步的相关性分析。但是一般的应用来说,找出第一相关系数就可以了

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号