核主成分分析法代码

合集下载

数据分析知识:如何进行数据分析的核主成分分析

数据分析知识:如何进行数据分析的核主成分分析

数据分析知识:如何进行数据分析的核主成分分析数据分析知识:如何进行数据分析的核主成分分析在进行数据分析的过程中,一项重要的任务就是降维,即从大量数据中提取出主要的特征。

核主成分分析(Kernel PCA)是一种有效的降维方法,通过它可以将高维的数据转化为低维的数据,并在不失去重要信息的前提下,更好地表达数据。

1. PCA与Kernel PCA的区别在介绍Kernel PCA之前,我们先来了解一下主成分分析(PCA)。

PCA是一种常用的降维方法,它通过对原始数据进行线性变换,将其转化为一组新的维度,使得在新的维度下,数据的方差尽可能地大。

在新的维度下,数据形成一个坐标系,每个坐标轴被称为主成分。

与PCA不同的是,Kernel PCA(以下简称KPCA)是一种非线性的方法。

KPCA可以将高维数据通过核函数映射到特征空间,并在特征空间中进行PCA,从而实现对数据的降维。

2. KPCA的基本原理KPCA的基本原理是通过非线性映射将原始数据映射到一个高维的特征空间(称为核空间),然后在该空间中进行PCA,得到新的成分,最后再将其映射回原始的数据空间。

与PCA相比,KPCA提供了更高的灵活性和表达能力。

具体地,设有一个n个数据点的样本集{xi},x是一个d维的向量,即x∈R^d。

首先在原始的数据空间中定义一个核函数,用于将原始数据点映射到一个新的特征空间。

核函数的作用在于,通过量化数据点之间的相似性,并将相似的点映射到特征空间中的相邻位置。

核函数可以选择多项式核函数、高斯核函数或sigmoid核函数等。

这里以高斯核函数为例:K(x,xi)=exp(−|| x−xi ||^2 / 2σ^2)其中,x和xi是原始数据点,K(x,xi)是将x和xi映射到特征空间的函数值,σ是高斯核函数的带宽参数。

映射后,我们得到的是一个在特征空间内的数据集{Φ(xi) },Φ(xi)是一个M维的向量。

在特征空间中,我们可以得到主成分和贡献率,就像在PCA中一样。

核主元分析在故障诊断中的研究与应用

核主元分析在故障诊断中的研究与应用

核主元分析在故障诊断中的研究与应用摘要化工在工业生产中占有举足轻重的地位,它几乎涉及到人们生活的各个方面,近年来,随着科学技术,尤其是计算机技术的飞速发展,化工过程生产装置的规模越来越大,工艺越来越复杂,自动化水平越来越高,因此化工过程的安全性和可靠性就显得特别重要。

采用故障诊断技术来提高化工过程的安全性和可靠性是一种有效而重要的方法,因此对化工过程进行故障诊断研究具有极其重要的价值。

本文介绍了主元分析法和核主元分析法在故障诊断的研究应用,并在化工过程中进行了仿真应用研究,针对主元分析法(PCA)应用于复杂非线性的化工过程故障检测时存在性能差的问题。

我们提出利用核主元分析法(KPCA)来进行故障检测的思想,从而将输入空间中复杂的非线性问题转化为特征空间中的线性问题,在特征空间中采用T2和SPE 的贡献率检测出系统的故障。

TE过程的研究应用验证了算法的可行性,达到了预期的效果。

