最近在做图像分割的实验,但在分类过程中有时会出现所使用的矩阵closely singular而很难accurately calculate. 于是想到了采用SVD decompositon进行降维(这种解决方法是否可行,还有待验证)。
--------------------------------------------------------
(1) 基本公式
从网上看了很多有关SVD分解的资料,对大小为m*n的矩阵进行SVD分解,使用matlab可以很容易进行分解:
X = U * Σ * V'
U是m×m阶酉矩阵;Σ是半正定m×n阶对角矩阵;而V',即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,i即为M的奇异值。
----------------------------------------------------------------------
(2) svd具体实现
在matlab中,实现svd分解的函数为:
[u s v]=svd(x);
---------------------------------
(3) 下面要考虑的问题就是如何降维了
假设最终只保留k维,则首先
s = s(1:k,1:k); u = u(:,1:k); v = v'(1:k,:);
然后,
x1 = u * s * v;
(n*d = n*k k*k k*d)
由此,可以用x1近似x。
使用 yi' = xi' * u * inv(s) 作为降维后的第i个特征数据,从而得到降维特征集合
y = [yi'].大小为n*k.
(这个理解是否正确还不清楚,需要通过实验进行验证!)