-
大数据时代,参数怎么降维?
2017-07-31 10:14:14原标题:大数据时代,参数怎么降维? 小编在《数学模型教你如何成为星际争霸高手·上篇》[1]中提到过,参数估计(在数学上又称为反问题)往往比数学建模本身更为复杂。小编近日在研究阿尔兹海默症(Alzheimer’s ...原标题:大数据时代,参数怎么降维?
小编在《数学模型教你如何成为星际争霸高手·上篇》[1]中提到过,参数估计(在数学上又称为反问题)往往比数学建模本身更为复杂。小编近日在研究阿尔兹海默症(Alzheimer’s Disease,老年痴呆症的一种,已有上百年历史)的形成机制时对此深有体会。经多方总结,总算大体弄清楚了该病症的形成机理,得出如下图表[2]:
大家只需知道在这个复杂的网络中,每个小图都对应至少一个参数。看完后如果读者的表情是这样的:
小编表示理解,因为小编如果晚上睡不着,看看上面这个图表则倦意顿生!不一定非得“枕着你的名字才能入眠”,看着老年痴呆症的图表也可入眠。
其实以上图表已经经过了小编的高度简化,实际情景中还有许多未知或者有争议的致病机理尚待考证。所以用人名来命名一种疾病,实在是非常明智的,否则阿尔兹海默症应该译作——细胞质神经元纤维缠结-细胞外液β淀粉样蛋白老年斑致神经元萎缩疾病,以区别于其他老年痴呆症(帕金森综合症,ALS等)。每一种常见的疾病背后,都牵连着异常复杂的过程。
正好比当今中小学作业太多,需要减负;面对如此庞大(高维)的参数空间,自然也要想办法减少参数个数,这也是大数据时代普遍需要解决的问题。那么参数该如何降维呢?正所谓八仙过海各显神通,不同背景的科学家有不同的做法。
下图是参数估计问题的基本设定,
接下来的讨论都将基于这个设定。熟悉了以上设定,我们就可以出发了!
一、数理统计学家的做法——模型选择
数理统计学家对于模型参数的有关问题了如指掌,关于参数问题的方法和思想五花八门。例如在参数估计(Parameter Estimation)问题中,线性回归、非线性回归、极大似然估计是几种最常用的方法[3]。
不过在估计参数之前,首先要确定模型中到底需要多少参数。就像篮球比赛,参赛双方都有主力队员和替补队员,如果所有队员同时上场,势必造成场面混乱;如果双方只上一名队员,观赏性则远远不够。这就是模型选择(Model Selection)要解决的核心问题——到底派多少队员上场,才能既保证观赏性(模型的有效性),又不至于造成混乱(复杂性)呢?
模型参数,并非越多越好
在模型选择中,我们需要判断两种不同的参数选择方案和孰优孰劣。其核心思想便是寻找某种“度量”来衡量两种参数的表现,而经常使用的度量为优化R方检验(Adjusted R square)、AIC和BIC等。有兴趣的读者可以自行查询具体计算方法,这里只对这几种度量的特点进行比较:
可见这几种度量各有侧重,也各有好处。在实际应用中,这几种度量通常会同时派上用场,以对不同模型进行综合分析。
二、数据科学家提供思路——主成分分析
模型选择有个非常大的局限性,就是我们没有办法预先确定哪些参数相对有用,哪些无用,只有毫无规律地瞎猜。看样子这种方案不太行得通。
有没有办法能预先就判定出相对“有用”的参数呢?我们可以借鉴数据的降维方法,这可是数据科学家(本文的数据科学家更关注数据的处理和分析,数理统计学家更关注参数的处理和分析,两种思维是有差别的)的专长。其中最为出名的方法叫做主成分分析(Principle component analysis)。
什么叫高维数据呢?给定一个数据x,我们可以把这个数据看作一个向量,这个向量的每个分量都表示这个向量的某一个属性。例如“天气”,它由很多子属性构成——温度、湿度、降水量、能见度、风力、阳光强度、舒适度等等,于是这样一个简单的天气数据向量就包含了以上七个分量,是一个七维数据!就算是不了解数据分析的读者也可以看出,这个天气数据的七个分量之间存在着暧昧不清的关系,比如“湿度”必然和“降水量”有关,“舒适度”和前面几个分量都有关。那么能不能把“湿度”和“降水量”结合成一个新的分量?能不能把“舒适度”用其他分量表示?这就是数据的降维,也是主成分分析的基本思想,形成的新分量就是所谓的主成分。
如何把这种简单的思想翻译为精确的数学语言呢?简要地说,数学上用矩阵X(n×k,n是数据个数,k是数据维数,相当于把所有数据排列为一个矩阵)来表示高维数据的集合,称为设计矩阵(Design Matrix)。如果想提取数据的m个主成分,那么就通过计算矩阵X’X(X’表示X的转置,注意X’X是一个对称矩阵)的最大m个特征值对应的特征向量。而这m个特征向量则完全决定了前m个主成分的取法。
矩阵对角化。A若对称,那么P可以是正交阵,对角化相当于矩阵”旋转”
到此为止,数学家们已经心满意足了:“主成分嘛,不就是找对称矩阵的特征向量,用矩阵旋转的方法就可以搞定了!”但是数据科学家和计算科学家们还远不满足——实际计算中,矩阵对角化非常耗时耗力,例如要把一个k×k对称矩阵对角化,用QR分解的计算复杂度为O(k^3)[4](读者可自己验证),在只需要很少几个主成分的情况下,这是没有必要的。于是通常的做法是先找出最大的特征值,得到相应的主成分,再按需要依次提取出更多的主成分。省时又省力,何乐而不为哉?计算复杂度是非常实际并且重要的概念,也是很多擅长理论的专家没有考虑过的因素,这也在一定程度上形成了理论界和应用界之间的鸿沟。
三、参数好坏的衡量——Fisher信息矩阵
回到对参数降维的问题。参数降维和数据降维之间是差异的——模型中的参数往往是满足限制条件的,而且和数据不一样,这些限制条件并不能直接用矩阵表示出来。这时候,熟悉数理统计的读者可能会联想到一个概念——极大似然估计中的Fisher信息矩阵(Fisher information matrix),因为Fisher信息矩阵告诉了我们每个参数的估计方差。我们可以扔掉方差较大的参数(因为方差大,说明这个参数对模型影响小),至少得缩减它们在模型中的戏份。
我们来回顾一下极大似然估计的定义:
θ_MLE上面有一顶“帽子”,表示这是一个估计,一个随机变量,而非真实值。既然是随机变量,那么必然就有的误差,这种误差该如何衡量呢?当θ和x都是一维参数时,CR不等式(又名CR上界)告诉你答案:
也就是说估计误差由Fisher信息量所决定。其证明思想并不复杂,主要是利用柯西不等式和概率密度函数的性质。有兴趣的读者可以参考(这是小编四年前参加某数学竞赛面试时自创的方法,至今记忆犹新。时光荏苒,青葱岁月,现亲笔写下来,以作纪念):
很久不写字,丑了许多(虽然原来也不好看)
当数据x维数增大时,θ(可以是高维参数)的极大似然估计满足中心极限定理(渐进正态),其协方差矩阵为Fisher信息矩阵的逆。
值得一提的是,“信息量”其实是借鉴了统计物理中的“熵”的概念[5]。有统计物理背景的读者会觉得Fisher信息量很眼熟。事实上,如果x是一个可观察值(量子力学中用Hermite算子表示,也就是在Hilbert中空间自共轭的算子),θ是x的共轭变量(Conjugate variable,如温度和熵、压强和体积、化学势能和粒子数都是共轭变量对),那么x的不确定度(量子力学中的不确定度就是x的方差)正好由关于θ的Fisher信息矩阵给出[6]!小编还发现,如果把文献[6]的“共轭变量”推广到一般的量子哈密顿系统中去(例如动量-位置共轭和时间-能量共轭),那么海森堡测不准原理和CR不等式其实是等价的(唯一的区别在于由于物质波的假设,量子力学需要在复平面考虑问题。这个话题超过了本文范围,在以后的文章中继续介绍)!伟大的思想总是不谋而合,这个观点既有助于理解Fisher信息量,又能加强对量子世界的认识——这个世界是由一系列的不确定事件编织而成。
四、 黎曼几何登场
现在我们有了降维的思想——主成分分析,有了衡量参数好坏的方法——Fisher信息量,那么接下来该如何操作呢?一种大胆的想法是,把这些参数看作是高维空间中的低维曲面(更准确的说法是流形,但为了简单起见,本文依然使用“曲面”的概念),然后通过某种方式让Fisher信息量来决定这个曲面的具体形状,以决定这个参数空间的限定条件,从而达到参数降维的目的。这个想法正是一个新兴学科——信息几何学(Information geometry)的基本思想。而Fisher信息量充当的角色,正是黎曼度量(Riemann metric)。
三维空间中的二维曲面
小编在初学微分几何的曲面论时,遇到了不小的麻烦。当时不知道黎曼度量到底是何方神圣,所有在曲面上的分析都是利用所谓“第一基本形式”和“第二基本形式”的概念来完成的。例如曲面上两点间的测地线(geodesic),是指曲面上连接两点的最短曲线。这个概念虽然简单,但当老师从容不迫地推导了一黑板测地线方程
图片来自网络
小编是崩溃的,尤其是那几个“christoffel符号”(最后一行的Γ项,既有上指标又有两个项指标)。尽管曲面论的出发点是很符合直观的,但推导过程非常复杂,往往使初学者把注意力集中在每一项的具体数学形式是什么,而不是对每个符号的直观理解,而过于复杂的公式很容易让人产生畏惧心理。这是分析思想的特点之一——出发点符合直观,但过程可能很繁杂。
但当小编学过黎曼几何后,所有的问题仿佛都迎刃而解了。黎曼几何的出发点看似很抽象——它直接把曲面本身看做一个度量空间,而黎曼度量则被定义为一个正定矩阵(或者正定二次型,例如欧式空间的黎曼度量是单位矩阵)。有了黎曼度量,所有的概念都渐渐地透明起来,例如那些全身上下挂满指标的“christoffel符号”,在黎曼几何中又被称为Levi-Civita联络,是由于曲面的弯曲特性,把曲面上对向量场的微分计算转化到欧式空间时(因为我们熟悉的微积分都是定义在在欧式空间上的,需要做此转化),需要添加的修正项。
从这个观点出发(见上图),我们就不难理解为什么测地线方程会出现Levi-Civita联络了。测地线,说穿了就是对曲面上连接两点的所有曲线的总长(这个总长和黎曼度量有关)求最小值,只需要对研究向量场的变化即可。对向量场求微分以后,Levi-Civita联络随之出现,造就了简约而不简单的测地线方程。尽管出发点颇为抽象,曲面论中很多看似复杂的定义在黎曼几何中得到了更为清晰的诠释,因而黎曼几何更符合代数思想——抽象,但是思路清晰且具备高度概括性。
抽象归抽象,参数估计这个看似不那么抽象的工作还是要继续的。既然我们有了测地线的概念,那么是不是可以从参数曲面上任意一点(初始值)出发,沿着测地线方向行走,达到降维或者优化的目的呢?这正是信息几何学的要害所在!从K维参数曲面上的一点出发,沿着测地线行走到曲面的边界处(注意边界规定了参数的取值范围,通常是人为给定的),我们就走到了K-1维的曲面上,从而参数空间变成了K-1维!如果在这个K-1维曲面上继续沿着测地线行走到它的边界,那么我们就走到了K-2维曲面上。以此类推,就达到了参数降维的目的!具体算法如下图所示[7]:
算法的可视化,偏应用的读者只需记住这张图即可,不必拘泥于具体理论推导
从直观上看来,信息几何学中的降维思想和主成分分析颇为相似——都是通过对某个正定矩阵作变换来达到一步步降维的目的,每一次迭代后参数或数据都会发生“旋转”。不同之处在于,1. 参数曲面上的黎曼度量会随着曲面发生连续变化,所以参数需要沿着测地线“旋转”;2. 每次发生“旋转”后,参数的维数会减小一维,而数据的旋转得到的只是一维主成分。同是降维,两者的降维方向是不同的。
不过也许“旋转”这个概念能帮助读者从另一个角度理解Levi-Civita联络的意义。
今后我们还可以逐渐看到,黎曼几何的概念直接推动了整个20世纪物理和数学多个分支的蓬勃发展,并且把一些看似毫无关系的思想串联了起来。例如群表示论、李代数、微分方程、同调论、拓扑度理论等数学工具得以被直接运用于黎曼流形(更一般地,复流形)及其对应的纤维从上,构成了规范场论(坐标变换的推广,通常用群作用表示)、量子场论(为统一量子力学和广义相对论而设)和标准模型(把除了引力以外的力和各种基本粒子统一起来)等物理理论的雏形[7-11],这是代数思想的又一个伟大意义。当然,这是题外话。
五、总结
通过对几种不同的思想比较,我们可以切身体会到对数据降维和对参数降维的巨大差异,总结如下:
因此参数分析和数据分析是两个完全不同的概念,运用的方法也大相径庭,这也是为什么小编要在第二节中把数据科学家和数理统计学家区分开来。值得一提的是,虽然流形学习(Manifold learning)也是数据降维的主要处理手段之一,但是和信息几何学全然不同,因为主流的流形学习技术中并没有黎曼度量的概念,更不需要考虑数据应该朝哪个方向降维(参数则沿着测地线降维)的问题。不过显然,了解信息几何学的基本思想,有助于加强对流形学习的认识。
作为数理统计、统计物理和黎曼几何三种不同智慧的结晶,信息几何学是解决参数降维问题的一个极为强大的工具。它至少有四个优点:
这么一个强有力的工具,为何知道的人并不多呢?原因也很简单。其一,这是一个很年轻的学科,很多理论尚处于发展期;其二,起点太高,至少需要同时掌握数理统计和黎曼几何两种思想(统计力学的观点也很重要,解释了为什么Fisher信息矩阵可以看做黎曼度量),在工业界应用受限;其三,不同人对信息几何的理解不同,例如文献[12],更多的是把数理统计和机器学习中的概念用几何语言重新表述一遍,并没有实际应用案例。本文的观点则是基于文献[6]和[13]。
伟大的思想之所以能够不谋而合,是因为它们内在的普适性和抽象性,也就是小编一直所推崇的代数思想。估计很少有人能够想到,黎曼几何的概念不仅能对现代物理学产生颠覆性的转变,而且还能在参数估计这种应用界难题上发挥作用。英雄并不孤单,那么有没有其他像黎曼几何这样的“英雄”存在呢?答案是肯定的,不过每个“英雄”都有自己亲自谱写的史诗级篇章,以后小编将会一一道来。最后以一首诗来总结本文,以加深读者的记忆。
参数降维行
千金易散,知己难求;模型易得,参数难测。
参数既估,繁若迷糊。欲求清净,亟访名师。
岳王庙口,西湖斜畔,统计泰斗,参禅指手。
模型茫茫,筛而选之。安以定度?称量先拓。
姑苏城郊,红尘声嚣。数据学者,殊无隔阂。
银汉虽广,太白引航;数据虽多,缘其脉搏。
数据固庞,主干分明;参数稍贫,层次难寻。
信息矩阵,相助解困。主次参差,呼之渐晰。
参数常匿,降维何易。黎曼几何,释疑颂歌。
信息度量,测地线网,参数曲面,万物具全。
统计出谋,数据划策,几何导领,天下安定。
参考文献:
[1] https://mp.weixin.qq.com/s?__biz=MzIyNjc2NzY4OA==&mid=2247483777&idx=1&sn=27ec78f138b1fa74d81a6fdf7c712976&chksm=e86a27a6df1daeb03c1265a2d88a4f0c466b3de2b2ddacf17dfa6a427582ff0bc55e7d7cee8a#rd
[2] W. Hao et. al, Mathematical model on Alzheimer’s disease.
[3] S. Chatterjee et. al, Regression analysis by example, 5th edition.
[4] J.W. Demmel et. al, Performance and Accuracy of LAPACK’s Symmetric Tridiagonal Eigensolvers.
[5] http://mp.weixin.qq.com/s/sNtzlDbGfSE3j_H3cLJNdA.
[6] G.E. Crooks Measuring thermodynamic length.
[7] 马天, 流形拓扑学:理论与概念的实质。
[8] 马天, 从数学观点看物理世界——几何分析,引力场与相对论.
[9] 马天,从数学观点看物理世界——基本粒子与统一场理论。
[10] F. Lachello, Lie algebras and applications.
[11] L.P. Horwitz, Relativistic quantum mechanics.
[12] S. Amari, Information Geometry and Its Applications.
[13] M.K. Transtrum et. al, Sloppiness and emergent theories in physics, biology, and beyond.
来源:科普最前线
-
python怎么降维_【Python算法】常用降维方法-常用降维方法解读
2020-12-21 23:32:12常用降维方法-常用降维方法解读1. 引言机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前...常用降维方法-常用降维方法解读
1. 引言
机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。
目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。
在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。
2. 主成分分析算法(PCA)
Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。
通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会 分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数 据内在结构)
设 n 维向量w为目标子空间的一个坐标轴方向(称为映射向量),最大化数据映射后的方差,有:
其中 m 是数据实例的个数, xi是数据实例 i 的向量表达, x拔是所有数据实例的平均向量。定义W为包含所有映射向量为列向量的矩阵,经过线性代数变换,可以得到如下优化目标函数:
其中tr表示矩阵的迹,
A是数据协方差矩阵。
容易得到最优的W是由数据协方差矩阵前 k 个最大的特征值对应的特征向量作为列向量构成的。这些特征向量形成一组正交基并且最好地保留了数据中的信息。
PCA的输出就是Y = W‘X,由X的原始维度降低到了k维。
PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性。但是这样投影以后对数据 的区分作用并不大,反而可能使得数据点揉杂在一起无法区分。这也是PCA存在的最大一个问题,这导致使用PCA在很多情况下的分类效果并不好。具体可以看下图所示,若使用PCA将数据点投影至一维空间上时,PCA会选择2轴,这使得原本很容易区分的两簇点被揉杂在一起变得无法区分;而这时若选择1轴将会得 到很好的区分结果。
Discriminant Analysis所追求的目标与PCA不同,不是希望保持数据最多的信息,而是希望数据在降维后能够很容易地被区分开来。后面会介绍LDA的方法,是另一 种常见的线性降维方法。另外一些非线性的降维方法利用数据点的局部性质,也可以做到比较好地区分结果,例如LLE,Laplacian Eigenmap等。
优点:
它是无监督学习,完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。
用PCA技术可以对数据进行降维,同时对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
各主成分之间正交,可消除原始数据成分间的相互影响。
计算方法简单,易于在计算机上实现。
缺点:
如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
贡献率小的主成分往往可能含有对样本差异的重要信息。
特征值矩阵的正交向量空间是否唯一有待讨论。
在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的,此时在寻找主元时不能将方差作为衡量重要性的标准。
3. LDA
Linear Discriminant Analysis(也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分!
假设原始数据表示为X,(m*n矩阵,m是维度,n是sample的数量)
既然是线性的,那么就是希望找到映射向量a, 使得 a‘X后的数据点能够保持以下两种性质:
同类的数据点尽可能的接近(within class)
不同类的数据点尽可能的分开(between class)
所以PCA用的这张图,如果图中两堆点是两类的话,那么我们就希望他们能够投影到轴1去(PCA结果为轴2),这样在一维空间中也是很容易区分的。
优点
在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识;
LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优;
缺点
LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题;
*LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好;
LDA可能过度拟合数据
4. 局部线性嵌入 (LLE)
Locally linear embedding(LLE)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 。LLE可以说是流形学习方法最经典的工作之一。很多后续的流形学习、降维方法都与LLE有密切联系。
见图,使用LLE将三维数据(b)映射到二维(c)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。
但是LLE在有些情况下也并不适用,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间,且不能保持原有的数据流形。那么我们在处理数据中,首先假设数据不是分布在闭合的球面或者椭球面上。
LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:(1)寻找每个样本点的k个近邻点;(2)由每个 样本点的近邻点计算出该样本点的局部重建权值矩阵;(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。
5. Laplacian Eigenmaps 拉普拉斯特征映射
Laplacian Eigenmaps,看问题的角度和LLE有些相似,也是用局部的角度去构建数据之间的关系。
它的直观思想是希望相互间有关系的点(在图中相连的点)在降维后的空间中尽可能的靠近。Laplacian Eigenmaps可以反映出数据内在的流形结构。
使用时算法具体步骤为:
1.构建图
使用某一种方法来将所有的点构建成一个图,例如使用KNN算法,将每个点最近的K个点连上边。K是一个预先设定的值。
2.确定权重
确定点与点之间的权重大小,例如选用热核函数来确定,如果点i和点j相连。
见上图所示,左边的图表示有两类数据点(数据是图片),中间图表示采用Laplacian Eigenmap降维后每个数据点在二维空间中的位置,右边的图表示采用PCA并取前两个主要方向投影后的结果,可以清楚地看到,在此分类问题 上,Laplacian Eigenmap的结果明显优于PCA。
上图说明的是,高维数据(图中3D)也有可能是具有低维的内在属性的(图中roll实际上是2D的),但是这个低维不是原来坐标表示,例如如果要保持局部关系,蓝色和下面黄色是完全不相关的,但是如果只用任何2D或者3D的距离来描述都是不准确的。
-
python怎么降维_【Python算法】常用降维方法-常用降维方法的目的
2021-01-14 01:51:17常用降维方法-常用降维方法的目的正所谓每一个结果的出现都是一系列的原因导致的,当构建机器学习模型时候,有时候数据特征异常复杂,这就需要经常用到数据降维技术,下面主要介绍一些降维的主要原理。1. 降维的目的...常用降维方法-常用降维方法的目的
正所谓每一个结果的出现都是一系列的原因导致的,当构建机器学习模型时候,有时候数据特征异常复杂,这就需要经常用到数据降维技术,下面主要介绍一些降维的主要原理。
1. 降维的目的
在实际的机器学习项目中,特征选择/降维是必须进行的,因为在数据中存在以下几个 方面的问题:
数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定, 从而导致模型的泛化能力弱;
高纬空间样本具有稀疏性,导致模型比较难找到数据特征;
过多的变量会妨碍模型查找规律;
仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系。通过特征选择/降维的目的是:
减少特征属性的个数
确保特征属性之间是相互独立的
当然有时候也存在特征矩阵过大, 导致计算量比较大,训练时间长的问题
因为篇幅有限,本次实验主要介绍以下两种降维方法:
PCA
LDA
2. 常见两大降维方法
2.1 PCA
主成分析(PCA):将高纬的特征向量合并称为低纬度的特征属性,是一种无监督 的降维方法。
算法目标是通过某种线性投影,将高维的数据映射到低维的空间中表 示,并且期望在所投影的维度上数据的方差最大(最大方差理论),以此使用较 少的数据维度,同时保留较多的原数据点的特性。
主成分选择
假设原来的特征数据是n维数据,首先选着方差最大方向为第一维数据。第二个坐标轴选择和第一个坐标轴垂直或者正交 的方向;第三个坐标轴选择和第一个、第二个坐标轴都垂直或者正交的方向;该 过程一直重复,直到新坐标系的维度和达到给定的值。 而这些方向所表示的数据特征就被称为“主成分”。
2.2 LDA
线性判断分析(LDA):LDA是一种基于分类模型进行特征属性合并的操作,是一 种有监督的降维方法。
LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的 空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点, 将会在投影后的空间中更接近。用一句话概括就是:“投影后类内方差最小,类 间方差最大”
比较:
相同点:
两者均可以对数据完成降维操作
两者在降维时候均使用矩阵分解的思想
两者都假设数据符合高斯分布
不同点:
LDA是监督降维算法,PCA是无监督降维算法
LDA降维最多降到类别数目k-1的维数,而PCA没有限制
LDA除了降维外,还可以应用于分类
LDA选择的是分类性能最好的投影,而PCA选择样本点投影具有最大方差的方向
-
python多维数组怎么降维_使用python实现多维数据降维操作
2021-02-10 05:39:59一,首先介绍下多维列表的降维def flatten(a):for each in a:if not isinstance(each,list):yield eachelse:yield from flatten(each)if __name__ == "__main__":a = [[1,2],[3,[4,5]],6]print(list(flatten(a)))二...一,首先介绍下多维列表的降维
def flatten(a):
for each in a:
if not isinstance(each,list):
yield each
else:
yield from flatten(each)
if __name__ == "__main__":
a = [[1,2],[3,[4,5]],6]
print(list(flatten(a)))
二、这种降维方法同样适用于多维迭代器的降维
from collections import Iterable
def flattern(a):
for i in a:
if not isinstance(i,Iterable) or isinstance(i,str):
yield i
else:
yield from flattern(i)
if __name__ == "__main__":
a = [[1,2],(3,4,tuple(5,)),["6,7,8"],[9,range(10,20,1)]]
print(list(flattern(a)))
iterable:可迭代的,迭代器,在Python中iterable被认为是一个对象,这个对象可以一次返回它的一个成员(也就是对象里面的元素),Python中的string,list,tuple,dict,file,xrange都是可迭代的,都属于iterable对象,可迭代的对象都是可以遍历的,实际上Python中有很多iterable类型是使用iter()函数来生成的。
补充:将一个多维数组彻底的降维
废话不多说,直接上代码
const flattenDeep = arr =>
Array.isArray(arr)
? arr.reduce((a, b) => [...a, ...flattenDeep(b)], [])
: [arr];
以上这篇使用python实现多维数据降维操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。
-
多维数组怎么降维_通俗理解一个常用的降维算法
2021-01-12 05:31:41这是第325篇原创1 t-SNE 背景介绍最易被我们视觉观察到的维数是一维,二维和三...当我们想对高维数据集进行分类,但又不清楚这个数据集有没有很好的可分性(同类之间间隔小、异类之间间隔大)时,可以通过降维算法将数... -
python多维数组怎么降维_ScikitLearn中的级联多维降维算法
2021-02-10 05:40:02数据集由两个二维矩阵X和Y,都有n行(测量数)和{}列描述每个度量的相应特征。从第一个矩阵我想得到核PCA分量。另外,使用cross-decomposition我想用PLS and CCA得到两个矩阵之间的线性关系。在目标是使用管道为第一个... -
机器学习面试题-神经网络怎么降维?
2020-03-25 22:47:27降维的算法有很多,那么在神经网络中适如何降维的呢? 问题回答 神经网络中可以通过autoencoder来实现降维,NN(神经网络)来对数据进行大量的降维是从2006开始的,这起源于science上的一篇文章:reducing the ... -
多维数组怎么降维_从零开始的机器学习实用指南(八):降维
2021-01-06 03:39:39许多机器学习有数以千计甚至百万级别的特征,这不仅会让训练变得很慢,也可能让找到最优解变得很难,这种问题被称为维度...降维常常都是以损失信息为代价,类似于压缩一张图片。我们通常可以先试着用原始的数据,... -
多维数组怎么降维_谈一谈多维数组
2021-01-12 20:33:57那么这二者是怎么协调的呢? 这时候,多维数组实际上被“摊平”了,变形成一维数组进行存放。这个情况下有两种方法来摊平,一种是行优先,一种是列优先,或者换句话说就是下标从左到右摊平还是从右到左。 可能听得... -
多维数组怎么降维_降维方法小结和理解:PCA、LDA、MDS、ISOMAP、SNE、T-SNE、AutoEncoder...
2020-12-22 05:00:15PCA:Principle component analysis 主成分分析百度百科:它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标...(其实也可以不降维,比如上面的x1和x2变成了y1... -
python多维数组怎么降维_Python数据分析用到的几个重要的库
2021-01-02 05:55:53降维:PCA、特征选择、矩阵分解等等。 选型:网格搜索、交叉验证、度量。 预处理:特征提取、标准化。 与pandas、statsmodels和IPython一起,scikit-learn对于Python成为高效数据科学编程语言起到了关键作用。 ... -
python多维数组怎么降维_Python工具整合,为程序员和新手准备的 8 大 Python 工具...
2021-01-06 03:39:33scikit-learn包含众多顶级机器学习算法,主要有六大基本功能,分别是分类、回归、聚类、数据降维、模型选择和数据预处理。scikit-learn拥有非常活跃的用户社区,基本上其所有的功能都有非常详尽的文档供用户查阅。... -
matlab主成分分析代码_学点统计:主成分分析(PCA)是怎么降维分析的?内含代码+教程...
2020-12-03 07:10:35分析步骤 将原始数据按行排列组成矩阵X 对X进行数据标准化,使其均值变为零 求X的协方差矩阵C 将特征向量按特征值由大到小排列,取前k个按行组成矩阵P 通过计算Y = PX,得到降维后数据Y 用下式计算每个特征根的贡献... -
matlab主成分分析法代码_学点统计:主成分分析(PCA)是怎么降维分析的?内含代码+教程...
2020-12-19 00:07:27分析步骤 将原始数据按行排列组成矩阵X 对X进行数据标准化,使其均值变为零 求X的协方差矩阵C 将特征向量按特征值由大到小排列,取前k个按行组成矩阵P 通过计算Y = PX,得到降维后数据Y 用下式计算每个特征根的贡献... -
python多维数组怎么降维_6大python学习资源,完整掌握“数据处理-分析-可视化-挖掘”...
2020-12-07 05:18:18简单而有效的预测数据分析工具 对每个人都可访问,并可在各种上下文中重用 构建在NumPy、SciPy和matplotlib上 开源,商业使用- BSD许可证 官网上提供了众多的机器学习方法,比如:分类、回归、聚类、降维、模型选择... -
PCA降维
2019-07-22 16:07:06PCA降维将高维数据 通过线性变换 转换为线性无关的表示。 为什么需要降维? 机器学习中可能存在 上千万维的信息, 为了提取主要特征(比如图像)并且同时也能节省计算资源。...怎么降维? 将高位数据投影... -
降维相关
2017-12-04 22:54:09降维相关降维相关 什么是降维 PCA LDA LLE LE 什么是降维一般来说,在ml里面,需要feature。...那怎么样才算是一个好的降维结果呢?直观地说,就是要既能降低维度,又能使得损失的信息尽量少。举个例子,如果 -
通俗的理解PCA怎么实现降维的?
2019-03-27 20:27:16PCA主成分分析,基本思想是利用基的概念,基一定要保证不相关,所以在向量上体现即为协方差为0,在基上的投影效果越分散越好,数学上即为方差大,所以pca选择方差最大的K个为主成分,这里的方差最大的K个即为特征值... -
javascript数组降维_Javascript实现的数组降维——维度不同,怎么谈恋爱
2021-01-13 02:35:10数组的元素可能是数组,这样一层层嵌套,可能得到一个嵌套很深的数组,数组降维要做的事就是把嵌套很深的数组展开,一般最后得到一个一维数组,其中的元素都是非数组元素,比如数组[1, [2, 3, [4, 5], 6], 7, 8]降维... -
计算机里面的“降维打击”
2020-05-02 18:01:23今天在论坛里看到一位朋友的提问:“怎么获取大量不重复的三...那么怎么降维呢?想必一些人看到颜色表的时候已经明白了。明白的人可以不用看了。如果不明白就接着看。 怎么列出所有的颜色呢?当然三重循环遍历了,rgb... -
降维基础
2020-09-15 16:26:56降维:特征的数量 ,易混概念:维度:数组的维度 1、特征选择 是什么?选取部分特征当做最后分析得数据 原因:冗余:部分特征相关性高,计算量大 噪声:部分特征对预测结果有影响 主要方法:Filter (过滤式... -
降维算法
2017-05-26 10:34:34此文是自己的学习博客,主要参考Rachel-Zhang的...我们需要一组关于XXX的数据,定义就铺天盖地的来了,百万级个特征拿过来,我们怎么进行机器学习啊?!李航老师在他的博客《机器学习新动向:从人机交互中学习》中提到 -
sparkMLlib PCA降维后的数据与原来的数据不一样了,怎么使用sparkMLlib PCA降维后得到数据?
2019-02-21 10:39:49原始数据矩阵如下 // 原始数据 val arr = Array( Vectors.dense(4.0,1.0, 4.0, 5.0), ...spark PCA处理后的数据代表什么意思,和原来的数据不一样,怎么利用这个数据,比如我想对它做线性回归? -
降维算法 LDA & PCA
2019-03-12 15:55:53各自是怎么实现降维的 降维算法,是为了使庞大的数据,多个特征,在之后能得到更好的处理效果,如分类,进行尽量保持原有信息的数据的压缩同时提高数据的处理效率。 降维算法中有两种,LDA 线性判别分析 和 PCA ... -
Javascript实现的数组降维——维度不同,怎么谈恋爱
2016-08-30 15:14:00数组的元素可能是数组,这样一层层嵌套,可能得到一个嵌套很深的数组,数组降维要做的事就是把嵌套很深的数组展开,一般最后得到一个一维数组,其中的元素都是非数组元素,比如数组[1, [2, 3, [4, 5], 6], 7, 8]降维... -
怎么用python调用算法包_UMAP降维算法python包的安装和使用
2020-12-09 07:26:14一、UMAP算法的定义:统一流形近似与投影(UMAP)是一种降维技术,可以用于类似于t-SNE的可视化,也可以用于一般的非线性降维。该算法基于对数据的三个假设:1、数据均匀分布在黎曼流形上;2、黎曼度量是局部常数(或者... -
python 列表降维_如何给列表降维?sum()函数的妙用
2020-12-03 00:52:53上个月,学习群里的 S 同学问了个题目,大意可理解为列表降维 ,例子如下:oldlist = [[1, 2, 3], [4, 5]]# 想得到结果:newlist = ...这个问题并不难,但是,怎么写才比较优雅呢?# 方法一,粗暴拼接法:newlist = ... -
特斯拉降维打击 国产电动车怎么“盘”?
2019-03-06 09:39:00今天,马斯克宣布Model 3的3.5万美元版本将上线量产,这意味着国内新能源将一度承受来自特斯拉的“降维打击”,本着价格亲民的造车路线已经成为特斯拉步入正轨的标志。 资料补充: 提到自动驾驶,前一阵美国加州...
-
华为1+X——网络系统建设与运维(中级)
-
SAP ABAP 字符串截取
-
【Python-随到随学】 FLask第一周
-
MySQL 管理利器 mysql-utilities
-
TL1769_V1.0_20060223.pdf
-
实现 MySQL 读写分离的利器 mysql-proxy
-
1023 组个最小数 (20 分)
-
实验9:PWM脉冲波实验.docx
-
实验8:七段数码管扫描显示实验.docx
-
leetcode303(区域和检索 - 数组不可变:前缀和)
-
关于Oracle的NVARCHAR2在mybatis-generator中的使用-model类nvchar生成时变成了Object类型
-
Samba 服务配置与管理
-
css选择器练习
-
Leetcode 303. 区域和检索 - 数组不可变
-
jsp规范
-
TL1769 Qualification Report_20050809.pdf
-
Docker从入门到精通
-
华为1+X——网络系统建设与运维(高级)
-
Mysql数据库面试直通车
-
app软件测试全栈系列精品课程