当前位置:首页 > 代码 > 正文

pca相关代码(pca csdn)

admin 发布:2022-12-19 18:43 104


今天给各位分享pca相关代码的知识,其中也会对pca csdn进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

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

      PCA的处理步骤:

1,均值化

2,求协方差矩阵(我知道的有两种方法,这是第一种,按部就班的求,第二种是:(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.8280,-1.7776,0.9922,0.2742,1.6758,0.9129,-0.0991,-1.1446,-0.4380,-1.2238]

%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 保存的是按降序排列的特征值,是一维行向量,1*M

end  %完成降序排列

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

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

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

求pca(PricipalComponentAnalysis)的java代码

package PCA;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import org.jblas.ComplexDoubleMatrix;

import org.jblas.DoubleMatrix;

import org.jblas.Eigen;

public class PCA {

 /**

  * Reduce matrix dimension     减少矩阵维度

  * @param source   源矩阵

  * @param dimension  目标维度

  * @return Target matrix  返回目标矩阵

  */ 

public static void main(String[] args){

DoubleMatrix d = new DoubleMatrix(new double[][]{{-1,-1,0,2,0},

{-2,0,0,1,1}});

DoubleMatrix result = PCA.dimensionReduction(d, 2);

System.out.println(result);

}

public static DoubleMatrix dimensionReduction(DoubleMatrix source, int dimension) {

//C=X*X^t/m 矩阵*矩阵^异或/列数

DoubleMatrix covMatrix = source.mmul(source.transpose()).div(source.columns);

ComplexDoubleMatrix eigVal = Eigen.eigenvalues(covMatrix);

ComplexDoubleMatrix[] eigVectorsVal = Eigen.eigenvectors(covMatrix);

ComplexDoubleMatrix eigVectors = eigVectorsVal[0];

//通过特征值将符号向量从大到小排序

ListPCABean beans = new ArrayListPCA.PCABean();

for (int i = 0; i  eigVectors.columns; i++) {

beans.add(new PCABean(eigVal.get(i).real(), eigVectors.getColumn(i)));

}

Collections.sort(beans);

DoubleMatrix newVec = new DoubleMatrix(dimension, beans.get(0).vector.rows);

for (int i = 0; i  dimension; i++) {

ComplexDoubleMatrix dm = beans.get(i).vector;

DoubleMatrix real = dm.getReal();

newVec.putRow(i, real);

}

return newVec.mmul(source);

}

static class PCABean implements ComparablePCABean {

double eigenValue;

ComplexDoubleMatrix vector;

public PCABean(double eigenValue, ComplexDoubleMatrix vector) {

super();

this.eigenValue = eigenValue;

this.vector = vector;

}

@Override

public int compareTo(PCABean o) {

return Double.compare(o.eigenValue, eigenValue);

}

@Override

public String toString() {

return "PCABean [eigenValue=" + eigenValue + ", vector=" + vector + "]";

}

}

}

org.jblas的jar包去百度下一个,我不知道怎么上传文件

基于PCA的图像融合的代码

private void lbl_CutImage_Paint(object sender, PaintEventArgs e)

{

int imgWidth = this.lbl_CutImage.Width - 4;

int imgHeight = this.lbl_CutImage.Height - 4;

if (imgWidth 1) { imgWidth = 1; }

if (imgHeight 1) { imgHeight = 1; }

// 创建缓存图像,先将要绘制的内容全部绘制到缓存中,最后再一次性绘制到 Label 上,

// 这样可以提高性能,并且可以防止屏幕闪烁的问题

Bitmap bmp_lbl = new Bitmap(this.lbl_CutImage.Width, this.lbl_CutImage.Height);

Graphics g = Graphics.FromImage(bmp_lbl);

// 将要截取的部分绘制到缓存

Rectangle destRect = new Rectangle(2, 2, imgWidth, imgHeight);

Point srcPoint = this.lbl_CutImage.Location;

srcPoint.Offset(2, 2);

Rectangle srcRect = new Rectangle(srcPoint, new System.Drawing.Size(imgWidth, imgHeight));

g.DrawImage(this.screenImage, destRect, srcRect, GraphicsUnit.Pixel);

SolidBrush brush = new SolidBrush(Color.FromArgb(10, 124, 202));

Pen pen = new Pen(brush, 1.0F);

关于pca相关代码和pca csdn的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/18191.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载