Прогнозирование пропущенных значений в Рекомендательной Системе

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

a=[[ 1.          0.45643546  0.          0.1         0.10327956  0.0225877 ]
 [ 0.15214515  1.          0.04811252  0.07607258  0.23570226  0.38271325]
 [ 0.          0.14433757  1.          0.07905694  0.          0.42857143]
 [ 0.1         0.22821773  0.07905694  1.          0.          0.27105237]
 [ 0.06885304  0.47140452  0.          0.          1.          0.13608276]
 [ 0.00903508  0.4592559   0.17142857  0.10842095  0.08164966  1.        ]]

import nimfa
model = nimfa.Lsnmf(a, max_iter=100000,rank =4)
#fit the model
fit = model()
#get U and V matrices from fit
U = fit.basis()
V = fit.coef()
print numpy.dot(U,V)

Но данный ответ почти такой же, как и, и я не могу предсказать нулевые значения. Пожалуйста, скажите мне, какой метод использовать или какие-либо другие возможные реализации и любые возможные ресурсы.

Я хочу использовать эту функцию, чтобы минимизировать ошибку при прогнозировании значений.

ошибка = || а - УФ ||_F + c*||U||_F + c*||V||_F

где _F обозначает норму Фобениуса

1 ответ

Я раньше не использовал nimfa, поэтому не могу точно ответить, как это сделать, но с помощью sklearn вы можете выполнить препроцессор для преобразования отсутствующих значений, например так:

In [28]: import numpy as np

In [29]: from sklearn.preprocessing import Imputer

# prepare a numpy array 
In [30]: a = np.array(a)

In [31]: a
Out[31]: 
array([[ 1.        ,  0.45643546,  0.        ,  0.1       ,  0.10327956,
         0.0225877 ],
       [ 0.15214515,  1.        ,  0.04811252,  0.07607258,  0.23570226,
         0.38271325],
       [ 0.        ,  0.14433757,  1.        ,  0.07905694,  0.        ,
         0.42857143],
       [ 0.1       ,  0.22821773,  0.07905694,  1.        ,  0.        ,
         0.27105237],
       [ 0.06885304,  0.47140452,  0.        ,  0.        ,  1.        ,
         0.13608276],
       [ 0.00903508,  0.4592559 ,  0.17142857,  0.10842095,  0.08164966,
         1.        ]])

In [32]: pre = Imputer(missing_values=0, strategy='mean')

# transform missing_values as "0" using mean strategy
In [33]: pre.fit_transform(a)
Out[33]: 
array([[ 1.        ,  0.45643546,  0.32464951,  0.1       ,  0.10327956,
         0.0225877 ],
       [ 0.15214515,  1.        ,  0.04811252,  0.07607258,  0.23570226,
         0.38271325],
       [ 0.26600665,  0.14433757,  1.        ,  0.07905694,  0.35515787,
         0.42857143],
       [ 0.1       ,  0.22821773,  0.07905694,  1.        ,  0.35515787,
         0.27105237],
       [ 0.06885304,  0.47140452,  0.32464951,  0.27271009,  1.        ,
         0.13608276],
       [ 0.00903508,  0.4592559 ,  0.17142857,  0.10842095,  0.08164966,
         1.        ]])

Вы можете прочитать больше здесь.

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