mahout-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hui Wen Han (JIRA)" <j...@apache.org>
Subject [jira] Commented: (MAHOUT-358) the pref value field of output of org.apache.mahout.cf.taste.hadoop.item.RecommenderJob has negative
Date Wed, 07 Apr 2010 08:41:33 GMT

    [ 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.


Mime
View raw message