• 大小: 95KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: Java
  • 标签: PCA  java  matlab  算法  

资源简介

我用java实现了PCA算法,其中调用了matlab的函数。

资源截图

代码片段和文件信息

package com.pca;
import java.math.*;

import a2.ab;
import Jama.Matrix;
public class Pca {
//将原始数据标准化
public double[][] Standardlizer(double[][] x){
int n=x.length; //二维矩阵的行号
int p=x[0].length; //二维矩阵的列号
double[] average=new double[p]; //每一列的平均值
double[][] result=new double[n][p]; //标准化后的向量
double[] var=new double[p];      //方差
//取得每一列的平均值
for(int k=0;k double temp=0;
for(int i=0;i temp+=x[i][k];
}
average[k]=temp/n;
}
//取得方差
for(int k=0;k double temp=0;
for(int i=0;i temp+=(x[i][k]-average[k])*(x[i][k]-average[k]);
}
var[k]=temp/(n-1);
}
//获得标准化的矩阵
for(int i=0;i for(int j=0;j result[i][j]=(double) ((x[i][j]-average[j])/Math.sqrt(var[j]));
}
}
return result;

}
//计算样本相关系数矩阵
public double[][] CoefficientOfAssociation(double[][] x){
int n=x.length; //二维矩阵的行号
int p=x[0].length; //二维矩阵的列号
double[][] result=new double[p][p];//相关系数矩阵
for(int i=0;i for(int j=0;j double temp=0;
for(int k=0;k temp+=x[k][i]*x[k][j];
}
result[i][j]=temp/(n-1);
}
}
return result;

}
//计算相关系数矩阵的特征值
public double[][] FlagValue(double[][] x){
//定义一个矩阵
      Matrix A = new Matrix(x);
      //由特征值组成的对角矩阵
     Matrix B=A.eig().getD();
     double[][] result=B.getArray();
     return result;


}
//计算相关系数矩阵的特征向量
public double[][] FlagVector(double[][] x){
//定义一个矩阵
      Matrix A = new Matrix(x);
      //由特征向量组成的对角矩阵
     Matrix B=A.eig().getV();
     double[][] result=B.getArray();

     return result;


}
//假设阈值是90%,选取最大的前几个
public int[] SelectPrincipalComponent(double[][] x){
int n=x.length; //二维矩阵的行号列号
double[] a = new double[n];
int[] result = new int[n];
int k=0;
double temp = 0;
int m=0;
double total=0;
for(int i=0;i for(int j=0;j if(i==j){
a[k]=x[i][j];
}
}
k++;
}
double[] temp1=new double[a.length];

System.arraycopy(a 0 temp1 0 a.length);
for(int i=0;i temp=temp1[i];
for(int j=i;j if(temp<=temp1[j]){
temp=temp1[j];
temp1[j]=temp1[i];
}

temp1[i]=temp;
}
}
for(int i=0;i temp=a[i];
for(int j=0;j if(a[j]>=temp){
temp=a[j];

k=j;

}
result[m]=k;

}
a[k]=-1000;

m++;
}
for(int i=0;i total+=temp1[i];
}
int sum=1;
temp=temp1[0];
for(int i=0;i if(temp/total<=0.9){
temp+=temp1[i+1];
sum++;
}
}
int[] end=new int[sum];
System.arraycopy(result 0 end 0 sum);

return end;

}
//取得主成分
public double[][] PrincipalComponent(double[][] xint[] y){
int n=x.length;
double[][] Result=new double[n][y.length];
int k=y.length-1;
for(int i=0;i for(int j=0

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-08-05 17:23  PCATest\
     文件         455  2013-08-06 17:15  PCATest\.classpath
     文件         383  2013-08-05 15:25  PCATest\.project
     目录           0  2013-08-05 15:25  PCATest\.settings\
     文件         598  2013-08-05 15:26  PCATest\.settings\org.eclipse.jdt.core.prefs
     目录           0  2013-08-06 17:15  PCATest\bin\
     目录           0  2013-08-06 17:15  PCATest\bin\com\
     目录           0  2013-08-06 17:15  PCATest\bin\com\pca\
     文件        3242  2013-08-06 19:26  PCATest\bin\com\pca\Pca.class
     文件        4658  2013-08-07 19:48  PCATest\bin\com\pca\Test.class
     目录           0  2013-08-06 17:27  PCATest\externalJar\
     文件       52232  2013-08-06 17:14  PCATest\externalJar\a2.jar
     文件       35981  2013-01-28 16:42  PCATest\externalJar\Jama-1.0.3.jar
     目录           0  2013-08-05 15:26  PCATest\src\
     目录           0  2013-08-05 15:26  PCATest\src\com\
     目录           0  2013-08-05 16:31  PCATest\src\com\pca\
     文件        3271  2013-08-06 19:26  PCATest\src\com\pca\Pca.java
     文件        2638  2013-08-07 19:48  PCATest\src\com\pca\Test.java

评论

共有 条评论