关键词:故障检测主元分析核主元分析TE过程Ikernel principal component analysis in failure diagnosis research andapplicationAbstractChemical industry plays a very important role in industrial production, it involves almost all aspects of people,s lives. In recent years, along with the development of scienee and technology, especially computer technology, production units of chemieal industry become bigger and bigger. Technological processes beeome more complex, automatic level becomes higher and higher. Therefore, the security and reliability of chemieal proeess is more important. There is are many methods to improve system’s, fault diagnosis technology is avery effeetive and important method to improve the security and reliability of chemical proeess. So research on fault diagnosis has vitally important value for chemical industry process.The thesis introduces the methods of principal component analysis and kernel principal component analysis are analyzed for fault diagnosis, and simulations are applied to Tennessee Eastman chemical proeess. For complex and nonlinear chemical industry processes, the performance of fault detection is very poor when principal component analysis (PCA) is used. Thus the concept of using kernel principal component analysis (KPCA) to conduct fault detection is proposed, which will make the complex nonlinear problem in input space convert into linear problem in feature space, according to calculate the contribution of each original variable for Hotelling T2 and SPE to research on fault detection. The application study of Tennessee Eastman chemical process proves the feasibility of the proposed methods, and achieves the expected results.Key Words:fault detection; principal component analysis; kernel principal component; Tennessee Eastman processII目录摘要 (I)Abstract (II)第一章绪论 (1)1.1课题背景 (1)1.2 故障诊断方法 (1)1.2.1 依赖于模型的故障诊断方法 (1)1.2.2 不依赖于模型的故障诊断方法 (2)1.3 仿真技术 (3)1.4 动态系统仿真工具Matlab/Simulink简介 (3)1.5 本论文主要研究工作 (3)第二章基于特征样本核主元分析的过程故障检测方法 (4)2.1 主元分析方法介绍 (4)2.2 应用PCA的前提条件 (4)2.3 PCA基本原理及PCA算法 (4)2.4 主元分析故障检测的基本方法 (5)2.5 核主元分析研究背景 (6)2.6 核主元分析 (6)2.6.1 核主元算法 (6)2.6.2 特征样本提取 (8)2.7 核主元在线故障监测方法 (9)2.7.1 基于T2和SPE的在线故障检测方法 (9)2.7.2 核主元的故障监测步骤 (10)2.8 主元分析法和核主元分析法的比较 (11)第三章TE过程描述 (13)3.1 TE模型实验系统的概述 (13)3.2 数据的生成 (15)3.3 TE仿真模型 (15)第四章仿真过程的建立与结果 (18)4.1 数据来源 (18)4.2 故障检测分析 (19)III第五章总结 (27)参考文献 (28)致谢 (30)附录 (I)IV南京工业大学本科毕业设计(论文)第一章绪论1.1课题背景目前,故障诊断技术已成为一个十分活跃的研究领域。

核主成分分析方法(KPCA)怎么理解?

核主成分分析方法(KPCA)怎么理解?

核主成分分析⽅法(KPCA)怎么理解?
先回顾下主成分分析⽅法。

PCA的最⼤⽅差推导的结论是,把数据投影到特征向量的⽅向后,⽅差具有极⼤值的。

假如先把数据映射到⼀个新的特征空间,再做PCA会怎样?对于⼀些数据,⽅差会更好地保留下来。

⽽核⽅法就是提供了⼀些映射到新的特征空间的选择。

假设这个映射为ϕ(x i), 数据从新的特征空间投影到向量w的⽅差,由前⼀节主成分分析⽅法可以得到
D=w T∗(1
n∑X T∗X)∗w,其中X T=[ϕ(x
1),ϕ(x2),...,ϕ(x n)]. 这⾥X
T∗X矩阵是不可知的,更加⽆法求出它的特征向量。

但是我们知道X∗X T是⼀个核矩阵,每个元素可以由核函数计算出来,可以对核矩阵进⾏特征值分解XX T u=λu, 等式两边乘以X T 得到X T X(X T u)=λ(X T u) ,原来两个矩阵的特征值是⼀样的!
⽽特征向量X T u是不可知的,但是没关系,我们只需要知道从新的特征空间投影回来的坐标就可以了。

先把X T u单位化为v,很容易推导出它的长度为√λ, 那么投影后的坐标为
v T∗ϕ(x′)=
1
√λuXϕ(x′), 是可以⽤核函数求出来的,于是⽤核⽅法降维后的点就算出来的。

Processing math: 100%。

主成分分析源代码)

主成分分析源代码)

1.function y = pca(mixedsig)2.3.%程序说明:y = pca(mixedsig),程序中mixedsig为 n*T 阶混合数据矩阵,n为信号个数,T为采样点数4.% y为 m*T 阶主分量矩阵。

5.% n是维数,T是样本数。

