資源簡介
C++實現數據降維,包括PCA、KPCA兩種方法,資源為Visual Studio2013完整工程代碼。

代碼片段和文件信息
#include“pca.h“????
#include“kpca.h“
void?main()
{
//pca
cout?<“-----------------------pca------------------------“?< 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?<“數據的行數為“?< A?=?new?double[n];
B?=?new?double[n];
v?=?new?double*[n];
for?(i?=?0;?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? A[k]?=?c[k][k];?//獲取特征值????
testpca.zhengjiao(v);???//正交化特征向量????
testpca.selectionsort(A?v);?//特征值和特征向量排序????????
t?=?testpca.selectcharactor(A?getratio?B);?//提取特征值????
cout?<“PCA降維后的維數:“?< cout?<“排序后提取的特征值及對應的特征向量“?< for?(i?=?0;?i?<=?t?-?1;?i++)
printf(“%13.7e??“?A[i]);
printf(“\n\n“);
for?(i?=?0;?i? {
for?(j?=?0;?j? printf(“%13.7e??“?v[i][j]);
printf(“\n“);
}
cout?<“特征值的累計貢獻率是“?< for?(i?=?0;?i? cout?< cout?< cout?<“當提取效率是“?< if?(t?>=?1?&&?t?<=?n)
Project?=?testpca.getProject(t?x?v);??//計算投影???????
else
cout?<“error“?< testpca.saveProject(projectfile?Project?t);?//保存數據到文件??
//kpca
cout?< 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?“?< 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?<“計算特征值的迭代次數為“?< if?(a?!=?-1)
{
for?(a?=?0;?a A[a]?=?c[a][a];?//獲取特征值
}
else
cout?<“不能求得特征值和特征向量“?< 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編碼
評論
共有 條評論