Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to use the timestamp in mahout (taste)? (Using Java)
    primarykey
    data
    text
    <p>I need to add timestamp(movielens dataset) into the slope-one algorithm to make it more accurate. </p> <p>I thought I should modify the source code(<a href="http://svn.apache.org/repos/asf/mahout/tags/mahout-0.4/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java" rel="nofollow">MemoryDiffStorage.java</a> in mahout-core/...cf/taste/impl/recommender/slopeone), but I don't know how add the timestamp.</p> <p>Even though I found the definition <code>Long getPreferenceTime(long userID, long itemID)</code> in <a href="http://svn.apache.org/repos/asf/mahout/tags/mahout-0.4/core/src/main/java/org/apache/mahout/cf/taste/model/DataModel.java" rel="nofollow">DataModle.java</a>, I still have no idea about it.</p> <p>I should say I am new to Java and Mahout. So explain to me in detail please! Thanks~ :)</p> <p>Add modified code below:) Original code is in MemoryDiffStorage.java, I just plug some statements in. I wonder if I plug in wrong place,but I thought this is where it gets values.</p> <pre><code>private long processOneUser(long averageCount, long userID) throws TasteException { log.debug("Processing prefs for user {}", userID); // Save off prefs for the life of this loop iteration PreferenceArray userPreferences = dataModel.getPreferencesFromUser(userID); int length = userPreferences.length(); for (int i = 0; i &lt; length - 1; i++) { float prefAValue = userPreferences.getValue(i); long itemIDA = userPreferences.getItemID(i); long Timestamp = dataModel.getPreferenceTime(userID, itemIDA); long timestamp_max = 1046388675; long timestamp_min = 975042787; long t = (Timestamp - timestamp_min)/(timestamp_max - timestamp_min); prefAValue = prefAValue * t; FastByIDMap&lt;RunningAverage&gt; aMap = averageDiffs.get(itemIDA); if (aMap == null) { aMap = new FastByIDMap&lt;RunningAverage&gt;(); averageDiffs.put(itemIDA, aMap); } for (int j = i + 1; j &lt; length; j++) { // This is a performance-critical block long itemIDB = userPreferences.getItemID(j); RunningAverage average = aMap.get(itemIDB); if (average == null &amp;&amp; averageCount &lt; maxEntries) { average = buildRunningAverage(); aMap.put(itemIDB, average); averageCount++; } if (average != null) { average.addDatum(userPreferences.getValue(j) - prefAValue); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload