mahout-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tevfik Aytekin <tevfik.ayte...@gmail.com>
Subject Re: Why some userId has no recommendations?
Date Thu, 13 Feb 2014 12:46:18 GMT
In some cases users might not get any recommendations. There might be
different reasons of this. In your case there is only item 107 which
can be recommended to user 5 (since user 5 rated all other items).
Item 107 got two ratings which are both 5. In this case pearson
correlation between this item and others are undefined. I think this
is the reason why user 5 is not getting any recommendations.

Tevfik

On Thu, Feb 13, 2014 at 9:08 AM, jobin wilson <jobinwilson@gmail.com> wrote:
> Hi Jiang,
>
> Mahout's userbased recommender make use of similarity of a user with other
> users to arrive at what to recommend to him & in this specific case,uses
> Pearson correlation coefficient calculated from the user ratings as a
> similarity measure to form a neighborhood.It then estimates ratings for
> unpicked items based on user similarity and ratings provided by neighbors.
>
> A short answer is that if a user gets any recommendations totally depend on
> the training data that you provide as input to the model.In this case,if
> you expect 107 as a recommendation for user 5,there arent enough ratings
> available for 107 in the user 5's neighborhood. If you modify your data as
> below,you will get recommendations for user 5. (just add a dummy rating
> 2,107,5)
>
> I have included some code snippet which demonstrate this idea of user
> similarity and neighborhood .Hope this helps.
>
> *Code:*
> public class Test {
>
>     public static void main(String args[]) throws Exception {
>         String inFile = "F:\\hadoop\\data\\recsysinput.txt";
>         DataModel dataModel = new FileDataModel(new File(inFile));
>         UserSimilarity userSimilarity = new
> PearsonCorrelationSimilarity(dataModel);
>         UserNeighborhood userNeighborhood = new
> NearestNUserNeighborhood(100, userSimilarity, dataModel);
>         Recommender recommender = new
> GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity);
>
>         for (int i = 1; i <= 5; i++) {
>             List<RecommendedItem> recommendations =
> recommender.recommend(i, 1);
>             for(int j=1;j<=5 ;j++){
>                 System.out.println("Similarity between user:"+i+" and
> user:"+j+ "= "+userSimilarity.userSimilarity(i, j));
>                 }
>             System.out.println("recommend for user:" + i +" Neighborhood
> Size:" + userNeighborhood.getUserNeighborhood(i).length);
>
>             for (RecommendedItem recommendation : recommendations) {
>                 System.out.println(recommendation);
>             }
>         }
>     }
> }
>
> *Input:*
> 1,101,5.0
> 1,102,3.0
> 1,103,2.5
> 2,101,2
> 2,102,2.5
> 2,103,5
> 2,104,2
> 2,107,5
> 3,101,2.5
> 3,104,4
> 3,105,4.5
> 3,107,5
> 4,101,5
> 4,103,3
> 4,104,4.5
> 4,106,4
> 5,101,4
> 5,102,3
> 5,103,2
> 5,104,4
> 5,105,3.5
> 5,106,4
>
> *Output:*
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in
> [jar:file:/D:/from%20D/MSR/Coursework/SEM2/Pattern%20Recognition/project/acadnet/mahout-distribution-0.7/mahout-distribution-0.7/mahout-examples-0.7-job.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in
> [jar:file:/D:/from%20D/MSR/Coursework/SEM2/Pattern%20Recognition/project/acadnet/mahout-distribution-0.7/mahout-distribution-0.7/lib/slf4j-jcl-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in
> [jar:file:/D:/from%20D/MSR/Coursework/SEM2/Pattern%20Recognition/project/acadnet/mahout-distribution-0.7/mahout-distribution-0.7/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
> explanation.
> log4j:WARN No appenders could be found for logger
> (org.apache.mahout.cf.taste.impl.model.file.FileDataModel).
> log4j:WARN Please initialize the log4j system properly.
> log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for
> more info.
> Similarity between user:1 and user:1= 1.0
> Similarity between user:1 and user:2= -0.7642652566278799
> Similarity between user:1 and user:3= NaN
> Similarity between user:1 and user:4= 0.9999999999999998
> Similarity between user:1 and user:5= 0.944911182523068
> recommend for user:1 Neighborhood Size:3
> RecommendedItem[item:104, value:5.0]
> Similarity between user:2 and user:1= -0.7642652566278799
> Similarity between user:2 and user:2= 0.9999999999999998
> Similarity between user:2 and user:3= 0.8029550685469666
> Similarity between user:2 and user:4= -0.9707253433941515
> Similarity between user:2 and user:5= -0.9393939393939394
> recommend for user:2 Neighborhood Size:4
> RecommendedItem[item:106, value:4.0]
> Similarity between user:3 and user:1= NaN
> Similarity between user:3 and user:2= 0.8029550685469666
> Similarity between user:3 and user:3= 1.0
> Similarity between user:3 and user:4= -1.0
> Similarity between user:3 and user:5= -0.6933752452815484
> recommend for user:3 Neighborhood Size:3
> RecommendedItem[item:106, value:4.0]
> Similarity between user:4 and user:1= 0.9999999999999998
> Similarity between user:4 and user:2= -0.9707253433941515
> Similarity between user:4 and user:3= -1.0
> Similarity between user:4 and user:4= 1.0
> Similarity between user:4 and user:5= 0.8783100656536799
> recommend for user:4 Neighborhood Size:4
> RecommendedItem[item:107, value:5.0]
> Similarity between user:5 and user:1= 0.944911182523068
> Similarity between user:5 and user:2= -0.9393939393939394
> Similarity between user:5 and user:3= -0.6933752452815366
> Similarity between user:5 and user:4= 0.8783100656536799
> Similarity between user:5 and user:5= 1.0
> recommend for user:5 Neighborhood Size:4
> RecommendedItem[item:107, value:5.0]
>
>
>
> On Thu, Feb 13, 2014 at 10:57 AM, Koobas <koobas@gmail.com> wrote:
>
>> 5 should get 107 as a recommendation, whether user-based or item-based.
>> No clue why you're not getting it.
>>
>>
>>
>> On Wed, Feb 12, 2014 at 11:50 PM, jiangwen jiang <jiangwen127@gmail.com
>> >wrote:
>>
>> > Hi, all:
>> >
>> > I try to user mahout api to make recommendations, but I find some userId
>> > has no recommendations, why?
>> >
>> > here is my code
>> > public static void main(String args[]) throws Exception {
>> >         String inFile = "F:\\hadoop\\data\\recsysinput.txt";
>> >         DataModel dataModel = new FileDataModel(new File(inFile));
>> >         UserSimilarity userSimilarity = new
>> > PearsonCorrelationSimilarity(dataModel);
>> >         UserNeighborhood userNeighborhood = new
>> > NearestNUserNeighborhood(100, userSimilarity, dataModel);
>> >         Recommender recommender = new
>> > GenericUserBasedRecommender(dataModel, userNeighborhood, userSimilarity);
>> >
>> >         for (int i = 1; i <= 5; i++) {
>> >             List<RecommendedItem> recommendations =
>> > recommender.recommend(i, 1);
>> >
>> >             System.out.println("recommend for user:" + i);
>> >             for (RecommendedItem recommendation : recommendations) {
>> >                 System.out.println(recommendation);
>> >             }
>> >         }
>> >     }
>> >
>> >
>> > input data(recsysinput.txt):
>> > 1,101,5.0
>> > 1,102,3.0
>> > 1,103,2.5
>> > 2,101,2
>> > 2,102,2.5
>> > 2,103,5
>> > 2,104,2
>> > 3,101,2.5
>> > 3,104,4
>> > 3,105,4.5
>> > 3,107,5
>> > 4,101,5
>> > 4,103,3
>> > 4,104,4.5
>> > 4,106,4
>> > 5,101,4
>> > 5,102,3
>> > 5,103,2
>> > 5,104,4
>> > 5,105,3.5
>> > 5,106,4
>> >
>> > output:
>> > recommend for user:1
>> > RecommendedItem[item:104, value:5.0]
>> > recommend for user:2
>> > RecommendedItem[item:106, value:4.0]
>> > recommend for user:3
>> > RecommendedItem[item:106, value:4.0]
>> > recommend for user:4
>> > RecommendedItem[item:105, value:5.0]
>> > recommend for user:5
>> >
>> > UserId 5 has no recommendations, is it right?
>> > Can I get some recommendations for userId 5, even if the recommendation
>> > results are not good enough?
>> >
>> > thanks
>> > Regards!
>> >
>>

Mime
View raw message