资源简介
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\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++ 21点扑克牌游戏
- BP算法的C++实现
- 180912.cpp
- 校园卡信息管理系统
- c++实现图最短路径
- The Design And Evolution Of C++英文版
- vc 视频会议系统v2.8 源码
- LL(1)文法分析全过程(FIRST/FLLOW/S
- C++ 公司员工管理系统的设计源代码
- DNFC++辅助开源
- 标准C++STL源码剖析(侯捷著)(非扫
- Effective C++ 中文版2nd Edition
- VC++界面换肤 界面自绘 内置滚动条自
- celrityC/C++源码查看工具
- Microsoft Visual C++ 14Build Tools
- 毕业设计C++五子棋源代码及毕业论文
- 哲学家进餐问题的c++模拟实现
- 数据结构课程设计 停车场管理系统
- puma560的运动学正解和逆解的C++源码
- 简单的汽车租赁管理软件C++控制台程
- 定义和使用分数类fraction
- 剑灵辅助源码
- 数字图像处理扑克牌识别程序
- BC45,BC++ 4.5 开发工具
- C++ 数据结构书籍 - 清华大学 - 邓俊辉
- C++AMP.pdf
- C++ Primer 第五版 中文版+英文版 pdf
- Visual C++音频视频处理技术及工程实践
- VC++各版本合集2005-2017
- 数字图像处理与机器视觉——Visual
评论
共有 条评论