簡體   English   中英

稀疏矩陣的 Scikit-learn 非負矩陣分解 (NMF)

[英]Scikit-learn non-negative matrix factorization (NMF) for sparse matrix

我正在使用 Scikit-learn 的非負矩陣分解 (NMF) 對零條目缺少數據的稀疏矩陣執行 NMF。 我想知道 Scikit-learn 的 NMF 實現是否將零條目視為 0 或缺失數據。

謝謝!

在您的數據矩陣中,缺失值可以是 0,但不是為非常稀疏的矩陣存儲一堆零,您通常會存儲一個 COO 矩陣,其中每一行都以 CSR 格式存儲。

如果您使用 NMF 進行推薦,那么您將通過找到 W 和 H 來分解數據矩陣 X,使得 WH 近似等於 X,條件是所有三個矩陣都為非負。 當您重建此矩陣 X 時,某些缺失值(您將在其中存儲零的位置)可能會變為非零,而有些可能會保持為零。 此時,在重建的矩陣中,值是您的預測。

因此,要回答您的問題,它們是 NMF 模型中的 0 還是缺失數據? 擬合后的 NMF 模型將包含您的預測值,因此我將它們視為零。 這是一種預測數據中缺失值的方法。

NMF 將它們視為零。 我想通了使用此代碼:

from scipy import sparse
from sklearn.decomposition import NMF
import numpy as np

mat = np.array([[1,1,1],
                [1,1,0],
                [1,0,0]], 'float32')

ix = np.nonzero(mat)
sparse_mat = sparse.csc_matrix((mat[ix], ix))
print('training matrix:')
print(sparse_mat.toarray())

model = NMF(n_components=1).fit(sparse_mat)
reconstructed = model.inverse_transform(model.transform(sparse_mat))
print('reconstructed:')
print(reconstructed)

結果:

training matrix:
[[1. 1. 1.]
 [1. 1. 0.]
 [1. 0. 0.]]
reconstructed:
[[1.22 0.98 0.54]
 [0.98 0.78 0.44]
 [0.54 0.44 0.24]]

請注意,所有非零元素都是 1,因此可以通過忽略其他元素來完美重建,因此考慮到此輸出,情況並非如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM