我得到了7291个样本的数据集,每个样本包含一个标签/类和256个“功能”。我受命在此数据集上执行PCA,然后也在测试集上对其进行测试。
我遵循了在网上找到的步骤,但是与我发现的示例相比,我遇到的问题是,如果我要计算协方差矩阵,那么我将丢失哪些标签属于哪个样本,并且用不了多少后续步骤。
我不确定我是否误解了此步骤,或者我做错了什么,但是下面是我当前的代码。
预先感谢
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main (int argc,char *argv[]) {
fstream file;
file.open(argv[1]);
string line;
vector<vector<double>> matrix;
vector<double> vect;
vector<double> temp;
int j=0;
while (getline(file,line,'\n')) {
istringstream templine(line);
string data;
j=0;
while (getline( templine,data,',')) {
vect.push_back(atof(data.c_str()));
j++;
if (j==257) {
temp=vect;
matrix.push_back(temp);
vect.clear();
temp.clear();
}
}
}
vector<double> mean;
int i;
double meancalc=0.0;
for (i=0; i<7291; i++) {
for (j=1; j<257; j++) {
meancalc=matrix[i][j] + meancalc;
}
meancalc=meancalc/256;
mean.push_back(meancalc);
meancalc=0;
}
vector<vector<double>> newMatrix;
newMatrix=matrix;
for (i=0; i<7291; i++) {
for (j=1; j<257; j++) {
newMatrix[i][j]=newMatrix[i][j]-mean[i];
}
}
vector<vector<double>> transposeMatrix;
for (j=0; j<257; j++) {
for (i=0; i<7291; i++) {
temp.push_back(newMatrix[i][j]);
}
transposeMatrix.push_back(temp);
temp.clear();
}
vector<vector<double>> covariance;