如何在非負矩陣分解中選擇最佳潛在因子數量?
給定一個矩陣,非負矩陣分解(NMF) 找到兩個非負矩陣和(即所有元素) 將分解後的矩陣表示為:
例如通過要求非負和最小化重構誤差
是否有估算數量的常用做法在 NMF 中?例如,如何將交叉驗證用於該目的?
要在非負矩陣分解中選擇最佳潛在因子數,請使用交叉驗證。
正如您所寫,NMF 的目的是找到低維 W 和 H 所有非負元素最小化重建誤差 |V−WH|2 . 想像一下,我們遺漏了一個元素 V ,例如 Vab ,並對結果矩陣執行 NMF,其中缺少一個單元格。這意味著尋找 W 和 H 最小化所有非缺失單元的重建誤差:∑ij≠ab(Vij−[WH]ij)2.
一旦完成,我們就可以預測遺漏的元素 Vab 通過計算 $ [\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 中,可以通過省略整行 V (這大大加速了計算),請參閱我在如何對 PCA 執行交叉驗證以確定主成分的數量?,但這在這裡是不可能的。
當然,交叉驗證的所有常用原則都適用於此,因此可以一次省略多個單元格(而不是僅一個單元格),和/或僅對一些隨機單元格重複該過程,而不是循環遍歷所有單元格。這兩種方法都有助於加快這一進程。
**編輯(2019 年 3 月):**請參閱 @AlexWilliams 的這篇非常好的插圖文章:http : //alexhwilliams.info/itsneuronalblog/2018/02/26/crossval。亞歷克斯將https://github.com/kimjingu/nonnegfac-python用於具有缺失值的 NMF。