def __completef(fitinfo, method=None): """Completes missing values in f using matrix-completion library (Duan, 2020).""" mof = fitinfo['mof'] f = fitinfo['f'] if method is None or method == 'svt': # Singular value thresholding fhat = svt_solve(f, ~mof) elif method == 'pmf': # Probablistic matrix factorization fhat = pmf_solve(f, ~mof, k=10, mu=1e-2) elif method == 'bmf': # Biased alternating least squares fhat = biased_mf_solve(f, ~mof, k=10, mu=1e-2) else: raise ValueError( 'Unsupported completion method. {:s}'.format(methodoptionstr)) if not np.isfinite(fhat).all(): raise ValueError('Completion method {:s} failed. {:s} {:s}'.format( method, methodoptionstr, suggeststr)) fitinfo['f'] = fhat fitinfo['completionmethod'] = method return
V = np.random.randn(items, rank) # R = np.random.randn(users, items) + np.dot(U, V.T) # with noise R = np.dot(U, V.T) # without noise mask = np.random.binomial(1, percent_shown[i], size=users * items).reshape( (users, items)) rHat_svt = svt_solve(R, mask) res_observed[i, 0] = calc_observed_rmse(R, rHat_svt, mask) res_unobserved[i, 0] = calc_unobserved_rmse(R, rHat_svt, mask) rHat_pmf = pmf_solve(R, mask, 10, 1e-2) res_observed[i, 1] = calc_observed_rmse(R, rHat_pmf, mask) res_unobserved[i, 1] = calc_unobserved_rmse(R, rHat_pmf, mask) rHat_bias = biased_mf_solve(R, mask, 10, 1e-2) res_observed[i, 2] = calc_observed_rmse(R, rHat_bias, mask) res_unobserved[i, 2] = calc_unobserved_rmse(R, rHat_bias, mask) plt.plot(percent_shown, res_observed[:, 0], 'r--', label='SVT') plt.plot(percent_shown, res_observed[:, 1], 'g--', label='PMF') plt.plot(percent_shown, res_observed[:, 2], 'b--', label='BIAS') plt.title('Observed RMSE') plt.legend(loc='upper left') plt.show() plt.plot(percent_shown, res_unobserved[:, 0], 'r--', label='SVT') plt.plot(percent_shown, res_unobserved[:, 1], 'g--', label='PMF') plt.plot(percent_shown, res_unobserved[:, 2], 'b--', label='BIAS') plt.title('UnObserved RMSE') plt.legend(loc='upper left')
import numpy as np from matrix_completion import svt_solve, pmf_solve, biased_mf_solve import matplotlib.pyplot as plt ratings_100k = np.load('rating-100k.npy') plt.imshow(ratings_100k, cmap='jet', interpolation='nearest') plt.show() mask = (ratings_100k > 0).astype(np.int) rHat_svt = svt_solve(ratings_100k, mask) plt.imshow(rHat_svt, cmap='jet', interpolation='nearest') plt.show() rHat_pmf = pmf_solve(ratings_100k, mask, 10, 1e-2) plt.imshow(rHat_pmf, cmap='jet', interpolation='nearest') plt.show() rHat_bias = biased_mf_solve(ratings_100k, mask, 10, 1e-2) plt.imshow(rHat_bias, cmap='jet', interpolation='nearest') plt.show()