PCA降维方法(主成分分析降维)

合集下载

几种降维思想方法总结

几种降维思想方法总结

几种降维思想方法总结降维(Dimensionality Reduction)是机器学习与数据挖掘领域非常重要的一个技术,其主要目的是剔除无关信息,提取数据的本质特征,并将高维数据映射到低维空间进行处理。

降维方法主要有两大类:特征选择和特征提取。

在本文中,我们将总结几种常见的降维方法思想。

1. 主成分分析(Principal Component Analysis,PCA)PCA是一种最常见的降维方法,其思想是将原始特征通过线性变换,得到一组新的互不相关的特征,这些新特征被称为主成分。

主成分的选择是根据方差来确定,保留方差多的特征,可以更好地保留数据的信息。

通过选择合适的主成分数目,我们可以将原本具有很高维度的数据映射到一个低维的空间中,从而达到降维的目的。

2. 因子分析(Factor Analysis)因子分析是另一种常用的降维方法,它假设观测数据是由一组潜在的因子(Latent Variables)决定的。

通过寻找这些潜在因子,我们可以在保留数据信息的前提下,将原始特征的维度降低。

因子分析可以用于探索数据之间的潜在关系,还可以用于处理带有缺失值的数据,通过估计缺失值进行降维。

3. 独立成分分析(Independent Component Analysis,ICA)ICA是一种基于统计独立性的降维方法,它假设观测数据是由相互独立的成分组成的。

与PCA不同,ICA并不追求数据的方差最大化,而是追求数据之间的独立性。

ICA可以将观测数据分解为多个互不相关的独立成分,从而实现数据的降维。

4. 线性判别分析(Linear Discriminant Analysis,LDA)LDA是一种用于分类问题的降维方法,它通过将原始数据投影到低维空间中,从而最大限度地保留数据的类别信息。

LDA寻找一个最佳投影方向,使得同一类别的数据尽可能接近,不同类别的数据尽可能分开。

通过LDA降维,可以在不降低分类性能的情况下,减少数据的维度。

数据降维方法

数据降维方法

数据降维方法数据降维是指通过保留数据集的主要特征,减少数据集维度的过程。

在实际应用中,数据往往具有高维度和复杂性,这给数据分析和处理带来了挑战。

因此,数据降维方法成为了数据处理中的重要环节。

本文将介绍几种常见的数据降维方法,包括主成分分析(PCA)、线性判别分析(LDA)和t-SNE算法。

主成分分析(PCA)是一种常用的数据降维方法,它通过线性变换将原始数据映射到一个新的坐标系中,使得数据在新坐标系下的方差最大化。

这样可以保留数据的主要信息,同时减少数据的维度。

PCA的核心思想是找到数据中的主成分,即数据中方差最大的方向。

通过保留主成分,可以实现数据降维的目的。

另一种常见的数据降维方法是线性判别分析(LDA)。

与PCA不同,LDA是一种有监督学习方法,它考虑了数据的类别信息。

LDA的目标是将数据投影到一个新的空间中,使得不同类别的数据点尽可能远离,同一类别的数据点尽可能接近。

通过这种方式,LDA可以在降维的同时保留数据的类别信息,有助于分类和识别任务的进行。

除了PCA和LDA,t-SNE算法也是一种常用的非线性数据降维方法。

t-SNE算法通过在高维空间中保持相似的数据点在低维空间中仍然保持相似的方式进行降维。

它能够有效地发现数据中的局部结构,并在可视化任务中表现出色。

t-SNE算法在图像、文本和生物信息学等领域得到了广泛的应用。

总的来说,数据降维是数据处理中非常重要的一环。

通过合适的数据降维方法,可以在保留数据主要特征的同时减少数据的维度,提高数据处理和分析的效率。

在实际应用中,需要根据数据的特点和任务的要求选择合适的数据降维方法。

希望本文介绍的主成分分析、线性判别分析和t-SNE算法能够为读者在实际应用中提供帮助。

PCA(主成分分析)降维算法详解和代码

PCA(主成分分析)降维算法详解和代码

PCA(主成分分析)降维算法详解和代码PCA的原理:1.中心化数据:对原始数据进行中心化处理,即将每个特征减去其均值,使得数据以原点为中心。

2.计算协方差矩阵:计算中心化后的数据的协方差矩阵。

协方差矩阵描述了不同特征之间的关系和相关性。

3.计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

特征值代表每个特征的重要性,特征向量表示特征的方向。

