特征分解

 

特征分解(eigendecomposition)是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。

方阵 A 的 特征向量(eigenvector)是指与 A 相乘后相当于对该向量进行缩放的非零向量 v: 

标量 λ 被称为这个特征向量对应的 特征值(eigenvalue)。(类似地,我们也可以 定义 左特征向量(left eigenvector) vA = λv,但是通常我们更关注 右特征向量 (right eigenvector))。 

如果 vA 的特征向量,那么任何缩放后的向量 sv (s ∈ R, s ≠ 0) 也是 A 的 特征向量。此外, svv 有相同的特征值。基于这个原因,通常我们只考虑单位特征向量

假设矩阵 A 有 n 个线性无关的特征向量 {v(1),...,v(n)},对应着特征值{λ1, ..., λn}。我们将特征向量连接成一个矩阵,使得每一列是一个特征向量: V =  [v(1),...,v(n)]. 类似地,我们也可以将特征值连接成一个向量 λ = [λ1, ..., λn]。 因此 A 的 特征分解(eigendecomposition)可以记作

* diag(λ)向量λ在n*n的方针的对角线上。

正交矩阵的转置和逆矩阵相等

设A是对称矩阵
A^T = A
A^-1 = (A^T)^-1 = (A^-1)^T (即A的逆也是对称矩阵)

 

我们已经看到了构建具有特定特征值和特征向量的矩阵,能够使我们在目标方向上延伸空间。然而,我们也常常希望将矩阵分解(decompose)成特征值和特征向量。这样可以帮助我们分析矩阵的特定性质。不是每一个矩阵都可以分解成特征值和特征向量。在某些情况下,特征分解存在,但是会涉及复数而非实数。在深度学习中,我们通常只需要分解一类有简单分解的矩阵。具体来讲,每个实对称矩阵都可以分解成实特征向量和实特征值:

其中 Q A 的特征向量组成的正交矩阵, Λ 是对角矩阵。特征值 Λi,i 对应的特征向量是矩阵 Q 的第 i 列,记作 Q:,i。因为 Q 是正交矩阵,我们可以将 A 看作沿方 向 v(i) 延展 λi 倍的空间。如图 2.3 所示的例子。

 

虽然任意一个实对称矩阵 A 都有特征分解,但是特征分解可能并不唯一。如果两个或多个特征向量拥有相同的特征值,那么在由这些特征向量产生的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。因此,我们可以等价地从这些特征向量中构成 Q 作为替代。按照惯例,我们通常按降序排列 Λ 的元素。在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。

矩阵的特征分解给了我们很多关于矩阵的有用信息。矩阵是奇异的当且仅当含 有零特征值。实对称矩阵的特征分解也可以用于优化二次方程 f(x) = x⊤Ax,其中 限制 ∥x∥2 = 1。当 x 等于 A 的某个特征向量时, f 将返回对应的特征值。在限制条 件下,函数 f 的最大值是最大特征值,最小值是最小特征值。

所有特征值都是正数的矩阵被称为 正定(positive definite);所有特征值都是非负数的矩阵被称为 半正定(positive semidefinite)。同样地,所有特征值都是负数的矩阵被称为 负定(negative definite);所有特征值都是非正数的矩阵被称为 半负定 (negative semidefinite)。 半正定矩阵受到关注是因为它们保证 xAx ≥ 0。此外, 正定矩阵还保证 xAx = 0 → x = 0。

 

正交矩阵

正交化

如果是实对称矩阵,那么它的不同特征值的特征向量必然正交。

 

 

 

求解特征值和特征向量

一、特征值和特征向量的概念和计算

    明确定义:设An阶方阵,如果存在常数及非零n向量x,使得,则称是矩阵A的特征值,xA属于特征值的特征向量。给定n阶矩阵A,行列式

的结果是关于的一个多项式,成为矩阵A的特征多项式,该特征多项式构成的方程称为矩阵A的特征方程。

 

  定理:n阶矩阵A的n个特征值就是其特征方程的n个跟;而A的属于特征值的特征向量就是齐次线性方程的非零解。

齐次线性方程:

  例:的特征值和特征向量

  解:,解一元二次方程可得

    对应的特征向量为x满足,求得

    对应的特征向量为x满足,求得

二、特征值和特征向量的几何意义

1、矩阵、向量、向量的矩阵变换

  在进行特征和特征向量的几何意义解释之前,我们先回顾一下向量矩阵向量矩阵变换的等相关知识。

  向量行向量列向量向量在几何上被解释成一系列与轴平行的位移,一般说来,任意向量v都能写成"扩展"形式:

  以3维向量为例,定义pqr为指向+x,+y和+z方向的单位向量,则有v=xp+yq+zr。现在向量v就被表示成pqr线性变换了。这里的基向量是笛卡尔积坐标轴,但事实上这个一个坐标系可以由任意的3个基向量定义,只要这3个基向量线性无关就行(不在同一平面上)。因此,用一个矩阵乘以向量,如Ax,表述如下:

  如果把矩阵的行解释为坐标系的基向量,矩阵与向量相乘(或向量与矩阵相乘)相当于执行一次坐标转换,Ax=y可表述为x经矩阵A变换后变为y。因此,追溯矩阵的由来,与向量的关系,我们会觉得矩阵并不神秘,它只是用一种紧凑的方式来表达坐标转换所需的数学运算。

