スコアがついたアイテム✖️ユーザーのデータをもとにレコメンドをしたい場合、特異値分解を用いることがあります。
特に非負かつ、スパースなデータの場合、NMFはその情報を強く残すため有用と言われています。
コード
import numpy as np from sklearn.decomposition import NMF X = np.array([[0, 1,4], [2, 4,0], [3, 3,1], [4, 1,4], [5, 0,4], [0, 1,3]]) #nmfをかけてW,Hを取得 nmf = NMF(n_components=2, init='random', random_state=0) W = nmf.fit_transform(X) H = nmf.components_ #値を取得するときはdot np.dot(W,H)
レコメンドで使う場合
縦軸をユーザー単位、横軸をアイテム単位と考えた場合、Wがアイテム x components,Hがcomponents x ユーザー。
これをnp.dotで計算することで好む度合いがだせる。ただし、これは未知のデータへの適用を考えていない。