4.选择主成分:根据特征值的大小,选择最大的k个特征值对应的特征向量作为主成分。

5.降维:将原始数据投影到所选主成分上,得到降维后的数据。

投影后的数据保留了最重要的特征,且维度减少。

PCA的代码实现:下面是一个基于Numpy库实现PCA算法的示例代码:```pythonimport numpy as npdef pca(X, k):#中心化数据X = X - np.mean(X, axis=0)#计算协方差矩阵cov = np.cov(X.T)#特征值分解eigvals, eigvecs = np.linalg.eig(cov)#选择主成分idx = np.argsort(eigvals)[::-1][:k]eigvecs = eigvecs[:, idx]#降维X_pca = np.dot(X, eigvecs)return X_pca#测试X = np.random.rand(100, 5) # 生成100个样本,每个样本有5个特征k=2#目标降维维度X_pca = pca(X, k)print(X_pca.shape) # 输出降维后的数据维度```在上述代码中,使用`numpy`库进行了主成分分析的各个步骤。

首先,通过计算均值,对原始数据进行中心化。

然后,使用`cov`函数计算协方差矩阵,并通过`numpy.linalg.eig`函数进行特征值分解。

接下来,通过`argsort`函数对特征值进行排序,选择前k个特征值对应的特征向量作为主成分。

二分类变量降维方法

二分类变量降维方法

二分类变量降维方法概述在数据分析和机器学习领域,我们经常需要处理包含大量特征的数据集。

然而,特征维度的增加会导致算法的复杂度增加、计算资源的浪费和过拟合等问题。

因此,降维成为了解决这些问题的重要手段之一。

在二分类问题中,降维是指将原始数据中的特征维度减少到更低的维度,并且保留最重要的特征信息。

本文将介绍几种常用的二分类变量降维方法。

1. 主成分分析(Principal Component Analysis, PCA)主成分分析是一种常用的无监督降维方法。

它通过线性变换将原始特征投影到一个新的特征空间,使得投影后的特征具有最大的方差。

PCA的目标是找到一组正交基,使得数据在这组基上的投影具有最大的方差。

通过保留最大方差的前k个主成分,可以实现数据降维。

2. 线性判别分析(Linear Discriminant Analysis, LDA)线性判别分析是一种有监督降维方法。

它与PCA类似,但不仅仅考虑最大方差,还考虑了类别信息。

LDA通过将样本投影到一个新的低维空间,使得同类样本尽可能接近,不同类样本尽可能远离。

通过最大化类间散度和最小化类内散度的目标,可以得到最优的投影方向。

LDA不仅可以用于降维,还可以用于分类。

3. 方差选择(Variance Thresholding)方差选择是一种简单而有效的特征选择方法。

它通过计算每个特征的方差,并选择方差超过设定阈值的特征。

这种方法适用于二分类问题中,对于方差较小的特征,可以认为它们对分类结果的影响较小,可以被剔除。

4. 互信息(Information Gain)互信息是一种常用的特征选择方法。

它通过计算每个特征与目标变量之间的互信息,来评估特征的重要性。

互信息的值越大,表示特征与目标变量之间的相关性越强,因此越重要。

可以根据互信息的大小,选择具有高互信息值的特征进行降维。

5. 基于树模型的特征选择基于树模型的特征选择方法是一种常用的特征选择方法。

它通过构建决策树或随机森林等模型,来评估特征的重要性。

主成分分析的降维原理

主成分分析的降维原理

主成分分析的降维原理主成分分析(Principal Component Analysis, PCA)是一种常用的数据降维技术,可用于处理高维数据。

其原理是通过线性变换将原始数据映射到一个新的坐标系中,使得新的坐标系中的数据具有最大的方差。

本文将详细介绍主成分分析的降维原理。

1. 数据预处理在进行主成分分析之前,需要对数据进行预处理。

常用的预处理方法包括中心化和标准化。

中心化是指将数据的均值移到原点,即将每个维度的数据减去该维度数据的均值。

标准化是指将数据按照一定比例进行缩放,使得每个维度的数据具有相同的尺度。

2. 协方差矩阵计算在主成分分析中,我们首先需要计算数据的协方差矩阵。

协方差矩阵描述了数据各维度之间的关系。

对于一个n维数据集,协方差矩阵为一个n×n的矩阵,其中第i行第j列的元素表示第i个维度和第j个维度之间的协方差。

