计算数据集的PCA时如何保留标签?

我得到了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;
chenyaleiBB 回答:计算数据集的PCA时如何保留标签?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3160428.html

大家都在问