Hi, I've been reading the chapter on recommendations in Programming Collective Intelligence and looking at Taste. The examples in PCI all assume scenarios where items to recommend have been rated by users on some scale. I understand how items can be recommended to users using item-based filtering and user-item ratings and why this is preferred over user-based filtering when the number of users is larger than the number of items. But what if all I've got is item-item similarity (content-based) and there are no user-item ratings? Say I have a situation where people simply either consume content (e.g. read an article, watch a video...) or not consume it (don't read an article, don't watch the video...). In other words, I really have only yes/no or 1/0 or seen/not seen type "rating".
I can't really use Euclidean distance or Pearson correlation coefficient, can I? What do people use in such scenarios? Would it make sense to use http://en.wikipedia.org/wiki/Jaccard_index for such cases? ... Ah, I do see javadoc in TanimotoCoefficientSimilarity saying exactly that, good. But then my question is: Doesn't the use of Jaccard/Tanimoto mean going back to the expensive user-user similarity computation? That is, if I need to recommend items for user U1 don't I need to: 1) have user-user similarity pre-computed (and recomputed periodically) 2) find top N users U{2,3,4,...N} who are the most similar to U1 3) then for these top N most similar users find their "seen" items that U1 has not seen (possibly limit this to only recently seen items) 4) select top N items from 3) and recommend those to U1. If so, then 1) is again expensive. And what how would one go about selecting top N items from the list in this case other than ordering them by user-user similarity? Of course, something is telling me I'm demonstrating that I don't yet have the full grasp of item-based filtering. I hope that's the case! :) Thanks, Otis
