Ошибка проецирования вектора высокой размерности на нижнюю - PullRequest
0 голосов
/ 20 января 2020

Я хочу спроецировать вектор измерения 7 на вектор измерения 3. Я использую метод PCA:

double c[3][7] = { { 20614.520325,  14429.227642,  14319.951220,  14700.390244,  17404.300813,  13451.105691,  12444.788618 }, { 19054.388889,  13578.222222,  14286.500000,  17277.305556,  17107.555556, 23428.361111,  15735.083333 }, { 14431.971429,  5051.971429,  7382.857143,  15523.428571,  4925.828571,  5575.457143,  5175.885714 } };

cv::Mat pcaset(3,7, CV_32FC1);

for (int i=0;i<pcaset.rows;i++)
{
 float* ptr = pcaset.ptr<float>(i);
 for (int j=0;j<pcaset.cols;j++)
 {
   *ptr++ = c[i][j];
 }     
}

cv::PCA pca(pcaset, // pass the data
    cv::Mat(), // we do not have a pre-computed mean vector,
           // so let the PCA engine to compute it
    cv::PCA::DATA_AS_ROW, // indicate that the vectors
                        // are stored as matrix rows
                        // (use PCA::DATA_AS_COL if the vectors are
                        // the matrix columns)
    3 // specify, how many principal components to retain
    );

cv::Mat p1 = pca.project(pcaset.row(1));

Я применил PCA к матрице данных с 3 наблюдениями и 7 переменными (3х7). Затем я спроецировал первое наблюдение с его 7 переменными в нижнее пространство (3 измерения).

Однако, когда я получил вектор 1x3 p1, я получил следующий результат: -261082343354004313930203136.000000 0.000000 0.000000. Какие ценности кажутся неправильными. В чем моя ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...