好吧,当你说 SVD 时,大概你说的是截断的 SVD(你只保留个最大的奇异值)。有两种不同的方法可以查看矩阵的截断 SVD。一是标准定义:k
首先你做 SVD:,其中和是旋转矩阵,而具有沿对角线的奇异值。然后选择前个奇异值,将其余奇异值归零,并删除不相关的行和列,以对原始值Xn×m=Un×nΣn×mVTm×mUVΣkkX≈X~=U~n×kΣ~k×kV~Tk×m
这一切都很好而且很花哨(并且很容易在 R 或 matlab 中实现),但是在谈论缺少值的矩阵时它没有意义。然而,截断 SVD 有一个有趣的特性——它是原始 k 秩的最佳!那是:kk
X~=argminB:rank(B)=k∑i,j(Xij−Bij)2
这个属性似乎很容易推广到缺失值的情况。基本上,您正在寻找一个秩矩阵,以最小化原始矩阵的已知条目中的元素均方误差。也就是说,当您训练系统时,您会忽略所有缺失值。(有关如何实际找到秩近似值的提示,这里有一些地方可以查看)。kk
然后,一旦你想出了一个与原始值适当“接近”秩近似值,你就可以用它来填充缺失的值。也就是说,如果缺失,则填写。多田!你现在完成了。kXijX~ij