org.apache.mahout.cf.taste.impl.recommender.slopeone
Class MemoryDiffStorage

java.lang.Object
  extended by org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage
All Implemented Interfaces:
Refreshable, DiffStorage

public final class MemoryDiffStorage
extends Object
implements DiffStorage

An implementation of DiffStorage that merely stores item-item diffs in memory. It is fast, but can consume a great deal of memory.


Constructor Summary
MemoryDiffStorage(DataModel dataModel, Weighting stdDevWeighted, long maxEntries)
           See SlopeOneRecommender for the meaning of stdDevWeighted.
 
Method Summary
 void addItemPref(long userID, long itemIDA, float prefValue)
          Updates internal data structures to reflect a new preference value for an item.
 RunningAverage getAverageItemPref(long itemID)
           
 RunningAverage getDiff(long itemID1, long itemID2)
           
 RunningAverage[] getDiffs(long userID, long itemID, PreferenceArray prefs)
           
 FastIDSet getRecommendableItemIDs(long userID)
           
 void refresh(Collection<Refreshable> alreadyRefreshed)
           Triggers "refresh" -- whatever that means -- of the implementation.
 void removeItemPref(long userID, long itemIDA, float prefValue)
          Updates internal data structures to reflect an update in a preference value for an item.
 String toString()
           
 void updateItemPref(long itemID, float prefDelta)
          Updates internal data structures to reflect an update in a preference value for an item.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

MemoryDiffStorage

public MemoryDiffStorage(DataModel dataModel,
                         Weighting stdDevWeighted,
                         long maxEntries)
                  throws TasteException

See SlopeOneRecommender for the meaning of stdDevWeighted. maxEntries controls the maximum number of item-item average preference differences that will be tracked internally. After the limit is reached, if a new item-item pair is observed in the data it will be ignored. This is recommended for large datasets. The first maxEntries item-item pairs observed in the data are tracked. Assuming that item ratings are reasonably distributed among users, this should only ignore item-item pairs that are very infrequently co-rated by a user. The intuition is that data on these infrequently co-rated item-item pairs is less reliable and should be the first that is ignored. This parameter can be used to limit the memory requirements of SlopeOneRecommender, which otherwise grow as the square of the number of items that exist in the DataModel. Memory requirements can reach gigabytes with only about 10000 items, so this may be necessary on larger datasets.

Parameters:
stdDevWeighted - see SlopeOneRecommender
maxEntries - maximum number of item-item average preference differences to track internally
Throws:
IllegalArgumentException - if maxEntries is not positive or dataModel is null
TasteException
Method Detail

getDiff

public RunningAverage getDiff(long itemID1,
                              long itemID2)
Specified by:
getDiff in interface DiffStorage
Returns:
RunningAverage encapsulating the average difference in preferences between items corresponding to itemID1 and itemID2, in that direction; that is, it's the average of item 2's preferences minus item 1's preferences

getDiffs

public RunningAverage[] getDiffs(long userID,
                                 long itemID,
                                 PreferenceArray prefs)
Specified by:
getDiffs in interface DiffStorage
Parameters:
userID - user ID to get diffs for
itemID - itemID to assess
prefs - user's preferendces
Returns:
RunningAverages for that user's item-item diffs

getAverageItemPref

public RunningAverage getAverageItemPref(long itemID)
Specified by:
getAverageItemPref in interface DiffStorage
Returns:
RunningAverage encapsulating the average preference for the given item

addItemPref

public void addItemPref(long userID,
                        long itemIDA,
                        float prefValue)
                 throws TasteException
Description copied from interface: DiffStorage

Updates internal data structures to reflect a new preference value for an item.

Specified by:
addItemPref in interface DiffStorage
Parameters:
userID - user whose pref is being added
itemIDA - item to add preference value for
prefValue - new preference value
Throws:
TasteException

updateItemPref

public void updateItemPref(long itemID,
                           float prefDelta)
Description copied from interface: DiffStorage

Updates internal data structures to reflect an update in a preference value for an item.

Specified by:
updateItemPref in interface DiffStorage
Parameters:
itemID - item to update preference value for
prefDelta - amount by which preference value changed

removeItemPref

public void removeItemPref(long userID,
                           long itemIDA,
                           float prefValue)
                    throws TasteException
Description copied from interface: DiffStorage

Updates internal data structures to reflect an update in a preference value for an item.

Specified by:
removeItemPref in interface DiffStorage
Parameters:
userID - user whose pref is being removed
itemIDA - item to update preference value for
prefValue - old preference value
Throws:
TasteException

getRecommendableItemIDs

public FastIDSet getRecommendableItemIDs(long userID)
                                  throws TasteException
Specified by:
getRecommendableItemIDs in interface DiffStorage
Returns:
item IDs that may possibly be recommended to the given user, which may not be all items since the item-item diff matrix may be sparse
Throws:
TasteException

refresh

public void refresh(Collection<Refreshable> alreadyRefreshed)
Description copied from interface: Refreshable

Triggers "refresh" -- whatever that means -- of the implementation. The general contract is that any should always leave itself in a consistent, operational state, and that the refresh atomically updates internal state from old to new.

Specified by:
refresh in interface Refreshable
Parameters:
alreadyRefreshed - s that are known to have already been refreshed as a result of an initial call to a method on some object. This ensure that objects in a refresh dependency graph aren't refreshed twice needlessly.

toString

public String toString()
Overrides:
toString in class Object


Copyright © 2008-2012 The Apache Software Foundation. All Rights Reserved.