6.7.if nargin == 08. error('You must supply the mixed data as input argument.');9.end10.if length(size(mixedsig))>211. error('Input data can not have more than two dimensions. ');12.end13.if any(any(isnan(mixedsig)))14. error('Input data contains NaN''s.');15.end16.17.%——————————————去均值————————————18.meanValue = mean(mixedsig')';19.[m,n] = size(mixedsig);20.%mixedsig = mixedsig - meanValue*ones(1,size(meanValue)); %当数据本身维数很大时容易出现Out of memory21.for s = 1:m22. for t = 1:n23.mixedsig(s,t) = mixedsig(s,t) - meanValue(s);24. end25.end26.[Dim,NumofSampl] = size(mixedsig);27.oldDimension = Dim;28.fprintf('Number of signals: %d\n',Dim);29.fprintf('Number of samples: %d\n',NumofSampl);30.fprintf('Calculate PCA...');31.firstEig = 1;stEig = Dim;33.covarianceMatrix = corrcoef(mixedsig'); %计算协方差矩阵34.[E,D] = eig(covarianceMatrix); %计算协方差矩阵的特征值和特征向量35.36.%———计算协方差矩阵的特征值大于阈值的个数lastEig———37.%rankTolerance = 1;38.%maxLastEig = sum(diag(D) >= rankTolerance);39.%lastEig = maxLastEig;stEig = 10;41.43.eigenvalues = flipud(sort(diag(D)));44.45.%—————————去掉较小的特征值——————————46.if lastEig < oldDimension47. lowerLimitValue = (eigenvalues(lastEig) + eigenvalues(lastEig+ 1))/2;48.else49. lowerLimitValue = eigenvalues(oldDimension) - 1;50.end51.lowerColumns = diag(D) > lowerLimitValue;52.53.%—————去掉较大的特征值(一般没有这一步)——————54.if firstEig > 155. higherLimitValue = (eigenvalues(firstEig - 1) + eigenvalues(firstEig))/2;56.else57. higherLimitValue = eigenvalues(1) + 1;58.end59.higherColumns = diag(D) < higherLimitValue;60.61.%—————————合并选择的特征值——————————62.selectedColumns =lowerColumns & higherColumns;63.64.%—————————输出处理的结果信息—————————65.fprintf('Selected [%d] dimensions.\n',sum(selectedColumns));66.fprintf('Smallest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(lastEig));67.fprintf('Largest remaining (non-zero) eigenvalue[ %g ]\n',eigenvalues(firstEig));68.fprintf('Sum of removed eigenvalue[ %g ]\n',sum(diag(D) .* (~selectedColumns)));69.70.%———————选择相应的特征值和特征向量———————71.E = selcol(E,selectedColumns);72.D = selcol(selcol(D,selectedColumns)',selectedColumns);73.74.%——————————计算白化矩阵———————————75.whiteningMatrix = inv(sqrt(D)) * E';76.dewhiteningMatrix = E * sqrt(D);77.78.%——————————提取主分量————————————79.y = whiteningMatrix * mixedsig;80.82.function newMatrix = selcol(oldMatrix,maskVector)83.if size(maskVector,1)~= size(oldMatrix,2)84. error('The mask vector and matrix are of uncompatible size.');85.end86.numTaken = 0;87.for i = 1:size(maskVector,1)88. if maskVector(i,1) == 189.takingMask(1,numTaken + 1) = i;90.numTaken = numTaken + 1;91. end92.end93.newMatrix = oldMatrix(:,takingMask);。

核主成分分析

核主成分分析

核主成分分析核主成分分析(PrincipalComponentAnalysis,简称PCA)是一种常用的数据挖掘技术,它有助于对数据进行更有效的分析,以便从原始数据中提取更多信息。

PCA是一种统计分析方法,可以把原始变量转换为一组具有相关性的新变量,即主成分,它们能够捕捉原始变量的最大变化量,并且能很好地反映数据集中的总体分布。

将一组变量转换成一组主成分可提高数据集的分析能力,主要有以下几个优点:首先,可以把原始变量降维,从而减少信息的噪音。

其次,主成分可以提高变量的透明度。

最后,主成分可以更好地捕捉复杂的数据集中的关系。

从数学角度解释,PCA的原理有三个步骤:首先,确定输入变量的协方差矩阵,其次,求出协方差矩阵的特征值和特征向量,最后,按照特征值大小进行排序,获得由最大到最小排序的特征值和特征向量,从而构建特征空间来实现数据降维。

如何使用PCA呢?在使用PCA时,第一步是确定给定数据集的协方差矩阵,即根据各变量之间的相关性计算出协方差矩阵。

之后,对该协方差矩阵进行特征分解,求出该矩阵的特征值和特征向量,最后,按照特征值大小进行排序,构建特征空间,从而实现数据变化。

使用PCA还有一些注意事项,首先,由于它是一种线性降维方法,所以如果要得到有效的结果,所需要分析的数据应该是线性可分的;其次,由于PCA计算量较大,所以在使用的过程中必须调整系统的参数,以降低计算量;最后,PCA的技术性取决于数据集的偏度,所以在使用PCA之前,最好对数据进行正态化或标准化处理以消除数据的噪声。

总之,PCA是一种有效的数据挖掘技术,可以帮助分析者更有效地分析数据集,从而提取更多的信息。

不过使用PCA也有一定的注意事项,需要用户根据实际情况来决定是否采用这种方法。

kpca算法的python实现

kpca算法的python实现

kpca算法的python实现kpca算法是一种非线性降维算法,它是基于核技巧的主成分分析方法。

本文将介绍kpca算法的原理和python实现。

我们来了解一下主成分分析(PCA)算法。

PCA是一种常用的线性降维算法,它通过寻找数据中的主要方向来减少数据的维度。

然而,PCA只适用于线性可分的数据,对于非线性数据效果不佳。

而kpca 算法则是通过引入核函数,将数据映射到高维空间中,从而使得原本线性不可分的数据在新的高维空间中线性可分。

具体来说,kpca算法的实现步骤如下:1. 计算核矩阵:首先,根据给定的核函数,计算原始数据的核矩阵。

核矩阵是一个对称的矩阵,它的元素是通过核函数计算得到的两个样本之间的相似度。

2. 中心化核矩阵:对核矩阵进行中心化操作,即将每一行和每一列的元素减去各自的均值,从而消除数据的平移影响。

3. 计算核矩阵的特征值和特征向量:通过对中心化的核矩阵进行特征值分解,得到核矩阵的特征值和对应的特征向量。

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

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

接下来,我们使用python实现kpca算法。

首先,我们需要导入所需的库:```pythonimport numpy as npfrom sklearn.decomposition import PCAfrom sklearn.preprocessing import StandardScaler```然后,我们定义一个kpca类,其中包含fit和transform两个方法:```pythonclass KPCA:def __init__(self, n_components=2, kernel='linear'):self.n_components = n_componentsself.kernel = kerneldef fit(self, X):# 计算核矩阵kernel_matrix = self._calculate_kernel_matrix(X)# 中心化核矩阵centered_kernel_matrix = self._center_kernel_matrix(kernel_matrix)# 计算核矩阵的特征值和特征向量eigenvalues, eigenvectors = self._calculate_eigen(centered_kernel_matrix)# 选择主成分ponents_ = eigenvectors[:, :self.n_components]return selfdef transform(self, X):# 计算核矩阵kernel_matrix = self._calculate_kernel_matrix(X)# 中心化核矩阵centered_kernel_matrix = self._center_kernel_matrix(kernel_matrix)# 将数据投影到主成分上return np.dot(centered_kernel_matrix, ponents_)def _calculate_kernel_matrix(self, X):# 计算核矩阵if self.kernel == 'linear':kernel_matrix = np.dot(X, X.T)elif self.kernel == 'rbf':sigma = 1.0pairwise_sq_dists = np.sum((X[:, np.newaxis] - X[np.newaxis, :]) ** 2, axis=-1)kernel_matrix = np.exp(-pairwise_sq_dists / (2 * sigma ** 2))else:raise ValueError("Invalid kernel.")return kernel_matrixdef _center_kernel_matrix(self, kernel_matrix):# 中心化核矩阵n_samples = kernel_matrix.shape[0]one_n = np.ones((n_samples, n_samples)) / n_samples centered_kernel_matrix = kernel_matrix - one_n.dot(kernel_matrix) - kernel_matrix.dot(one_n) + one_n.dot(kernel_matrix).dot(one_n)return centered_kernel_matrixdef _calculate_eigen(self, kernel_matrix):# 计算核矩阵的特征值和特征向量eigenvalues, eigenvectors = np.linalg.eigh(kernel_matrix)return eigenvalues[::-1], eigenvectors[:, ::-1]```在以上代码中,我们定义了一个KPCA类,其中包含了_fit_kernel_matrix、_center_kernel_matrix和_calculate_eigen三个私有方法。

主成分分析和主成分回归(附实际案例和sas代码)

目录主成分分析和主成分回归(附实际案例和sas代码) (2)1 主成分分析的主要思想 (2)2 主成分分析的定义 (2)3 案例基本情况介绍餐饮业零售额相关因素 (3)4 案例相关因素的介绍相关因素的具体数据 (3)5 影响餐饮业零售额因素的主成分分析 (4)6 主成分回归 (9)主成分分析和主成分回归(附实际案例和sas 代码)1 主成分分析的主要思想在进行高维数据系统分析时,通过主成分分析,可以在纷繁的指标变量描述下,了解影响这个系统存在与发展的主要因素。

主成分分析是1933年由霍特林首先提出来的。

在信息损失最小的前提下,将描述某一系统的多个变量综合成少数几个潜变量,从而迅速揭示系统形成的主要因素,并把原来高维空间降到低维子空间。

主成分分析是研究如何通过少数几个主成分来解释多变量的方差的分析方法,也就是求出少数几个主成分,使他们尽可能多地保留原始变量的信息,且彼此不相关它是一种数学变换方法,即把给定的一组变量通过线性变换,转换为一组不相关的变量,在这种变换中保持变量的总方差不变,同时具有最大总方差,称为第一主成分;具有次大方差,成为第二主成分。

依次类推。

若共有p 个变量,实际应用中一般不是找p 个主成分,而是找出个)(p m m <主成分就够了,只要这m 个主成分能够反映原来所有变量的绝大部分的方差。

2 主成分分析的定义设研究对象涉及P 个指标,分别用p X X X ,,21表示,这个指标构成P 维随机向量为)',,,(21p X X X X =。

设随机向量的均值为u ,协方差矩阵为Σ。

主成分分析就是对随机向量进行线性变换以形成新的综合变量,用i Z 表示,满足下式:1212,1,2,,i i i ip P Z u X u X u X i p =++⋅⋅⋅+= (1)为了使新的综合变量能够充分反映原来变量的信息,则i Z 的方差尽可能大且各个i Z 之间不相关。

由于没有限制条件方差可以任意大,设有线面的约束条件:222121,(1,2,)i i ip u u u i p ++⋅⋅⋅== (2)主成分则为满足条件的i Z 。

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. 核主成分分析(Kernel PCA)核主成分分析通过使用核技巧将线性PCA扩展到非线性情况。

它通过将数据从原始空间映射到一个高维特征空间,然后在高维空间中进行PCA,从而实现非线性降维。

核PCA可以更好地处理非线性关系,但计算复杂度较高。

2. 稀疏主成分分析(Sparse PCA)稀疏主成分分析是一种改进的PCA方法,旨在产生稀疏的主成分。

传统PCA生成的主成分是线性组合的数据特征,而稀疏PCA将主成分的系数限制在一定范围内,产生稀疏的解。

这样可以更好地捕捉数据的稀疏结构,提高降维效果。

3. 增量主成分分析(Incremental PCA)增量主成分分析是一种改进的PCA方法,用于处理大型数据集。

传统PCA需要一次性计算所有数据的协方差矩阵,如果数据量很大,计算复杂度就会很高。

增量PCA通过将数据分批进行处理,逐步计算主成分,从而减轻计算负担。

这样可以在处理大型数据集时实现更高效的降维。

4. 自适应主成分分析(Adaptive PCA)自适应主成分分析是一种改进的PCA方法,旨在处理具有时变性质的数据。

传统PCA假设数据的统计特性不会发生变化,但在现实世界中,许多数据集的统计特性会随着时间的推移而变化。

自适应PCA可以自动适应数据的变化,并更新主成分以适应新的数据分布。

5. 鲁棒主成分分析(Robust PCA)鲁棒主成分分析是一种改进的PCA方法,用于处理包含离群点或噪声的数据。

传统PCA对离群点和噪声十分敏感,可能导致降维结果出现严重偏差。

鲁棒PCA通过引入鲁棒估计方法,可以更好地处理异常值和噪声,提高降维结果的鲁棒性。

以上是常见的几种PCA的改进方法,每种方法都有其适用的场景和优缺点。

研究人员可以根据实际需求选择适合的方法,以实现更好的降维效果。

运用R语言实现主成分分析算法的性能对比研究

运用R语言实现主成分分析算法的性能对比研究主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维算法,可以用于对高维数据进行特征提取和可视化。

本文将运用R语言实现主成分分析算法,并对不同的性能指标进行比较研究。

首先,我们需要载入R中主成分分析相关的包,如"stats"和"factoextra"包,以便后续使用。

使用以下代码进行载入:```R# 载入主成分分析相关的包library(stats)library(factoextra)```接下来,我们需要读取数据,可以选择一个数据集进行主成分分析。

这里我们选择使用R自带的数据集"iris"作为示例。

使用以下代码读取数据集:```R# 读取数据集data(iris)```数据集加载完成后,我们需要对数据进行预处理,包括缺失值处理和数据标准化。

使用以下代码进行数据预处理:```R# 缺失值处理iris <- na.omit(iris)# 数据标准化iris_standardized <- scale(iris[,1:4])```数据预处理完成后,我们可以开始进行主成分分析。

使用以下代码进行主成分分析:```R# 主成分分析pca_result <- prcomp(iris_standardized)```主成分分析完成后,我们可以查看主成分的方差解释比例以及累积方差解释比例。

使用以下代码查看:```R# 方差解释比例variance_explained <- 100 * pca_result$sdev^2 / sum(pca_result$sdev^2)variance_explained# 累积方差解释比例cumulative_variance_explained <- cumsum(variance_explained)cumulative_variance_explained```接下来,我们可以选择保留的主成分数量,可以根据方差解释比例和累积方差解释比例来确定。

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

clear;
clc;
load normal.mat
X = normal; % X训练数据集
[Xrow, Xcol] = size(X); % Xrow:样本个数 Xcol:样本属性个数
%% 数据预处理,进行标准化出理,处理后均值为0方差为1
Xc = mean(X); % 求原始数据的均值
Xe = std(X); % 求原始数据的方差
X0 = (X-ones(Xrow,1)*Xc) ./ (ones(Xrow,1)*Xe); % 标准阵X0,标准化为均值0,方差1;
c = 20000; %此参数可调
%% 求核矩阵
for i = 1 : Xrow
for j = 1 : Xrow
K(i,j) = exp(-(norm(X0(i,:) - X0(j,:)))^2/c);%求核矩阵,采用径向基核函数,参数c end
end
%% 中心化矩阵
n1 = ones(Xrow, Xrow);
N1 = (1/Xrow) * n1;
Kp = K - N1*K - K*N1 + N1*K*N1; % 中心化矩阵
%% 特征值分解
[V, D] = eig(Kp); % 求协方差矩阵的特征向量(V)和特征值(D)
lmda = real(diag(D)); % 将主对角线上为特征值的对角阵变换成特征值列向量
[Yt, index] = sort(lmda, 'descend'); % 特征值按降序排列,t是排列后的数组,index是序号
%% 确定主元贡献率记下累计贡献率大于85%的特征值的序号放入 mianD中
rate = Yt / sum(Yt); % 计算各特征值的贡献率
sumrate = 0; % 累计贡献率
mpIndex = []; % 记录主元所在特征值向量中的序号
for k = 1 : length(Yt) % 特征值个数
sumrate = sumrate + rate(k); % 计算累计贡献率
mpIndex(k) = index(k); % 保存主元序号
if sumrate > 0.85
break;
end
end
npc = length(mpIndex); % 主元个数
%% 计算负荷向量
for i = 1 : npc
zhuyuan_vector(i) = lmda(mpIndex(i)); % 主元向量
P(:, i) = V(:, mpIndex(i)); % 主元所对应的特征向量(负荷向量)end
zhuyuan_vector2 = diag(zhuyuan_vector); % 构建主元对角阵。

相关文档
最新文档