2、矩阵的特征值和特征向量

  矩阵A的特征值和特征向量分别为x,记为,该式子可理解为向量x在几何空间中经过矩阵A的变换后得到向量。由此可知,向量x经过矩阵A变换后,方向并无改变(反方向不算方向改变),只是伸缩了倍。

  以矩阵为例,其特征向值分别为,对应的特征向量为,那么)表示向量经过矩阵A变换后,得到,向量变换变为改变方向,知识将在原方向上扩充了2倍。特征值也是同样道理,经过矩阵A变换后特征向量在原方向上扩充了3倍。

  因此,将特征向量看成基向量,矩阵就是这些基向量向对应的特征值伸展所需的数学运算。给定一个矩阵,就可以找出对应的基(特征向量),及透过向量变换(矩阵),这些基的伸展(特征值)。

三、特征值和特征向量的应用实例

1、主成分分析(Principle Component Analysis, PCA)

(1)方差、协方差、相关系数、协方差矩阵

    方差:

    协方差: 

    **方差是衡量单变量的离散程度,协方差是衡量两个变量的相关程度(亲疏),协方差越大表明两个变量越相似(亲密),协方差越小表明两个变量之间相互独立的程度越大。

    相关系数:

    **协方差和相关系数都可以衡量两个表明的相关程度,协方差未消除量纲,不同变量之间的协方差大小不能直接比较,而相关系数消除了量纲,可以比较不同变量之间的相关程度。

    协方差矩阵:如果有两个变量X,Y,那么协方差矩阵为,协方差阵说明了样本中变量间的亲疏关系。

(2)主成分分析的思想和算法

  主成分分析是利用降维的思想,将多个变量转化为少数几个综合变量(即主成分),其中每个主成分都是原始变量的线性组合,各主成分之间互不相关,从而这些主成分能够反映始变量的绝大部分信息,且所含的信息互不重叠。它是一个线性变换,这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。

  假设用p个变量来描述研究对象,分别用X1,X2…Xp来表示,这p个变量构成的p维随机向量为X=(X1,X2…Xp),n个样本构成组成了np列的矩阵A。主成分求解过程如下:

  第一步,求解得到矩阵A的协方差阵B;

  第二步,求解协方差阵B,得到按大小顺序排列的特征值向量为特征值向量中每个特征值组成的对角矩阵,U为所有特征值对应的特征向量构成的矩阵U,因此有重点来了,U是有特征向量构成的正定阵,向量的每一行可以视为一个的基向量,这些基向量经过矩阵B转换后,得到了在各个基向量上的伸缩,伸缩的大小即为特征向量。

第三步,主成分个数选择,根据特征值的大小,将特征值较大的作为主成分,其对应的特征向量就为基向量,特征值的筛选根据实际情况而定,一般大于1即可考虑作为主成分。

(3)实例分析——机器学习中的分类问题

  机器学习中的分类问题,给出178个葡萄酒样本,每个样本含有13个参数,比如酒精度、酸度、镁含量等,这些样本属于3个不同种类的葡萄酒。任务是提取3种葡萄酒的特征,以便下一次给出一个新的葡萄酒样本的时候,能根据已有数据判断出新样本是哪一种葡萄酒。

问题详细描述:http://archive.ics.uci.edu/ml/datasets/Wine
训练样本数据:http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

把数据集赋给一个178行13列的矩阵R,它的协方差矩阵C是13行13列的矩阵,对C进行特征分解,对角化,其中U是特征向量组成的矩阵,D是特征之组成的对角矩阵,并按由大到小排列。然后,令,就实现了数据集在特征向量这组正交基上的投影。嗯,重点来了,中的数据列是按照对应特征值的大小排列的,后面的列对应小特征值,去掉以后对整个数据集的影响比较小。比如,现在我们直接去掉后面的7列,只保留前6列,就完成了降维。

  下面我们看一下降维前和降维后的使用svm分类结果,本部分采用实现SVM的R语言包e1071,代码如下表所示。分类结果显示,使用主成分分析后的样本和未进行主成分分析样本的分类结果一样。因此,主成分分析提取的6个主成分能较好的表达原样本的13个变量。

 
library("e1071")
#读取数据
wineData=read.table("E:\\blog\\特征值和特征向量\\data.csv",header=T,sep=",");

#计算协方差阵
covariance = cov(wineData[2:14])

#计算特征值和特征向量
eigenResult=eigen(covariance)

#选取6个主成分,并计算这6个主成分解释的方差总和
PC_NUM = 6
varSum=sum(eigenResult$values[1:PC_NUM])/sum(eigenResult$values)

#降维后的样本
ruduceData= data.matrix(wineData[2:14])%*%eigenResult$vectors[,1:PC_NUM]

#加入分类标签
#finalData=cbind(wineData$class,ruduceData)

#给finalData添加列名
#colnames(finalDat) =c("calss","pc1","pc2","pc3","pc4","pc5","pc6")

#训练样本--主成分分析后的样本作为训练样本
y=wineData$class;
x1=ruduceData;
model1 <- svm(x1, y,cross=10)
pred1 <- predict(model1, x1)
#pred1 <- fitted(model1)
table(pred1, y) #使用table来查看预测结果

#训练样本--原数据作为训练样本
x2=wineData[2:14]
model2 <- svm(x2, y,cross=10)
#pred2 <- predict(model2, x2)
pred2 <- fitted(model2)
table(pred2, y) #使用table来查看预测结果
 
 
 
posted @ 2019-04-16 13:27  山竹小果  阅读(11926)  评论(0编辑  收藏  举报