皮皮网

【memcached源码分析 pdf】【MES生产源码】【溯源码100】pca源码

2024-11-18 21:41:09 来源:c32源码

1.C#中如何编写PCA算法代码?
2.PCA 降维算法 —— 原理与实现
3.FindVariableFeatures
4.2020-07-21
5.PCA降维(python)

pca源码

C#中如何编写PCA算法代码?

               PCA的处理步骤:

               1,均值化

               2,求协方差矩阵(我知道的有两种方法,这是第一种,按部就班的求,第二种是memcached源码分析 pdf:(A*A‘/(N-1)))

               3,求协方差的特征值和特征向量

               4,将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵

               5,将样本点投影到选取的特征向量上

       matlab实现源代码

%PCA算法,matlab实现

       function F=pcad(A,n)%A是M*N

       %测试实例A=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1;2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]

       %结果F=[0.,-1.,0.,0.,1.,0.,MES生产源码-0.,-1.,-0.,-1.]

       %PCA第一步:均值化

       X=A-repmat(mean(A,2),1,size(A,2))%去均值

       %PCA第二步:求特征协方差矩阵

       B=COV(X')%求协方差

       %PCA第三步:求特征协方差矩阵的特征值和特征向量

       [v,d]=eig(B)%求特征值和特征向量

       %PCA第四步:将特征值按照从大到小的顺序排序

       d1=diag(d);%取出对角矩阵,也就是把特征值提出来组成一个新的M*1的d1矩阵

       [d2 index]=sort(d1); %特征值以升序排序 d2是排序后的结果 index是数排序以前的排名位置

       cols=size(v,2);% 特征向量矩阵的列数

       for i=1:cols   %对特征向量做相反位置的调整 是个降序排列。这个过程把特征值和特征向量同时做相应的降序排列

           vsort(:,i) = v(:,index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量

           %vsort保存的是协方差矩阵降序后的特征向量,为M*M阶

           dsort(i) = d1(index(cols-i+1));  % dsort 保存的溯源码100是按降序排列的特征值,是一维行向量,1*M

       end  %完成降序排列

       M=vsort(:,1:n)%提取主成分量

       %PCA第五步:将样本点投影到选取的特征向量上

       F=(X'*M)'%最终的投影

PCA 降维算法 —— 原理与实现

       PCA(主成分分析)是一种常用的数据降维方法,通过线性变换提取数据的主要特征分量。适用于高维数据处理,具体步骤如下:

       1. 收集[公式]条[公式]维数据。

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

       3. 求解协方差矩阵的特征值与特征向量。

       4. 选择最大的pthread源码编译特征值对应的特征向量作为主成分,依次类推。

       使用numpy库实现PCA的Python代码如下:

       源代码链接:[github.com/leizhang-geo...]

       PCA的核心思想是将方差最大的方向作为主特征,使得数据在不同正交方向上相互独立。这有助于简化数据结构,但PCA存在局限性。对于高阶相关性数据,考虑使用Kernel PCA,通过Kernel函数转换为线性相关。网页市集源码PCA假设主特征分布在正交方向上,非正交方向存在较大方差时,PCA效果不佳。PCA是一种无参数技术,通用性强,但缺乏个性化优化能力。

FindVariableFeatures

         单细胞文章层出不重,在重现文章数据的时候发现,有的文章提供的是处理后的单细胞矩阵,而不是原始counts。其中有的数据甚至是scaled data,这样我就有疑问:直接利用scaled data能否进行单细胞分析。

          单细胞数据进行分析主要有几个步骤:lognormalized,FindVariableFeatures,scaledata,PCA,FindClusters。其中,可以略过lognormalized和scaledata步骤,但是FindVariableFeatures用来发现高可变基因,似乎只有scaled data不能进行高可变基因的发现,且这一步的高可变基因用于后续PCA分析,也不能省略,因此我看了下FindVariableFeatures的源码(Seurat V3版本):

          可以看到,高可变基因的获取是利用原始counts矩阵或者lognormalized data的j计算的,也就是说seurat作者认为scaled data来计算高可变基因可能是不准确的,因此文章只提供了scaled data是不能进行高可变基因的计算的。

          当然,会有好(tai)奇(gang)的人问了,我就是要用scaled data来运行FindVariableFeatures,会得到比较可靠的高可变基因吗?因此,我测试了下运用counts, lognormalized data, scaled data来进行高可变基因获取:

        可以看到,利用scaled data计算出来的高可变基因与counts,data计算出来的差别是很大的。

        那么没有高可变基因是不是就不能进行PCA等降维分析了呢?理论上当然不是,RunPCA可以自己指定基因来运行。

--

        主成分分析(PCA)是一种数据降维和去除相关性的方法,它通过线性变换将向量投影到低维空间。对向量进行投影就是对向量左乘一个矩阵,得到结果向量:

        在这里,结果向量的维数小于原始向量的维数。降维要确保的是在低维空间中的投影能很好地近似表达原始向量,即重构误差最小化。

        核心的问题的如何得到投影矩阵,和其他的机器学习算法一样,它通过优化目标函数得到。首先考虑最简单的情况,将向量投影到一维空间,然后推广到一般情况。

        假设有 n 个 d 维向量 X i ,如果要用一个向量 X 0 来近似代替它们,这个向量取什么值的时候近似代替的误差最小?如果用均方误差作为标准,就是要最小化如下函数:

        显然问题的最优解是这些向量的均值:

        证明很简单。为了求上面这个目标函数的极小值,对它的求梯度(求导)并令梯度等于0,可以得到

        解这个方程即可得到上面的结论。只用均值代表整个样本集过于简单,误差太大。作为改进,可以将每个向量表示成均值向量和另外一个向量的和:

        其中,e为单位向量,ai 是标量。上面这种表示相当于把向量投影到一维空间,坐标就是ai 。当e和ai取什么值的时候,这种近似表达的误差最小?

        这相当于最小化如下误差函数:

        将上面求得的ai带入目标函数中,得到只有变量e的函数:

        上式的后半部分和e无关,由于e是单位向量,因此有 ||e||=1 的约束,这个约束条件可以写成e T e=1。我们要求解的是一个带等式约束的极值问题,可以使用拉格朗日乘数法。构造拉格朗日函数:

        因此,这个矩阵半正定。这里需要最大化 e T Se 的值,由于

        因此, 为散度矩阵最大的特征值时, e T Se 有极大值,目标函数取得极小值。将上述结论从一维推广到 d' 维。每个向量可以表达成

        在这里 e i 是单位向量。误差函数变成

        可以证明,使得该函数取最小值的 e j 为散度矩阵最大的d'个特征值对应的单位长度特征向量,即求解下面的优化问题:

        其中, tr 为矩阵的迹。矩阵W的列 e j 是要求解的迹的基向量。散度矩阵是实对称矩阵,属于不同特征值的特征向量相互正交。前面已经证明这个矩阵半正定,特征值非负。这些特征向量构成一组基向量,可以用它们的线性组合来表达向量 x 。从另外一个角度来看,这种变换将协方差矩阵对角化,相当于去除了各分量之间的相关性。

        从上面的推导过程可以得到计算投影矩阵的流程如下:

        (1)计算样本集的均值向量,将所有向量减去均值,这成为白化;

        (2)计算样本集的协方差矩阵;

        (3)对协方差矩阵进行特征值分解,得到所有特征值与特征向量;

        (4)将特征值从大到小排序,保留最大的一部分特征值对应的特征向量,以它们为行,形成投影矩阵。

        具体保留多少个特征值由投影后的向量维数决定。使用协方差矩阵和使用散度矩阵是等价的,因为后者是前者的 n 倍,而矩阵 A 和 nA 有相同的特征向量。

        得到投影矩阵之后可以进行向量降维,将其投影到低维空间。向量投影的流程如下。

        (1)将样本减掉均值向量。

        (2)左乘投影矩阵,得到降维后的向量。

        向量重构指根据投影后的向量重构原始向量,与向量投影的作用和过程相反。向量重构的流程如下。

        (1)输入向量左乘投影矩阵的转置矩阵。

        (2)加上均值向量,得到重构后的结果。

        从上面的推导过程可以看到,在计算过程中没有使用样本标签值,因此,主成分分析是一种无监督学习算法。除了标准算法之外它还有多个变种,如稀疏主成分分析、核主成分分析、概率主分量分析等。

        源码讲解视频链接

PCA降维(python)

       PCA(主成分分析),作为常见的数据分析工具,通过线性变换实现高维数据的有效降维。其核心原理是将冗余的高维数据转化为一组不相关的低维表示,保留数据的主要特征信息。以iris数据集为例,PCA可将个相关变量压缩成5个主要成分,显著简化数据结构,提高分析效率。

       进行PCA降维通常包括以下步骤:首先,确保数据预处理无缺失值,因为PCA基于变量间的相关性;其次,根据研究目标选择PCA(降维)或EFA(探索潜在结构);接着,确定主成分或因子数量;然后,进行主成分或因子选择并可能进行旋转以增强解释性;最后,解释降维结果并计算主成分得分。

       在实践中,未调用特定包时,我们可以直观地观察特征值,如选取前两个主成分就能达到%的累积贡献率。比较降维前后数据的可视化效果,降维后的数据分布更清晰。至于包调用,如使用sklearn库,提供了更便捷的接口实现PCA降维,如通过PCA类进行操作。

       深入了解PCA的数学原理和Python实现,可以参考以下资源:

       郑申海:PCA的数学原理

       PCA(主成分分析)的python源码实现

       Python实现PCA降维教程

       机器学习中的PCA主成分分析指南

       Python与数据分析:炼数成金-Dataguru专业数据分析社区中的PCA详解

       这些资源将帮助你深入理解PCA并应用于实际的数据处理工作中。