Parrots
Parrots

Reputation: 26902

Basic recommendation engine algorithm

I'm looking to write a basic recommender system in Objective-C and I'm looking for a basic algorithm for the job. Unfortunately off-the-shelf systems are off the table since none seem to be for Objective-C.

I'm going to have a database of items, each with tags (think movies with tags like "horror", "action", etc). Each item would have ~5 or so of these tags. When a user first uses the app their profile will be primed based on their input to a series of questions, associating some tags with their profile.

As the user continues to use the system and rate various items (on a hate/like/love basis) I'd like to adjust the weighting of the recommended tags based on that feedback. I'd also like to take in a few other properties of their ratings as their profile grows, like for example "the 80s" if this dealt with movies. Or maybe director, sticking with the movie theme.

I'm opting to avoid the normal (or at least popular) recommender systems where it looks for similar users to generate recommendations. This is going to have a large item database and minimal users to start.

Can anyone recommend a good starting point for an algorithm like this, I'd hate to reinvent the wheel, and there's a lot out there?

Upvotes: 6

Views: 4053

Answers (2)

Hoai-Thu Vuong
Hoai-Thu Vuong

Reputation: 1967

could you please refer the python-recsys: https://github.com/ocelma/python-recsys, this software use SVD algorithm, I think it is a base algorithm but effective enough. The required library is numpy and scipy, which are written in C, and wrapped by Python. I think it is easy to compile and port to objective-c

Upvotes: 1

Steve
Steve

Reputation: 21509

You can use item based recommendation which sounds perfect for your needs. You can later start to incorporate tags into the weighting but for now I'd suggest considering only the items.

You can learn a little more at http://www.cs.carleton.edu/cs_comps/0607/recommend/recommender/itembased.html There are a good few implementations of it on the net.

What you mentioned in your post would be called user based collaborative filtering.

Upvotes: 0

Related Questions