【Matlab】KPCA的核矩阵的大小问题,附代码
假设现有7000个样本,每个样本256维,那么输入矩阵是7000*256的,对其做核变换的话,应该是得到7000*7000的核矩阵吧,这计算量大到令人无语,我电脑内存不足了。。。。
附代码:for i=1:7000
for j=i:70000
kernel_matrix(i,j)=exp(-norm(X(:,i)-X(:,j))^2/dev);
end
end
unit=ones(7000,7000)/7000;
final_kernel=kernel_matrix - unit * kernel_matrix - kernel_matrix * unit + unit * kernel_matrix * unit;
请问大家,做这个高斯核分析的时候,是得到7000*7000的矩阵吧,这个运算到内存不足的问题怎么解决呢?可不可以不用全部样本,只取一小部分。。。
另外,对final_kernel是用eigs找最大特征值呢 还是用svd做非奇异分解比较好呢? 因为我做PCA一般都是eigs, 不知道用这两个有什么具体的区别? 没办法,做主成分分析最计算机硬件要求较高!
解决的办法是将操作系统换为64位的,将内存加到4G,将虚拟内存设大点! LZ前后矩阵大小交代有点乱, 到底多大? 7000*256? 7000*7000? 7000*70000?
我的笔电系统为32位元内存已加到4G, 刚试下aa=rand(7000,70000); aa=rand(7000,7000); 前者出现Maximum variable size allowed by the program is exceeded.后者不会
还有LZ的两层loop内的矩阵kernel_matrix是否新定义, 若是, 效率不好! 最好在loop前先使用zeros定义矩阵大小
页:
[1]