使用C ++ OpenCV 3.1.0 PCA。
实现给出nan值,我的PCA功能是
Mat PCA_doer(Mat& tdata, int feature_sel = 180)
{
Mat average;
PCA pca(tdata, average, CV_PCA_DATA_AS_ROW, feature_sel);
Mat newdata = Mat::zeros(tdata.rows, feature_sel,tdata.type());
pca.project(tdata,newdata);
return newdata;
}
数据(原始输入)是形式的(这是为了让您了解它以行主格式保存):
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
等等(大约9000个样本x 248个特征,减少到180个特征), 输入是一个标准的浮点矩阵,如果你可以想象-ve somthing和积极的东西之间的值那么它。矩阵太大了,不能在这里发布,所以上面应该给你一个想法
做PCA后输出为nan
输出格式为:
-nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan,
-nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan,
-nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan, -nan]
(你明白了)
我做错了什么?
编辑:
是的,我正在取消这一点,以便如果有人遇到同样的问题,正如Micka所说,我的意见是南。 我正在通过矢量归一化进行特征缩放,矢量归一化将一些值转换为纳米,然后输入到pca。因此结果。
问题#2虽然,PCA恶化了结果,为什么会发生这种情况?