[
https://issues.apache.org/jira/browse/MAHOUT-358?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12854383#action_12854383
]
Hui Wen Han commented on MAHOUT-358:
------------------------------------
I have some finding :
I debug as following:
code:
public void map(LongWritable userID,
VectorWritable vectorWritable,
OutputCollector<LongWritable,RecommendedItemsWritable> output,
Reporter reporter) throws IOException {
if ((usersToRecommendFor != null) &&
!usersToRecommendFor.contains(userID.get())) {
return;
}
System.out.println("user_id:start-----------"+userID.get());
Vector userVector = vectorWritable.get();
Iterator<Vector.Element> userVectorIterator = userVector.iterateNonZero();
Vector recommendationVector = new
RandomAccessSparseVector(Integer.MAX_VALUE, 1000);
while (userVectorIterator.hasNext()) {
Vector.Element element = userVectorIterator.next();
int index = element.index();
Vector columnVector;
try {
columnVector = cooccurrenceColumnCache.get(new IntWritable(index));
} catch (TasteException te) {
if (te.getCause() instanceof IOException) {
throw (IOException) te.getCause();
} else {
throw new IOException(te.getCause());
}
}
if (columnVector != null) {
Iterator<Vector.Element> columnVectorIterator =
columnVector.iterateNonZero(); //debug here
while (columnVectorIterator.hasNext()) {
Vector.Element element1 = columnVectorIterator.next();
int index1 = element1.index();
double value1 = element1.get();
System.out.println("before index["+index1+"]:"+value1);
}
if (booleanData) { // because 'value' is 1.0
columnVector.addTo(recommendationVector);
} else {
double value = element.get();
System.out.println(value);
columnVector.times(value).addTo(recommendationVector);
}
}
}
Iterator<Vector.Element> recVectorIterator =
recommendationVector.iterateNonZero(); //debug here
while (recVectorIterator.hasNext()) {
Vector.Element element2 = recVectorIterator.next();
int index2 = element2.index();
double value2 = element2.get();
System.out.println("after inex["+index2+"]:"+value2);
}
Queue<RecommendedItem> topItems = new
PriorityQueue<RecommendedItem>(recommendationsPerUser + 1,
Collections.reverseOrder());
Iterator<Vector.Element> recommendationVectorIterator =
recommendationVector.iterateNonZero();
LongWritable itemID = new LongWritable();
while (recommendationVectorIterator.hasNext()) {
Vector.Element element = recommendationVectorIterator.next();
int index = element.index();
if (userVector.get(index) == 0.0) {
if (topItems.size() < recommendationsPerUser) {
indexItemIDMap.get(new IntWritable(index), itemID);
topItems.add(new GenericRecommendedItem(itemID.get(), (float)
element.get()));
} else if (element.get() > topItems.peek().getValue()) {
indexItemIDMap.get(new IntWritable(index), itemID);
topItems.add(new GenericRecommendedItem(itemID.get(), (float)
element.get()));
topItems.poll();
}
}
}
List<RecommendedItem> recommendations = new
ArrayList<RecommendedItem>(topItems.size());
recommendations.addAll(topItems);
Collections.sort(recommendations);
output.collect(userID, new RecommendedItemsWritable(recommendations));
for (RecommendedItem recommendation : recommendations)
{
System.out.println(recommendation.getItemID()+":"+recommendation.getValue());
//debug here
//user.set(String.valueOf(userID));
//recomScore.set(recommendation.getItemID() + FIELD_SEPERATOR +
recommendation.getValue());
//output.collect(user, recomScore);
}
System.out.println("user_id:end-----------"+userID.get());
}
add the out put and the log in attachment
> the pref value field of output of
> org.apache.mahout.cf.taste.hadoop.item.RecommenderJob has negative
> -----------------------------------------------------------------------------------------------------
>
> Key: MAHOUT-358
> URL: https://issues.apache.org/jira/browse/MAHOUT-358
> Project: Mahout
> Issue Type: Test
> Components: Collaborative Filtering
> Affects Versions: 0.4
> Reporter: Hui Wen Han
> Attachments: screenshot-1.jpg, screenshot-2.jpg
>
>
> In my test the input pref values all is positive.
> the output score value has negative value ,
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.