Code for A log-linear model with latent features for dyadic prediction, ICDM '10
A stochastic gradient implementation of the LFL model may be found here. The code assumes that there are structures Tr and Te for the train and test set, each comprising three vectors u, m, and r for the "user", "movie", and "rating" respectively. (As noted in the paper, these may be replaced with more general dyadic entities.) The code handles both nominal and ordinal "ratings".Example usage
The following constructs a sample rating matrix for 5 users and 10 movies, where the possible ratings are { 1, ..., 5 }, with 0 denoting a missing value, which is then split into a train and test set with proportion 80-20%.
U = 5; M = 10; R = 5; X = floor((R + 1) * rand(U, M));
Data = [ ]; [Data.u, Data.m, Data.r] = find(X);
I = randperm(length(Data.u)); nTe = ceil(0.2*length(I));
Te = [ ]; Te.u = Data.u(I(1:nTe)); Te.m = Data.m(I(1:nTe)); Te.r = Data.r(I(1:nTe));
Tr = [ ]; Tr.u = Data.u(I(1+nTe:end)); Tr.m = Data.m(I(1+nTe:end)); Tr.r = Data.r(I(1+nTe:end));
With this, we could run the SGD optimiser as follows:
k = 10; % # of latent features
eta0 = 0.01; % learning rate
lambda = 1e-6; % regularization parameter
epochs = 10; % # of sweeps over training set
loss = 'mse'; % loss function on training set
[w, trainErrors, testErrors] = lflSGDOptimizer(Tr, Te, k, eta0, lambda, epochs, loss);