資源簡介
半非負矩陣分解算法(Semi-NMF)的源代碼,算法特別簡練。
代碼片段和文件信息
function?[Z?H?dnorm]?=?seminmf(?X?k?varargin?)
%?Matrix?sizes
%?X:?m?x?n
%?Z:?m?x?num_of_components
%?H:?num_of_components?x?num_of_components
%?Process?optional?arguments
pnames?=?{‘z0‘?‘h0‘?‘bUpdateH‘?‘maxiter‘?‘TolFun‘?‘bUpdateZ‘?‘verbose‘?‘save‘?‘fast‘};
h0?=?rand(k?size(X?2));?
dflts??=?{0?h0?1?500??1e-5?1?1?0?0};
[Z?H?bUpdateH?max_iter?tolfun?bUpdateZ?verbose?doSave?fastapprox]?=?...
????????internal.stats.parseArgs(pnamesdfltsvarargin{:});
if?fastapprox
????H?=?LPinitSemiNMF(X?k);?
end
key?=?generate_checksum(X?k);
if?ispc
????path?=?[‘\\fs-vol-hci2.doc.ic.ac.uk\hci2\projects\trigeorgis\nmf\seminmf_cache\‘?key?‘.mat‘];
else
????path?=?[‘/vol/hci2/projects/trigeorgis/NMF/seminmf_cache/‘?key?‘.mat‘];
end
if??doSave?&&?exist(path?‘file‘)?~=?0
????load(path);
????return;
end
if?length(Z)?==?1
????Z?=?X?*?pinv(H);
end
dnorm?=?norm(X?-?Z?*?H?‘fro‘);
for?i?=?1:max_iter
????
????if?bUpdateZ
????????try
????????????Z?=?X?*?pinv(H);
????????catch
????????????display(‘Error?inverting‘);
????????end
????end
????
????A?=?Z‘?*?X;
????Ap?=?(abs(A)+A)./2;
????An
- 上一篇:有關車輛路徑問題VRP代碼
- 下一篇:Deep Semi-NMF源代碼
評論
共有 條評論