Source code for zero.lasso0

import numpy as np
from scipy.sparse import coo_matrix
from sklearn.linear_model import Lasso


[docs]class MangakiLASSO: def __init__(self, nb_users, nb_works, T): self.nb_users = nb_users self.nb_works = nb_works self.T = T
[docs] def fit(self, X, y): user_ids = X[:, 0] work_ids = X[:, 1] self.ratings = coo_matrix((y, (user_ids, work_ids)), shape=(self.nb_users, self.nb_works)) self.ratings_by_user = self.ratings.tocsr() self.lasso = {} for user_id in range(self.nb_users): rated_work_ids = self.ratings_by_user[user_id].indices user_ratings = self.ratings_by_user[user_id].data if len(rated_work_ids): self.lasso[user_id] = Lasso(alpha=0.01, fit_intercept=True) self.lasso[user_id].fit(self.T[rated_work_ids], user_ratings)
[docs] def predict(self, X): y = [] for user_id, work_id in X: if user_id in self.lasso: y.append(self.lasso[user_id] .predict(self.T[work_id].reshape(1, -1))) return np.array(y)