资源简介
我用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
- 上一篇:JAVA实现sql注入点检测
- 下一篇:中国省市区三级联动的JCombobox源代码
相关资源
- JAVA实现sql注入点检测
- JAVA socket收发数据,并支持断网自动
- sql server2000 Java驱动jdbc连接驱动
- 吉林大学Java程序设计实验报告
- eclipse java聊天室
- 医院药品管理系统
- Java数据库 项目案例:宠物商店
- java坦克大战源码已加入声音图片
- java2D Java Java Java
- java 雪景动画
- java实现的系统进程调度实验
- JAVA五子棋简单实现
- 韩顺平-山寨QQ
- java 物流管理系统
- java 医院管理系统
- java版 工资管理系统
- java工资管理系统119897
- jsp个人信息管理系统
- java web 开发 小项目java web 开发 小项目
- Java日历及备忘录
- 基于socket编写的java五子棋
- 基于JavaWeb的博客网站的设计与实现毕
- Java开发的游戏 贪吃蛇 完整项目
- JAVA互联网架构师完整不加密版
- JAVA做的学生成绩管理系统带源码
- Java带数据库的银行管理系统
- 旅行商问题-A*算法-java
- 企业商品销售管理系统jsp+java+sql
- 疯狂Java讲义第4版.txt
- JAVA操作串口demo和dll动态库和jar包__
评论
共有 条评论