Мне дали набор данных из 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;