3. 特征值与特征向量计算通过对协方差矩阵进行特征值分解,我们可以得到特征值和特征向量。

特征值表示数据在对应特征向量方向上的方差,特征向量表示数据在对应特征值方向上的单位方向向量。

特征值和特征向量是成对出现的,且按照特征值的大小从大到小排列。

4. 选择主成分选择主成分的原则是保留方差最大的特征值及其对应的特征向量。

一般来说,前k个特征值的和占总特征值的比例越大,说明这k个主成分能够尽可能多地解释原始数据的方差,即保留的信息损失较小。

5. 数据映射选取保留的主成分后,我们将原始数据映射到主成分构成的新坐标系中。

具体而言,对于一个m×n的数据集,其中m为样本数量,n为维度数,我们可以将每个样本表示为n维向量,将选取的k个主成分表示为n×k的映射矩阵W。

通过将原始数据集与映射矩阵相乘,即可得到降维后的数据集。

6. 重构数据我们可以通过将降维后的数据集与映射矩阵的转置相乘,即可得到对原始数据的重构。

重构数据是对原始数据在主成分方向上的投影。

7. 解释性主成分分析的一个重要应用是解释性。

使用Matlab进行高维数据降维与可视化的方法

使用Matlab进行高维数据降维与可视化的方法

使用Matlab进行高维数据降维与可视化的方法数据降维是数据分析和可视化中常用的技术之一,它可以将高维数据映射到低维空间中,从而降低数据的维度并保留数据的主要特征。

在大数据时代,高维数据的处理和分析变得越来越重要,因此掌握高维数据降维的方法是一项关键技能。

在本文中,我们将介绍使用Matlab进行高维数据降维与可视化的方法。

一、PCA主成分分析主成分分析(Principal Component Analysis,PCA)是一种常用的降维方法,它通过线性变换将原始数据映射到新的坐标系中。

在新的坐标系中,数据的维度会减少,从而方便进行可视化和分析。

在Matlab中,PCA可以使用`pca`函数来实现。

首先,我们需要将数据矩阵X 传递给`pca`函数,并设置降维后的维度。

`pca`函数将返回一个降维后的数据矩阵Y和对应的主成分分析结果。

```matlabX = [1 2 3; 4 5 6; 7 8 9]; % 原始数据矩阵k = 2; % 降维后的维度[Y, ~, latent] = pca(X, 'NumComponents', k); % PCA降维explained_variance_ratio = latent / sum(latent); % 各主成分的方差解释比例```通过这段代码,我们可以得到降维后的数据矩阵Y,它的维度被减少为k。

我们还可以计算出每个主成分的方差解释比例,从而了解每个主成分对数据方差的贡献程度。

二、t-SNE t分布随机邻域嵌入t分布随机邻域嵌入(t-distributed Stochastic Neighbor Embedding,t-SNE)是一种非线性的高维数据降维方法,它能够有效地保留数据样本之间的局部结构关系。

相比于PCA,t-SNE在可视化高维数据时能够更好地展现不同类别之间的差异。

在Matlab中,t-SNE可以使用`tsne`函数来实现。

我们同样需要将数据矩阵X 传递给`tsne`函数,并设置降维后的维度。

人工智能开发技术中的降维方法

人工智能开发技术中的降维方法近年来,人工智能技术的飞速发展引起了广泛关注。

而在人工智能开发过程中,降维是一项重要的技术手段,可以大幅减少数据的复杂性和计算的复杂度,提高系统的性能和效率。

本文将探讨人工智能开发技术中的降维方法,并分析其优势和应用场景。

1. 主成分分析(PCA)主成分分析是一种常用的降维方法,通过线性变换将原始数据映射到一个新的低维空间中。

主成分分析的核心思想是找到能够保留原始数据大部分信息的新的特征向量,从而找到一个最佳的投影方向。

通过保留较少的主成分,可以实现数据的降维。

主成分分析具有以下几个优势:首先,可以提高系统的计算效率。

在大规模数据集上,尤其是高维数据集上进行计算是一项繁重的任务,通过主成分分析降维可以大幅减少计算的复杂度,提高计算速度。

其次,可以提高模型的泛化能力。

在人工智能领域,过拟合是一个常见的问题,通过主成分分析降维可以减少特征的个数,从而有效避免模型过拟合的问题,提高模型的泛化能力。

此外,主成分分析还可以帮助发现数据的内在结构,找到相关性强的特征,有助于深入理解数据和模型。

