Scikit-Learn Неотрицательная матричная факторизация (NMF) для разреженной матрицы

Я использую неотрицательную матричную факторизацию Scikit-learn (NMF) для выполнения NMF на разреженной матрице, где в нулевых записях отсутствуют данные. Мне было интересно, рассматривает ли реализация NMF Scikit-learn нулевые записи как 0 или пропущенные данные.

Спасибо!

1 ответ

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]]

Обратите внимание, что все ненулевые элементы являются единицами, поэтому идеальная реконструкция была возможна путем игнорирования других элементов, поэтому, учитывая этот вывод, это не так.

В вашей матрице данных отсутствующие значения могут быть 0, но вместо того, чтобы хранить группу нулей для очень разреженной матрицы, вы обычно вместо этого сохраняете матрицу COO, где каждая строка хранится в формате CSR.

Если вы используете NMF для рекомендаций, то вы бы факторизовали свою матрицу данных X, найдя W и H так, чтобы WH приблизительно равнялся X с условием, что все три матрицы неотрицательны. Когда вы восстанавливаете эту матрицу X, некоторые из пропущенных значений (где вы бы сохранили нули) могут стать ненулевыми, а некоторые могут оставаться нулевыми. На данный момент, в восстановленной матрице значения являются вашими прогнозами.

Итак, чтобы ответить на ваш вопрос, это 0 или отсутствуют данные в модели NMF? Модель NMF после подбора будет содержать ваши предсказанные значения, поэтому я считаю их нулем. Это метод прогнозирования пропущенных значений в данных.

Другие вопросы по тегам