【机器学习】PCA、LDA、SVD

线性变换  

如果我们将向量 v 左乘矩阵 A,我们就会得到新的向量 b,也即可以表述说矩阵 A 对输入向量 v 执行了一次线性变换,且线性变换结果为 b。因此矩阵运算 Av = b 就代表向量 v 通过一个变换(矩阵 A)得到向量 b。下面的实例展示了矩阵乘法(该类型的乘法称之为点积)是怎样进行的:

如果假设矩阵就是一阵风,它通过有形的力量得出可见的结果。而这一阵风所吹向的方向就是特征向量,因此特征向量就表明矩阵所要变换的方向。

如上图所示,特征向量并不会改变方向,它已经指向了矩阵想要将所有输入向量都推向的方向。因此,特征向量的数学定义为:存在非零矩阵 A 和标量λ,若有向量 x 且满足以下关系式,那么 x 就为特征向量、λ为特征值。

一般来说几阶方阵就有几个特征向量,如 3*3 矩阵有 3 个特征向量,n 阶方阵有 n 个特征向量,每一个特征向量表征一个维度上的线性变换方向。

因为特征向量提取出了矩阵变换的主要信息,因此它在矩阵分解中十分重要,即沿着特征向量对角化矩阵。矩阵分解最常见的是特征分解,即我们将矩阵分解为一系列的特征向量和特征值

协方差矩阵

(均值和方差一般是用来描述一维数据的;协方差是用来度量两个随机变量关系的统计量。)

矩阵其实就是一种将某个向量变换为另一个向量的方法,另外我们也可以将矩阵看作作用于所有数据并朝向某个方向的力。变量间的相关性可以由方差和协方差表达,并且我们希望保留最大方差以实现最优的降维。因此我们希望能将方差和协方差统一表示,并且两者均可以表示为内积的形式,而内积又与矩阵乘法密切相关。因此我们可以采用矩阵乘法的形式表示。

若输入矩阵 X 有两个特征 a 和 b,且共有 m 个样本,如果我们用 X 左乘 X 的转置,那么就可以得出协方差矩阵

这个矩阵对角线上的两个元素分别是两特征的方差,而其它元素是 a 和 b 的协方差。两者被统一到了一个矩阵的,因此我们可以利用协方差矩阵描述数据点之间的方差和协方差,即经验性地描述我们观察到的数据。

寻找协方差矩阵的特征向量和特征值就等价于拟合一条能保留最大方差的直线或主成分。因为特征向量追踪到了主成分的方向,而最大方差和协方差的轴线表明了数据最容易改变的方向。根据上述推导,我们发现达到优化目标就等价于将协方差矩阵对角化:即除对角线外的其它元素化为 0,并且在对角线上将特征值按大小从上到下排列。协方差矩阵作为实对称矩阵,其主要性质之一就是可以正交对角化,因此就一定可以分解为特征向量和特征值。

当协方差矩阵分解为特征向量和特征值之后,特征向量表示着变换方向,而特征值表示着伸缩尺度。在本例中,特征值描述着数据间的协方差。我们可以按照特征值的大小降序排列特征向量,如此我们就按照重要性的次序得到了主成分排列。

对于 2 阶方阵,一个协方差矩阵可能如下所示:

 

在上面的协方差矩阵中,1.07 和 0.64 分别代表变量 x 和变量 y 的方差,而副对角线上的 0.63 代表着变量 x 和 y 之间的协方差。因为协方差矩阵为实对称矩阵(即 Aij=Aji),所以其必定可以通过正交化相似对角化。因为这两个变量的协方差为正值,所以这两个变量的分布成正相关性。如下图所示,如果协方差为负值,那么变量间就成负相关性。

注意如果变量间的协方差为零,那么变量是没有相关性的,并且也没有线性关系。因此,如果两个变量的协方差越大,相关性越大,投影到主成分后的损失就越小。我们同时可以考虑协方差和方差的计算式而了解他们的关系:

计算协方差的优处在于我们可以通过协方差的正值、负值或零值考察两个变量在高维空间中相互关系。总的来说,协方差矩阵定义了数据的形状,协方差决定了沿对角线对称分布的强度,而方差决定了沿 x 轴或 y 轴对称分布的趋势。


PCA

主成分分析的意义:1.简化运算;2.去除数据噪音;3.利用散点图实现多维数据可视化;4.发现隐性相关变量。

简单地总结一下 PCA 算法的基本概念和步骤:

首先我们得理解矩阵就相当于一个变换,变换的方向为特征向量,变换的尺度为特征值。PCA 的本质是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,即让它们在不同正交方向上没有相关性。所以我们希望将最相关的特征投影到一个主成分上而达到降维的效果,投影的标准是保留最大方差。而在实际操作中,我们希望计算特征之间的协方差矩阵,并通过对协方差矩阵的特征分解而得出特征向量和特征值。如果我们将特征值由大到小排列,相对应的特征向量所组成的矩阵就是我们所需降维后的数据。

