资源简介
C++实现数据降维,包括PCA、KPCA两种方法,资源为Visual Studio2013完整工程代码。
![](http://www.nz998.com/pic/67211.jpg)
代码片段和文件信息
#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\li
文件 2542 2017-06-05 14:48 169070003\169070003\Debug\169070003.tlog\li
文件 462 2017-06-05 14:48 169070003\169070003\Debug\169070003.tlog\li
文件 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个文件信息
- 上一篇:纯HTML5拓扑图编辑器源代码
- 下一篇:C语言实现LZW编码
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- PCA9539驱动程序
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
评论
共有 条评论