The BooleanUserGenericUserBasedRecommender did not work for me. It still just gave an unordered list of recommendations with a value of 1. I think my tally method is good enough for my proof-of-concept at the moment so I'll roll with that.
Thanks for all the help! Paul. On Tue, May 5, 2009 at 12:46 PM, Sean Owen <[email protected]> wrote: > On Tue, May 5, 2009 at 11:56 AM, Paul Loy <[email protected]> wrote: > > I made a subclass of MySQLJDBCDataModel and had to copy some of the code > > from both AbstractJDBCDataModel. I'm thinking there could be a better way > to > > do this but would require a bit of a refactor. I might give it a go today > if > > You should just have to override buildUser() to return a > BooleanPrefUser instead. > > > I have time. I'd also like to have the queries injected so we could make > a > > pure JDBC Model and not require subclasses for each SQL database out > there. > > I'll have a look at that too. > > That's what AbstractJDBCDataModel should be about. The constructor > takes a bunch of SQL queries. > > > it's taking about a minute to get a recommendation. I'm guessing with an > > index on user_id column it will be even quicker (also, if I'm not > importing > > millions of rows in the background). > > Oh my yes, you absolutely need indexes, on the user ID and item ID > column. The composite primary key should be both of these columns. > > > > The only issue I have with recommendations from the > > BooleanTanimotoCoefficientSimilarity is that there is no way to order the > > results as they all come out with a value of 1. So the least relevant > item > > may come out at the top. So instead of using a recommender, what I do is > get > > the items from the 20 nearest neighbours, remove from that list the items > my > > Yeah you are right, in this scenario a user-based recommender breaks > down somewhat since all prefs are the same, and recommendations are > based on weighted preferences, but that always comes out 1! > > Instead try BooleanUserGenericUserBasedRecommender. The 'estimated > preferences' you get out are bogus in the sense that all prefs really > *should* be 1, if anything, but, instead you get a value which is the > sum of similarity to all users who express a pref for that item. It > should give a desirable ordering. Try it and see what happens. > > The whole 'boolean user' thing is important but I am have trouble > thinking of how to efficiently piece it into the whole framework... > it's a lot of copy-and-paste and tortuously long class names now, but, > should work at least. > -- --------------------------------------------- Paul Loy [email protected] http://www.keteracel.com/paul