PCA 的作用就是分析样本的不同特征,并选出最重要的特征。PCA 本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据「去相关」,也就是让它们在不同正交方向上没有相关性。通常我们认为信息具有较大的方差,而噪声有较小的方差,信噪比就是信号与噪声的方差比,所以我们希望投影后的数据方差越大越好。因此我们认为,最好的 k 维特征是将 n 维样本点转换为 k 维后,每一维上的样本方差都很大。

第一个主成分以直线(红色)的形式将散点图分为两边,并且它是保留了最大方差的。因为投影到这条直线(红色)上数据点离均值(空心点)有最大的方差,即所有蓝点到灰色线的平均距离为最大方差,所以这一个主成分将保留最多的信息。

如上所示,假设第二个主成分为垂直于红线(第一个主成分)的灰色线。当数据点投影到第二个主成分上时,它们离样本均值(空心点)的方差却非常小,即数据点到红色线的平均距离。所以红色线是最优的主成分。

PCA的思想

关于向量的方向选择,可以有两种解释,第一种解释是样本点到这个直线的距离足够近,第二种解释是样本点在这个直线上的投影能尽可能的分开。 (我只记住投影尽可能分开即可。)

希望降维的标准为:样本点在这个超平面上的投影能尽可能的分开。

PCA流程(必考!)

PCA python代码

#!/usr/bin/env python
# coding=utf-8
from numpy import *
import matplotlib
import matplotlib.pyplot as plt


def loadDataSet(fileName, delim="\t"):
    fr = open(fileName)
    stringArr = [line.strip().split(delim) for line in fr.readlines()]
    datArr = [map(float, line) for line in stringArr]  # 对每行数据的两个数字都变为float型
    return mat(datArr)


def pca(dataMat, topNfeat=9999999):  # dataMat为1000×2的矩阵,
    meanVals = mean(dataMat, axis=0)  # numpy中的mat类型有算均值mean的方法,并且对每列进行计算,得到2*1的矩阵
    meanRemoved = dataMat - meanVals  # 平移到以0为中心的地方,避免均值影响。1000*2
    covMat = cov(meanRemoved, rowvar=0)  # 计算协方差,维度为2,得到2×2的协方差矩阵
    eigVals, eigVects = linalg.eig(mat(covMat))  # 计算特征值及特征向量,2×1,2×2,得到两个特征值,两列特征向量,向量长度为2
    eigValInd = argsort(eigVals)  # 默认快排,从小到大进行排序
    eigValInd = eigValInd[:-(topNfeat + 1):-1]  # 得到topNfeat个特征值,大的特征值排在前面,若topNfeat为1。,则取1个特征值
    redEigVects = eigVects[:, eigValInd]  # 将topNfeat个最大的特征值对应的那列向量取出来,若topNfeat为1,
    lowDDataMat = meanRemoved * redEigVects  # 1000×2 * 2×topNfeat得到1000×topNfeat的低维空间的数据
    reconMat = (lowDDataMat * redEigVects.T) + meanVals  # 1000×topNfeat * topNfeat*2 +1000×2重构数据
    return lowDDataMat, reconMat


dataMat = loadDataSet("testSet.txt")
lowDMat, reconMat = pca(dataMat, 1)
print shape(dataMat)
print shape(lowDMat)
print shape(reconMat)
"""
(1000, 2)
(1000, 1)
(1000, 2)
"""

fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataMat[:, 0].flatten().A[0], dataMat[:, 1].flatten().A[0], marker="^", s=90)
ax.scatter(reconMat[:, 0].flatten().A[0], reconMat[:, 1].flatten().A[0], marker="o", s=50, c="red")
plt.show()

'''
lowDMat矩阵为降维后的矩阵,大小为1000*topNfeat。
reconMat矩阵为重构数据的矩阵,也即将低维的lowDMat矩阵转到原来数据上,从上图看,lowDMat为一维坐标上的点(没画出来),其重构到数据上便是红色圆圈的点,即在二维空间里的点(在一条直线上),及reconMat矩阵。
若是topNfeat为2,即没有剔除任何特征,重构之后的数据会和原始的数据重合。
'''

PCA总结

PCA算法的主要优点有:

 1)仅仅需要以方差衡量信息量,不受数据集以外的因素影响。 

 2)各主成分之间正交,可消除原始数据成分间的相互影响的因素。

   3)计算方法简单,主要运算是特征值分解,易于实现。

PCA算法的主要缺点有:

   1)主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。

   2)方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。


SVD

SVD是在PCA降维算法进行特征分解。

特征值分解法要求矩阵必须为方阵,SVD则不需要。下图矩阵A分解为3块。

SVD原理

SVD用于PCA

(你说为什么字越来越丑了呢?)

SVD优点:

1、不需要计算X^{T}X,而矩阵中一些非常小的数容易在平方中丢失

2、方便求伪逆(最小二乘中会用到)

3、运算速度快,SVD的速度比特征值分解要快很多,充分地利用了协方差矩阵的性质。

SVD缺点:

