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 после подбора будет содержать ваши предсказанные значения, поэтому я считаю их нулем. Это метод прогнозирования пропущенных значений в данных.