2. 奇异值分解(SVD)奇异值分解是一种线性代数的技术,常用于降维和解决矩阵相关的问题。

在人工智能开发中,奇异值分解可以用来在去除噪声的同时,保留数据的主要特征。

奇异值分解的优势包括:首先,奇异值分解能够有效地提取出数据集的主要特征,去除噪声和冗余信息,从而提高模型的准确性和鲁棒性。

其次,奇异值分解适用于处理高维数据,可以将高维数据降维到合适的维度,便于后续的数据分析和建模工作。

此外,奇异值分解还可以应对数据集中存在缺失值的情况,通过填补缺失值,提高数据集的完整性和可靠性。

3. 独立成分分析(ICA)独立成分分析是一种非线性的统计方法,通过寻找数据中相互独立的成分来实现降维。

与主成分分析不同,独立成分分析可以处理非高斯分布的数据,对于具有非线性特征的数据表现更为优越。

独立成分分析的优势包括:首先,独立成分分析能够从原始数据中提取出相互独立的特征,去除数据中的冗余信息,提高模型的鲁棒性和泛化能力。

python pca的数据降维方法

Python中的PCA(Principal Component Analysis,主成分分析)是一种常用的数据降维方法。

通过PCA,我们可以将高维的数据集转换为低维的数据集,从而减少数据集的特征数量。

在本文中,我们将介绍Python中PCA的使用方法以及其在数据降维中的应用。

1. PCA的原理PCA的主要思想是通过线性变换将原始数据集投影到一个新的坐标系中,使得投影后的数据集在新的坐标系中具有最大的方差。

这样可以实现将原始数据集中的信息压缩到少数几个维度中,同时尽可能保留原始数据的特征。

具体来说,PCA的步骤包括以下几点:1. 将原始数据集进行中心化处理,即使每个特征的均值为0。

2. 计算数据集的协方差矩阵。

3. 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。

4. 选择前k个特征值对应的特征向量作为新的基,将数据集投影到这个新的低维空间中。

2. Python中PCA的实现Python中有多种库可以实现PCA,比如NumPy、scikit-learn等。

下面以scikit-learn为例,介绍PCA的实现方法。

1. 导入需要的库```pythonfrom sklearn.dposition import PCAimport numpy as np```2. 创建数据集```pythondata = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])```3. 实例化PCA对象并进行数据转换```pythonpca = PCA(nponents=2)newData = pca.fit_transform(data)```3. PCA在数据降维中的应用在实际的数据分析中,PCA经常被用来对高维数据进行降维处理,从而帮助我们更好地理解和分析数据。

具体来说,PCA在数据降维中的应用包括以下几个方面:1. 可视化:通过将高维数据降维到二维或三维,可以更直观地展示数据集的结构和特征。

数据降维方法及其应用

数据降维方法及其应用数据降维是在机器学习和数据分析中经常使用的一种技术,它可以帮助我们从海量的数据中提取出重要的特征,以减少数据的维度并保留数据的关键信息。

本文将介绍一些常用的数据降维方法,并探讨它们在实际应用中的作用和效果。

一、主成分分析法(Principal Component Analysis, PCA)主成分分析是一种经典的数据降维方法,它通过线性变换将高维数据映射到低维空间中。

其基本思想是找到一组新的正交基,使得数据在新的基上具有最大的方差。

这样做的好处是,我们可以只保留方差较大的主成分,而忽略方差较小的次要成分,从而达到降低数据维度的目的。

PCA的应用非常广泛,比如在图像处理中,可以利用PCA将高维图像数据降低到低维,以实现图像的压缩和去噪等功能。

此外,在生物信息学中,PCA也常被用于基因表达数据的降维和挖掘,以辅助研究人员发现潜在的基因调控模式。

二、独立成分分析法(Independent Component Analysis, ICA)独立成分分析是一种非线性的数据降维方法,它的目标是将高维数据分解为多个相互独立的成分。

与PCA不同的是,ICA假设数据是由多个独立的隐变量线性组合而成的,通过寻找这些隐变量的线性组合权重,可以将数据进行降维。

ICA在信号处理、盲源分离等领域有广泛的应用。

例如,在语音信号处理中,利用ICA可以将混合语音分解为原始的音频信号,有助于语音识别和语音增强等任务的完成。

三、线性判别分析法(Linear Discriminant Analysis, LDA)线性判别分析是一种经典的分类数据降维方法,它的目标是找到一个投影方向,使得同类别样本的投影点尽可能近,不同类别样本的投影点尽可能远,从而实现样本的有效分类。

