我有一个庞大的数据集(32000 * 2500),我需要进行培训。这对于我的分类器来说似乎太过分了,所以我决定对维数降低进行一些阅读,特别是对PCA进行阅读。
根据我的理解,PCA选择当前数据并在另一个(x,y)域/规模上重新创建它们。这些新坐标并不意味着什么,但数据被重新排列以给出一个轴最大变化。在这些新系数之后,我可以删除具有最小变化的cooeff
。
现在我正在尝试在MatLab中实现它,并且在提供的输出方面遇到了麻烦。 MatLab始终将行视为观察,将列视为变量。因此,我对pca
函数的输入将是我的大小(32000*2500)
的矩阵。这将在大小为2500*2500
的输出矩阵中返回PCA系数。
pca状态的帮助:
coeff的每列包含一个主体的系数 组件,列按组件的降序排列 方差。
在此输出中,哪个维度是我的数据的观察?我的意思是,如果我必须将其分配给分类器,coeff
的行是否代表我的数据观察结果,还是现在是coeff
的列?
如何删除变化最小的系数?
答案 0 :(得分:5)
(免责声明:自从我从matlab转为scipy以来已经很长时间了,但原则是相同的。)
如果您使用svd
function
[U,S,V] = svd(X)
然后,为了将X
的维度减少到k
,您需要乘以k
的前V
列。在matlab中,我猜是
X * V(:, 1: k);
请参阅Elements of Statistical Learning了解理论。