1.预备知识1.1.数理统计相关概念12{,,...,}n X x x x =12{,,...,}n Y y y y =11()nk k E X x n ==∑211()(())nk k D X x E X n ==-∑11(,){[(X)][()]}[()][()]nk k k Cov X Y E X E Y E Y x E X y E Y n ==--=-⨯-∑()(,)D X Cov X X =(协方差解释:如果有X ,Y 两个变量,每个时刻的“X 值与其均值之差”乘以“Y 值与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值) (可能成立的:如果一个矩阵的期望是0,则另一矩阵与该矩阵相乘得到的矩阵期望也为0)1.2.数据标准化(z-score 标准化)最常见的标准化方法就是Z 标准化,也叫标准差标准化,这种方法给予原始数据的均值(mean )和标准差(standard deviation )进行数据的标准化。
经过处理的数据符合标准正态分布,即均值为0,标准差为1,注意,一般来说z-score 不是归一化,而是标准化,归一化只是标准化的一种。
其转化函数为:*()/X X μσ=-其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
z-score 标准化方法适用于属性A 的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
该种标准化方式要求原始数据的分布可以近似为高斯分布,否则效果会变得很糟糕。
标准化的公式很简单,步骤如下:求出各变量(指标)的算术平均值(数学期望)x i 和标准差s i ;进行标准化处理:z ij =(x ij -x i )/s i ,其中:z ij 为标准化后的变量值;x ij 为实际变量值;将逆指标前的正负号对调。
标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。
1.3.拉格朗日乘数法求条件极值作为一种优化算法,拉格朗日乘子法主要用于解决约束优化问题,它的基本思想就是通过引入拉格朗日乘子来将含有n 个变量和k 个约束条件的约束优化问题转化为含有(n+k )个变量的无约束优化问题。
拉格朗日乘子背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。
如何将一个含有n 个变量和k 个约束条件的约束优化问题转化为含有(n+k )个变量的无约束优化问题?拉格朗日乘数法从数学意义入手,通过引入拉格朗日乘子建立极值条件,对n 个变量分别求偏导对应了n 个方程,然后加上k 个约束条件(对应k 个拉格朗日乘子)一起构成包含了(n+k )变量的(n+k )个方程的方程组问题,这样就能根据求方程组的方法对其进行求解。
解决的问题模型为约束优化问题:min/max a function f(x,y,z), where x,y,z are not independent and g(x,y,z)=0.即:min/max f(x,y,z) s.t. g(x,y,z)=0给定椭球求这个椭球的内接长方体的最大体积。
这个问题实际上就是条件极值问题,即在条件下,求的最大值。
当然这个问题实际可以先根据条件消去,然后带入转化为无条件极值问题来处理。
但是有时候这样做很困难,甚至是做不到的,这时候就需要用拉格朗日乘数法了。
通过拉格朗日乘数法将问题转化为:对求偏导得到:联立前面三个方程得到和,带入第四个方程解之带入解得最大体积为:拉格朗日乘数法对一般多元函数在多个附加条件下的条件极值问题也适用。
1.4.奇异值分解奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。
就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD 是也一个重要的方法。
在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction 的PCA ,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI (Latent Semantic Indexing )。
1.4.1.奇异值详解特征值分解和奇异值分解两者有着很紧密的关系,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。
先谈谈特征值分解吧:1.4.1.1.特征值如果说一个向量v 是方阵A 的特征向量,将一定可以表示成下面的形式:Av v λ=这时候λ就被称为特征向量v 对应的特征值,一个矩阵的一组特征向量是一组正交向量。
特征值分解是将一个矩阵分解成下面的形式: 1A Q Q -=∑其中Q 是这个矩阵A 的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。
首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。
比如说下面的一个矩阵:3001M ⎡⎤=⎢⎥⎣⎦它其实对应的线性变换是下面的形式:因为这个矩阵M 乘以一个向量(x,y)的结果是:30301x x y y ⎡⎤⎡⎤⎡⎤=⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦上面的矩阵是对称的,所以这个变换是一个对x ,y 轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时拉长,当值<1时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子:1101M ⎡⎤=⎢⎥⎣⎦它所描述的变换是下面的样子:这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。
反过头来看看之前特征值分解的式子,分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向,我们通过特征值分解得到的前N 个特征向量,那么就对应了这个矩阵最主要的N 个变化方向。
我们利用这前N 个变化方向,就可以近似这个矩阵(变换)。
也就是之前说的:提取这个矩阵最重要的特征。
总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。
不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。
A 算法A 原理典型关联分析(Canonical Correlation Analysis ,简称CCA)是最常用的挖掘数据关联关系的算法之一。
比如我们拿到两组数据,第一组是人身高和体重的数据,第二组是对应的跑步能力和跳远能力的数据。
那么我们能不能说这两组数据是相关的呢?CCA 可以帮助我们分析这个问题。
在数理统计里面,都知道相关系数这个概念。
假设有两组一维的数据集X 和Y ,则相关系数ρ的定义为:(,)X Y ρ=其中cov(X,Y)是X 和Y 的协方差,而D(X),D(Y)分别是X 和Y 的方差。
相关系数ρ的取值为[-1,1],ρ的绝对值越接近于1,则X 和Y 的线性相关性越高。
越接近于0,则X 和Y 的线性相关性越低。
虽然相关系数可以很好的帮我们分析一维数据的相关性,但是对于高维数据就不能直接使用了。
如上所述,如果X 是包括人身高和体重两个维度的数据,而Y 是包括跑步能力和跳远能力两个维度的数据,就不能直接使用相关系数的方法。
那我们能不能变通一下呢?CCA 给了我们变通的方法。
CCA 使用的方法是将多维的X 和Y 都用线性变换为1维的X'和Y',然后再使用相关系数来看X'和Y'的相关性。
将数据从多维变到1位,也可以理解为CCA 是在进行降维,将高维数据降到1维,然后再用相关系数进行相关性的分析。
CCA 是将高维的两组数据分别降维到1维,然后用相关系数分析相关性。
但是有一个问题是,降维的标准是如何选择的呢?回想下主成分分析PCA ,降维的原则是投影方差最大;再回想下线性判别分析LDA ,降维的原则是同类的投影方差小,异类间的投影方差大。
对于我们的CCA ,它选择的投影标准是降维到1维后,两组数据的相关系数最大。
(思考一下,两个模态样本描述的事物是相似的,训练的时候是让样本特征的相关系数最大)假设数据集是X 和Y ,X 为n 1×m 的样本矩阵,Y 为n 2×m 的样本矩阵.其中m 为样本个数,而n 1,n 2分别为X 和Y 的特征维度。
对于X 矩阵,将其投影到1维,对应的投影向量为a, 对于Y 矩阵,将其投影到1维,对应的投影向量为b, 这样X ,Y 投影后得到的一维向量分别为X',Y',则:','T T X a X Y b Y ==CCA 的优化目标是最大化ρ(X ′,Y ′),得到对应的投影向量a,b ,即,arg a b在投影前,一般会把原始数据进行标准化,得到均值为0而方差为1的数据X 和Y 。
这样我们有:cov(',')cov(,){[()][()]}(()())()T T T T T T T T T T T X Y a X b Y E a X E a X b Y E b Y E a X b Y a E XY b==--==(之所以第三个等号成立,均值为0)(')()(,){[()][()]}()()T T T T T T T T T T T D X D a X Cov a X a X E a X E a X a X E a X E a XX a a E XX a===--==(')()T T D Y b E YY b =由于X ,Y 的均值均为0,则:()cov(,)(),()cov(,)()T T D X X X E XX D Y Y Y E YY ====cov(,)(),cov(,)()T T X Y E XY Y X E YX ==所以有:,,,arg arg arg T T T a b a b a b ==令S XY =cov(X,Y),则有:,arg maxT a b 由于分子分母增大相同的倍数,优化目标结果不变,我们可以采用和SVM 类似的优化方法,固定分母,优化分子,具体转化为:,arg max (..1,1)T T T XY XX YY a b a S b s t a S a b S b ==进而CCA 算法的目标最终转化为一个凸优化过程,只要求出了这个优化目标的最大值,就是前面提到的多维X 和Y 的相关性度量,而对应的a,b 则为降维时的投影向量。