LDA可以看作是PCA在分类问题上的扩展。

LDA在模式识别、人脸识别等领域有广泛的应用。

例如,在人脸识别中,利用LDA可以提取出具有判别性的特征,从而实现对人脸图像的分类和识别。

社会经济指标的主成分分析与降维

社会经济指标的主成分分析与降维在社会经济领域,我们常常需要面对大量的指标数据,这些数据反映了社会经济的各个方面。

然而,由于指标之间的相关性以及数据的维度过高,我们很难从中提取出有用的信息。

这时,主成分分析(Principal Component Analysis,PCA)就成为了一种常用的降维方法。

主成分分析是一种通过线性变换将原始数据转化为一组线性无关的变量的方法。

它的基本思想是将高维数据映射到低维空间中,同时尽可能保留原始数据的信息。

在社会经济领域,我们可以将各种社会经济指标作为原始数据,通过主成分分析来发现其中的潜在因素。

首先,我们需要收集一组相关的社会经济指标数据,比如GDP、人口增长率、失业率、教育水平等等。

这些指标反映了一个国家或地区的经济状况和社会发展水平。

然后,我们将这些指标构成一个矩阵,每一行代表一个国家或地区,每一列代表一个指标。

接下来,我们需要对数据进行标准化处理。

这是因为不同指标的单位和量级可能不同,为了消除这种差异,我们可以将每个指标的数值减去该指标的平均值,然后除以该指标的标准差。

这样,我们就可以得到一个均值为0,方差为1的数据矩阵。

然后,我们计算数据矩阵的协方差矩阵。

协方差矩阵反映了各个指标之间的相关性。

通过计算协方差矩阵的特征值和特征向量,我们可以得到一组主成分。

特征值表示了主成分的重要性,特征向量表示了主成分的方向。

我们可以根据特征值的大小来选择保留多少个主成分。

一般来说,我们选择特征值大于1的主成分,因为这些主成分能够解释原始数据的大部分方差。

然后,我们可以将原始数据投影到选定的主成分上,得到降维后的数据。

通过主成分分析,我们可以将原始的高维数据转化为低维的主成分,从而减少数据的维度。

这样做的好处是可以简化数据的分析和可视化,同时减少计算的复杂性。

此外,主成分分析还可以帮助我们发现数据中的潜在因素,从而更好地理解社会经济的内在规律。

然而,主成分分析也有一些限制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、简介
PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。

这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。

这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?对于学习图像处理的人来说,都知道PCA是降维的,但是,很多人不知道具体的原理,为此,我写这篇文章,来详细阐述一下PCA及其具体计算过程:
二、PCA原理
1、原始数据:
为了方便,我们假定数据是二维的,借助网络上的一组数据,如下:
x=[2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1,1.5, 1.1]T
y=[2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]T
2、计算协方差矩阵
什么是协方差矩阵?相信看这篇文章的人都学过数理统计,一些基本的常识都知道,但是,也许你很长时间不看了,都忘差不多了,为了方便大家更好的理解,这里先简单的回顾一下数理统计的相关知识,当然如果你知道协方差矩阵的求法你可以跳过这里。

(1)协方差矩阵:
首先我们给你一个含有n个样本的集合,依次给出数理统计中的一些相关概念:
均值:
标准差:
方差:
既然我们都有这么多描述数据之间关系的统计量,为什么我们还要用协方差呢?我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。

面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为:
从协方差的定义上我们也可以看出一些显而易见的性质,如:
需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算CN2【此乃组合数基本公式】个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。

给出协方差矩阵的定义:
这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有三个维度{x,y,z},则协方差矩阵为
可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。

(2)协方差矩阵的求法:
协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。

下面我们将在matlab中用一个例子进行详细说明:
首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。

[cpp]view plaincopy
1.MySample=fix(rand(10,3)*50)
根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。

