Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions librec/src/main/java/librec/data/DataDAO.java
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,10 @@ public void writeData(String toPath, String sep) throws Exception {

List<String> lines = new ArrayList<>(1500);
for (MatrixEntry me : rateMatrix) {

if (me.get() <= 0) // enable sparse output
continue;

String line = Strings.toString(
new Object[] { me.row() + 1, me.column() + 1,
(float) me.get() }, sep);
Expand Down Expand Up @@ -543,6 +547,13 @@ public SparseMatrix getRateMatrix() {
return rateMatrix;
}

/**
* @param ratingMatrix
*/
public void setRateMatrix(SparseMatrix ratingMatrix) {
this.rateMatrix = ratingMatrix;
}

/**
* @return whether "items" are users, useful for social reltions
*/
Expand Down
26 changes: 24 additions & 2 deletions librec/src/main/java/librec/intf/Recommender.java
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,12 @@ private Map<Measure, Double> evalRatings() {

double sum_maes = 0, sum_mses = 0, sum_asyms = 0;
int numCount = 0;

//cf.getString("printTestPredictions");

SparseMatrix predMatrix = testMatrix.clone();


for (MatrixEntry me : testMatrix) {
double rate = me.get();
if (rate <= 0)
Expand All @@ -443,9 +449,10 @@ private Map<Measure, Double> evalRatings() {
double pred = predict(u, j, true);
if (Double.isNaN(pred))
continue;


predMatrix.set(u, j, pred);
double err = rate - pred;

sum_maes += Math.abs(err);
sum_mses += err * err;
sum_asyms += Measures.ASYMMLoss(rate, pred, minRate, maxRate);
Expand All @@ -463,6 +470,21 @@ private Map<Measure, Double> evalRatings() {
measures.put(Measure.RMSE, rmse);
measures.put(Measure.ASYMM, asymm);

if (cf.isOn("has.predictions.rating.output")) {
DataDAO testDao = new DataDAO(cf.getPath("dataset.testing"), rateDao.getUserIds(), rateDao.getItemIds());
testDao.setRateMatrix(predMatrix);
try {
String foldString = "";
if (this.fold>-1) {
foldString = "_"+Integer.toString(this.fold);
}
testDao.writeData(cf.getPath("predictions.rating.output") + foldString);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return measures;
}

Expand Down
15 changes: 10 additions & 5 deletions librec/src/main/resources/librec.conf
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
################################################### General Settings #############################################
# dataset: item ratings and user social inforamtion
dataset.training.wins=D:\\path\\to\\dataset\\ratings.txt
dataset.training.wins=D:\\temp\\ratings\\filmtrust-ratings.txt
dataset.training.lins=/home/path/to/datasets/ratings.txt

dataset.social.wins=-1
dataset.social.lins=-1

dataset.testing.wins=-1
dataset.testing.lins=-1
dataset.testing.wins=D:\\temp\\ratings\\filmtrust-test.txt
dataset.testing.lins=/home/path/to/datasets/ratings.txt

# Item Recommendation: threshold to convert rating values to binary ones (during data loading);
# Note that not all item recommendation models require binary ratings; -1: disable conversion
Expand All @@ -27,7 +27,7 @@ mail.smtp.password=xxxx
mail.to=xxx@email.address

# validation priority: 1. cross-validation; 2. (training) ratio; 3. given n; 4: given ratio
is.cross.validation=on
is.cross.validation=off
is.parallel.folds=on
num.kfold=5
val.ratio=0.2
Expand All @@ -43,10 +43,15 @@ is.diverse.used=off
num.reclist.len=-1
num.ignor.items=-1


# prediction output
has.predictions.rating.output = on
predictions.rating.output.wins =D:\\temp\\ratings\\predictions.txt

# baseline & exts: GlobalAvg, UserAvg, ItemAvg, Random, Constant, MostPop; NMF, SlopeOne, Hybrid, PD, AR, PRankD;
# ranking: CLiMF, WRMF, BPR, RankALS, RankSGD;
# rating: UserKNN, ItemKNN, RegSVD, BiasedMF, PMF, BPMF, SVD++, SocialMF, RSTE, TrustMF, SoRec, SoReg;
recommender=SVD++
recommender=UserKNN

################################################### Model-based Methods ##########################################
# general parameters for matrix factorization
Expand Down