如何在非負矩陣分解中選擇最佳潛在因子數量?
給定一個矩陣,非負矩陣分解(NMF) 找到兩個非負矩陣和(即所有元素) 將分解後的矩陣表示為:
例如通過要求非負和最小化重構誤差
是否有估算數量的常用做法在 NMF 中?例如,如何將交叉驗證用於該目的?
要在非負矩陣分解中選擇最佳潛在因子數,請使用交叉驗證。
正如您所寫,NMF 的目的是找到低維 $ \mathbf W $ 和 $ \mathbf H $ 所有非負元素最小化重建誤差 $ |\mathbf V-\mathbf W\mathbf H|^2 $ . 想像一下,我們遺漏了一個元素 $ \mathbf V $ ,例如 $ V_{ab} $ ,並對結果矩陣執行 NMF,其中缺少一個單元格。這意味著尋找 $ \mathbf W $ 和 $ \mathbf H $ 最小化所有非缺失單元的重建誤差:$$ \sum_ {ij\ne ab} (V_{ij}-[\mathbf W\mathbf H]_{ij})^2. $$
一旦完成,我們就可以預測遺漏的元素 $ V_{ab} $ 通過計算 $ [\mathbf W\mathbf H]{ab} $ 併計算預測誤差$$ e{ab}=(V_{ab}-[\mathbf W\mathbf H]{ab})^2. $$可以重複此過程而忽略所有元素 $ V{ab} $ 一次一個,總結所有的預測誤差 $ a $ 和 $ b $ . 這將產生一個整體 PRESS 值(預測的殘差平方和) $ E(k)=\sum_{ab}e_{ab} $ 這將取決於 $ k $ . 希望功能 $ E(k) $ 將有一個可以用作“最佳”的最小值 $ k $ .
請注意,這在計算上可能會很昂貴,因為 NMF 必須為每個遺漏的值重複,並且編程也可能很棘手(取決於執行具有缺失值的 NMF 的難易程度)。在 PCA 中,可以通過省略整行 $ \mathbf V $ (這大大加速了計算),請參閱我在如何對 PCA 執行交叉驗證以確定主成分的數量?,但這在這裡是不可能的。
當然,交叉驗證的所有常用原則都適用於此,因此可以一次省略多個單元格(而不是僅一個單元格),和/或僅對一些隨機單元格重複該過程,而不是循環遍歷所有單元格。這兩種方法都有助於加快這一進程。
**編輯(2019 年 3 月):**請參閱 @AlexWilliams 的這篇非常好的插圖文章:http : //alexhwilliams.info/itsneuronalblog/2018/02/26/crossval。亞歷克斯將https://github.com/kimjingu/nonnegfac-python用於具有缺失值的 NMF。