Как сохранить метки при вычислении PCA набора данных? - PullRequest
0 голосов
/ 05 ноября 2019

Мне дали набор данных из 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...