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 <jobinwil...@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 <koo...@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 <jiangwen...@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! >> > >>