分解出的矩阵解释性往往不强。


LDA

线性判别式分析,降维思想就是将数据投影,使同一类别的数据投影尽可能接近,不同类别的距离尽可能大。

LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器:因为LDA是一种线性分类器。对于K分类的一个分类问题,会有K个线性函数。

主成分分析(PCA)与LDA有着非常近似的意思,LDA的输入数据是带标签的,而PCA的输入数据是不带标签的,所以PCA是一种unsupervised learning。LDA通常来说是作为一个独立的算法存在,给定了训练数据后,将会得到一系列的判别函数,之后对于新的输入,就可以进行预测了。而PCA更像是一个预处理的方法,它可以将原本的数据降低维度,而使得降低了维度的数据之间的方差最大。 

LDA局限:

  • 当样本数量远小于样本的特征维数,样本与样本之间的距离变大使得距离度量失效,使LDA算法中的类内、类间离散度矩阵奇异,不能得到最优的投影方向,在人脸识别领域中表现得尤为突出
  • LDA不适合对非高斯分布的样本进行降维
  • LDA在样本分类信息依赖方差而不是均值时,效果不好
  • LDA可能过度拟合数据

附上研一模式识别的笔记?

PCA主要用于降维,去噪声;SVD用于矩阵压缩;LDA用于降维,分类。 

LDA与PCA都是常用的降维方法,二者的区别

  • 出发思想不同。PCA主要是从特征的协方差角度,去找到比较好的投影方式,即选择样本点投影具有最大方差的方向( 在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。);而LDA则更多的是考虑了分类标签信息,寻求投影后不同类别之间数据点距离更大化以及同一类别数据点距离最小化,即选择分类性能最好的方向。
  • 学习模式不同。PCA属于无监督式学习,因此大多场景下只作为数据处理过程的一部分,需要与其他算法结合使用,例如将PCA与聚类、判别分析、回归分析等组合使用;LDA是一种监督式学习方法,本身除了可以降维外,还可以进行预测应用,因此既可以组合其他模型一起使用,也可以独立使用。
  • 降维后可用维度数量不同。LDA降维后最多可生成C-1维子空间(分类标签数-1),因此LDA与原始维度N数量无关,只有数据标签分类数量有关;而PCA最多有n维度可用,即最大可以选择全部可用维度。

降维的必要性

1.多重共线性–预测变量之间相互关联。多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯。

2.高维空间本身具有稀疏性。一维正态分布有68%的值落于正负标准差之间,而在十维空间上只有0.02%。

3.过多的变量会妨碍查找规律的建立。

4.仅在变量层面上分析可能会忽略变量之间的潜在联系。例如几个预测变量可能落入仅反映数据某一方面特征的一个组内。

降维的目的

1.减少预测变量的个数

2.确保这些变量是相互独立的

3.提供一个框架来解释结果

协方差矩阵

协方差矩阵的每个元素是各个向量元素之间的协方差

 

 

矩阵S的第2行元素X1,2 X2,2 ...., X2,m 表示第2个特征X的m个样本(先行后列)。


好久没学线代真的要命。。。花了好几天才总结完???

4.说一下LDA的原理(最大化一个函数,使得类别间的投影距离比较大,每个类内部方差小,从而最小化类别的重叠。)

5.对于PCA,会有第一主成分、第二主成分,为什么第一主成分是第一,原因是什么?

https://blog.csdn.net/whiteinblue/article/details/21071439

主成分是原有变量的线性组合,其数目不多于原始变量。组合之后,相当于我们获得了一批新的观测数据,这些数据的含义不同于原有数据,但包含了之前数据的大部分特征,并且有着较低的维度,便于进一步的分析。

在空间上,PCA可以理解为把原始数据投射到一个新的坐标系统,第一主成分为第一坐标轴,它的含义代表了原始数据中多个变量经过某种变换得到的新变量的变化区间;第二成分为第二坐标轴,代表了原始数据中多个变量经过某种变换得到的第二个新变量的变化区间。这样我们把利用原始数据解释样品的差异转变为利用新变量解释样品的差异。

这种投射方式会有很多,为了最大限度保留对原始数据的解释,一般会用最大方差理论或最小损失理论,使得第一主成分有着最大的方差或变异数 (就是说其能尽量多的解释原始数据的差异)随后的每一个主成分都与前面的主成分正交,且有着仅次于前一主成分的最大方差 (正交简单的理解就是两个主成分空间夹角为90°,两者之间无线性关联,从而完成去冗余操作)

6.PCA的主成分是怎么得到的?(?上面有)


参考:

从特征分解到协方差矩阵:详细剖析和实现PCA算法(好到爆炸???!)

主成分分析(PCA)原理总结

PCA的数学原理(好好好)

PCA的数学原理推导

最通俗易懂的PCA主成分分析推导

奇异值分解(SVD)原理与在降维中的应用(?)

奇异值分解(SVD)原理详解 

面试问题------降采样,PCA,LDA

奇异值分解与特征值分解详解(矩阵的数学运算)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值