• 大小: 2.48MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2023-12-30
  • 语言: C/C++
  • 标签: C++  PCA  KPCA  

资源简介

C++实现数据降维,包括PCA、KPCA两种方法,资源为Visual Studio2013完整工程代码。

资源截图

代码片段和文件信息

#include“pca.h“    
#include“kpca.h“
void main()
{
//pca

cout << “-----------------------pca------------------------“ << endl;
int i j t;
int m n;
double **x **c **v **Project;
double *A *B;
sourcedata pp;

double eps = 0.000001; //jacobi方法的终止精度            
double getratio = 0.9; //特征值的提取率      
const  char *File = “test1.txt“;  //原始数据文件名称    
const char *projectfile = “pcaproject.txt“; //处理后的数据文件名称    
PCA pca(2 3);   //声明一个临时对象调用成员函数来获取数据    
pp = pca.getdata(File);  //获取外部数据    
x = pp.data;
m = pp.m;
n = pp.n;

cout << “数据的行数为“ << m << “,数据的列数为 “ << n << endl;
A = new double[n];
B = new double[n];
v = new double*[n];
for (i = 0; i < n; i++)
v[i] = new double[n];
PCA  testpca(m n);   //声明一个对象并初始化           
testpca.standarddata(x); //对数据进行标准化处理           
c = testpca.matrixproduct(x); //获取协方差矩阵       
i = testpca.jcb(c v eps 100); //求取特征值和特征向量    
for (int k = 0; k < n; k++)
A[k] = c[k][k]; //获取特征值    
testpca.zhengjiao(v);   //正交化特征向量    
testpca.selectionsort(A v); //特征值和特征向量排序        
t = testpca.selectcharactor(A getratio B); //提取特征值    
cout << “PCA降维后的维数:“ << t << endl;
cout << “排序后提取的特征值及对应的特征向量“ << endl;
for (i = 0; i <= t - 1; i++)
printf(“%13.7e  “ A[i]);
printf(“\n\n“);
for (i = 0; i < n; i++)
{
for (j = 0; j < t; j++)
printf(“%13.7e  “ v[i][j]);
printf(“\n“);

}
cout << “特征值的累计贡献率是“ << endl;
for (i = 0; i < n; i++)
cout << B[i] << “  “;
cout << endl;
cout << “当提取效率是“ << getratio << “时提取了前“ << t << “个分量“ << endl;
if (t >= 1 && t <= n)
Project = testpca.getProject(t x v);  //计算投影       
else
cout << “error“ << endl;
testpca.saveProject(projectfile Project t); //保存数据到文件  



//kpca

cout << endl<< “----------------------kpca------------------------“ << endl;
int a;
int l = 50; //随机提取样本的数目
const char *File2 = “test2.txt“;
const char*eigenvectors = “eigen.txt“; //特征值和特征向量存储文件名称
const char *projectfile2 = “kpcaproject.txt“; //提取出的投影文件存储名称
SourceData pdata;

double  gaussparameter;   //gauss kernel parameter
double **K **KL; //gauss kernel matrix

KPCA kpca(3 2);
pdata = kpca.getdata(File2); //获取外部数据
x = pdata.data;
m = pdata.m;
n = pdata.n;

A = new double[m];
B = new double[m];
KPCA  testkpca(m n); //声明一个对象
gaussparameter = testkpca.getvar(x m n l 100 800);

cout << “gaussparameter  is “ << gaussparameter << endl;
K = testkpca.getkernelmatrix(x gaussparameter 1);
KL = testkpca.modifykernelmatrix(K); //修正核矩阵
c = new double*[m];
for (a = 0; a c[a] = new double[m];
v = new double*[m];
for (a = 0; a v[a] = new double[m];
for (a = 0; a for (j = 0; j c[a][j] = KL[a][j];
a = testkpca.jcb(c v eps 10000); //求取特征值和特征向量
cout << “计算特征值的迭代次数为“ << a << endl;
if (a != -1)
{
for (a = 0; a A[a] = c[a][a]; //获取特征值
}
else
cout << “不能求得特征值和特征向量“ << endl;
testk

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-05 16:01  169070003\
     目录           0  2017-06-05 16:01  169070003\169070003\
     文件     7733248  2017-06-05 16:01  169070003\169070003.sdf
     文件         973  2017-06-05 13:57  169070003\169070003.sln
     文件       17920  2017-06-05 16:01  169070003\169070003.v12.suo
     文件        4215  2017-06-05 14:02  169070003\169070003\169070003.vcxproj
     文件        1147  2017-06-05 14:02  169070003\169070003\169070003.vcxproj.filters
     目录           0  2017-06-05 18:22  169070003\169070003\Debug\
     文件         859  2017-06-05 14:48  169070003\169070003\Debug\169070003.Build.CppClean.log
     文件        1667  2017-06-05 14:48  169070003\169070003\Debug\169070003.log
     目录           0  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\
     文件         168  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\169070003.lastbuildstate
     文件         708  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\cl.command.1.tlog
     文件        7192  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\CL.read.1.tlog
     文件         484  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\CL.write.1.tlog
     文件        1154  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\link.command.1.tlog
     文件        2542  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\link.read.1.tlog
     文件         462  2017-06-05 14:48  169070003\169070003\Debug\169070003.tlog\link.write.1.tlog
     文件      441629  2017-06-05 14:17  169070003\169070003\eigen.txt
     文件           3  2017-06-05 14:17  169070003\169070003\gaussparameter.txt
     文件       11949  2017-06-05 14:03  169070003\169070003\kpca.h
     文件        7257  2017-06-05 14:17  169070003\169070003\kpcaproject.txt
     文件        3841  2017-06-05 16:01  169070003\169070003\main.cpp
     文件        6969  2017-06-05 14:58  169070003\169070003\pca.h
     文件       10266  2017-06-05 14:17  169070003\169070003\pcaproject.txt
     文件        9284  2017-06-04 21:26  169070003\169070003\test1.txt
     文件        9284  2017-06-04 20:16  169070003\169070003\test2.txt
     目录           0  2017-06-05 18:22  169070003\Debug\
     文件           3  2017-06-05 14:50  169070003\Debug\gaussparameter.txt
     文件       10266  2017-06-05 14:49  169070003\Debug\pcaproject.txt
     文件        9284  2017-06-04 21:26  169070003\Debug\test1.txt
............此处省略1个文件信息

评论

共有 条评论