前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这
方便,我们先将三个维度的数据分别赋值:
[cpp]view plaincopy
1.dim1=MySample(:,1);
2.dim2=MySample(:,2);
3.dim3=MySample(:,3);
4.%计算dim1与dim2,dim1与dim3,dim2与dim3的协方差:
5.sum((dim1-mean(dim1)).*(dim2-mean(dim2)))/(size(MySample,1)-1)%得
到74.5333
6.sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%得
到-10.0889
7.sum((dim2-mean(dim2)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%得
到-10***000
8.%搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计
算:
9.std(dim1)^2%得到108.3222
10.std(dim2)^2%得到260.6222
11.std(dim3)^2%得到94.1778
12.%这样,我们就得到了计算协方差矩阵所需要的所有数据,调用Matlab自带的cov函数进行验
证:
13.cov(MySample)
可以看到跟我们计算的结果是一样的,说明我们的计算是正确的。

但是通常我们不用这种方法,而是用下面简化的方法进行计算:
先让样本矩阵中心化,即每一维度减去该维度的均值,然后直接用新的到的样本矩阵乘上它的转置,然后除以(N-1)即可。

其实这种方法也是由前面的公式通道而来,只不过理解起来不是很直观而已。

大家可以自己写个小的矩阵看一下就明白了。

其Matlab代码实现如下:[cpp]view plaincopy
1.X=MySample–repmat(mean(MySample),10,1);%中心化样本矩阵
2.C=(X’*X)./(size(X,1)-1)
3.%为方便对matlab不太明白的人,小小说明一下各个函数,同样,对matlab有一定基础的人直
接跳过:
4.%B=repmat(A,m,n)%%将矩阵A复制m×n块,即把A作为B的元素,B由m×n
个A平铺而成。

B的维数是[size(A,1)*m,(size(A,2)*n]
5.%B=mean(A)的说明:
6.%如果你有这样一个矩阵:A=[123;336;468;477];
7.%用mean(A)(默认dim=1)就会求每一列的均值
8.%ans=
9.% 3.0000 4.5000 6.0000
10.%用mean(A,2)就会求每一行的均值
11.%ans=
12.% 2.0000
13.% 4.0000
14.% 6.0000
15.% 6.0000
16.size(A,n)%%如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则size将返
回矩阵的行数或列数。

其中r=size(A,1)该语句返回的是矩阵A的行数,%c=size(A,2)该语句返回的是矩阵A的列数
上面我们简单说了一下协方差矩阵及其求法,言归正传,我们用上面简化求法,求出样本的协方差矩阵为:
3、计算协方差矩阵的特征向量和特征值
因为协方差矩阵为方阵,我们可以计算它的特征向量和特征值,如下:
[cpp]view plaincopy
1.[eigenvectors,eigenvalues]=eig(cov)
我们可以看到这些矢量都是单位矢量,也就是它们的长度为1,这对PCA来说是很重要的。

4、选择成分组成模式矢量
求出协方差矩阵的特征值及特征向量之后,按照特征值由大到小进行排列,这将给出成分的重要性级别。

现在,如果你喜欢,可以忽略那些重要性很小的成分,当然这会丢失一些信息,但是如果对应的特征值很小,你不会丢失很多信息。

如果你已经忽略了一些成分,那么最后的数据集将有更少的维数,精确地说,如果你的原始数据是n维的,你选择了前p个主要成分,那么你现在的数据将仅有p维。

现在我们要做的是组成一个模式矢量,这只是几个矢量组成的矩阵的一个有意思的名字而已,它由你保持的所有特征矢量构成,每一个特征矢量是这个矩阵的一列。

对于我们的数据集,因为有两个特征矢量,因此我们有两个选择。

我们可以用两个特征矢量组成模式矢量:
我们也可以忽略其中较小特征值的一个特征矢量,从而得到如下模式矢量:
5、得到降维后的数据
其中rowFeatureVector是由模式矢量作为列组成的矩阵的转置,因此它的行就是原来的模式矢量,而且对应最大特征值的特征矢量在该矩阵的最上一行。

rowdataAdjust是每一维数据减去均值后,所组成矩阵的转置,即数据项目在每一列中,每一行是一维,对我们的样本来说即是,第一行为x维上数据,第二行为y维上的数据。

FinalData是最后得到的数据,数据项目在它的列中,维数沿着行。

这将给我们什么结果呢?这将仅仅给出我们选择的数据。

我们的原始数据有两个轴(x和y),所以我们的原始数据按这两个轴分布。

我们可以按任何两个我们喜欢的轴表示我们的数据。

如果这些轴是正交的,这种表达将是最有效的,这就是特征矢量总是正交的重要性。

我们已经将我们的数据从原来的xy轴表达变换为现在的单个特征矢量表达。

说明:如果要恢复原始数据,只需逆过程计算即可,即:
到此为止,相信你已经掌握了PCA的原理了。

相关文档
最新文档