not working yet
This commit is contained in:
parent
89fa4e34c7
commit
2b79fcc041
2 changed files with 31 additions and 1 deletions
|
@ -5,6 +5,7 @@ import org.lenskit.api.Result;
|
|||
import org.lenskit.api.ResultList;
|
||||
import org.lenskit.basic.AbstractItemBasedItemRecommender;
|
||||
import org.lenskit.results.Results;
|
||||
import org.lenskit.results.BasicResult;
|
||||
import org.lenskit.util.collections.LongUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -14,6 +15,8 @@ import javax.inject.Inject;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.PriorityQueue;
|
||||
import java.util.AbstractMap;
|
||||
|
||||
/**
|
||||
* An item-based item scorer that uses association rules.
|
||||
|
@ -66,7 +69,30 @@ public class AssociationItemBasedItemRecommender extends AbstractItemBasedItemRe
|
|||
private ResultList recommendItems(int n, long refItem, LongSet candidates) {
|
||||
List<Result> results = new ArrayList<>();
|
||||
|
||||
class Score implements Comparable<Score> {
|
||||
private double score;
|
||||
private long id;
|
||||
public Score(double score, long id) { this.score = score; this.id = id; }
|
||||
|
||||
@Override
|
||||
public int compareTo(Score other) {
|
||||
return new Double(-this.score).compareTo(new Double(-other.score));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO Compute the n highest-scoring items from candidates
|
||||
PriorityQueue<Score> scoring = new PriorityQueue();
|
||||
for (long cand : candidates) {
|
||||
double score = model.getItemAssociation(refItem, cand);
|
||||
scoring.offer(new Score(score, cand));
|
||||
}
|
||||
|
||||
for (int i = 0; i < n; ++i) {
|
||||
Score entry = scoring.poll();
|
||||
if (entry == null) break;
|
||||
|
||||
results.add(new BasicResult(entry.id, entry.score));
|
||||
}
|
||||
|
||||
return Results.newResultList(results);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import org.lenskit.util.io.ObjectStream;
|
|||
import javax.inject.Inject;
|
||||
import javax.inject.Provider;
|
||||
import java.util.List;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
* Build a model for basic association rules. This class computes the association for all pairs of items.
|
||||
|
@ -71,7 +72,10 @@ public class BasicAssociationModelProvider implements Provider<AssociationModel>
|
|||
LongSortedSet yUsers = yEntry.getValue();
|
||||
|
||||
// TODO Compute P(Y & X) / P(X) and store in itemScores
|
||||
itemScores.addTo(yId, 1.0 / xUsers.size());
|
||||
HashSet ySet = new HashSet(yUsers), xSet = new HashSet(xUsers);
|
||||
ySet.retainAll(xSet);
|
||||
double p = ySet.size() / xSet.size();
|
||||
itemScores.put(yId, p);
|
||||
}
|
||||
|
||||
// save the score map to the main map
|
||||
|
|
Loading…
Reference in a new issue