Hi again!

I was able to "hijack" the GenericUserBasedRecommendation class in my code to 
produce recommendations based on the count rather than the weighted average.  
In order to do this I had to copy both the AbstractUserRecommender and the GUBR 
classes into my own code and then change the implementation of the Evaluator in 
GUBR.  I am reasonably new to Java, so there may have been a better way, but 
this seemed to be the quickest solution.  One reason I thought this was 
necessary is because the constructors in AbstractRecommender are protected, so 
it makes it difficult(impossible?) to extend this class outside of the 
impl.recommender package within Mahout.  I did not want to change the Mahout 
code and recompile.  

Now, unless I am wrong, I can see two ways of improving(?) the implementation 
of the Generic*BasedRecommenders.  One would be the addition of a constructor 
which allowed the passing of an Evaluator.  The other way would be to make the 
constructors/methods public in the AbstractRecommender.  Then, I can extend 
this class in my own code.  I understand that Mahout was built to be somewhat 
standalone.  However there are cases when it would be nice to personalize the 
evaluation outside of Mahout.  So, maybe the ability to pass an implementation 
of Evaluator to the constructor is a better option.  

On a slightly different yet related note, I think a better metric than the 
count (for user based)  would be the sum of similarities between users who have 
rated the item.  Again, I think the weighted average of 
sum(rating*similarity)/sum(similarity) shows the problem noted in my previous 
posts. 

Again, any thoughts are appreciated :)

Thank you for this beautiful framework!  I have been really enjoying all the 
discussion and learning the intricacies of recommendation engines (and ML in 
general).
Chris

On Feb 18, 2011, at 5:29 PM, Chris Schilling wrote:

> So, I've been thinking about this a bit more.
> 
> Take an example:  I haverated a very small number of items.  I am able to 
> extract a neighborhood of similar users.  Now let's say there is a single 
> user who has rated the same items with the same rating, but this user is the 
> only rater in my neighborhood who has rated an obscure item very highly.  In 
> the case using a weighted average to predict my 
> recommendations, this obscure item would rise to the top of the list.   In 
> this case, it seems like items rated the most would be better 
> recommendations.  
> 
> I was able to hijack the GenericUserRecommender and change the calculation of 
> the preference to return the count rather than the weighted average.  In my 
> case, this seems to return more intuitive results.  
> 
> Again this is related to the sparseness of the data, but I could see this 
> type of thing occurring often. Any thoughts?
> 
> 
> On Feb 18, 2011, at 3:43 PM, Chris Schilling wrote:
> 
>> Hello again,
>> 
>> Very simple question here:  I am also testing the user-user cf in mahout.  
>> So, once I define my user neighborhood, is it possible to select the 
>> recommendations from that based on the number of preferences per item rather 
>> than a weighted average?  Basically, I'd like to recommend the items with 
>> the most preferences.  It would be simple to implement, so I was curious if 
>> this was already possible.  I understand that in this case, the counts 
>> become dependent on the size of the neighborhood. This is something I'd want 
>> to use for testing.
>> 
>> Thanks
>> Chris
> 

Reply via email to