Я хочу спроецировать вектор измерения 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
. Какие ценности кажутся неправильными. В чем моя ошибка?