# Probability that someone will like image

I've got following problem:
- We have set of N people
- We have set of K images
- Each person rates some number of images. A person might like or not like an image (these are the only two possibilites) . - The problem is how to calculate likelihood that some person likes a particular image.

I'll give example presenting my intuition.
N = 4
K = 5
+ means that person likes image
- means that person doesn't like image
0 means that person hasn't been asked about the image, and that value should be predicted

x 1 2 3 4 5
1 + - 0 0 +
2 + - + 0 +
3 - - + + 0
4 - 0 - - -


Person 1 will probably like image 3 because, person 2 has similar preferences and person 2 likes image 3.
Person 4 will probably not like image 2 because no one else likes it and in addition person 4 does not like most images.

Is there any well known method, which can be used to calculate such likelihood?

• Given my limited experience, I cannot give an exact answer. However, I believe that you can use a panel data (because you consider in your example variations within individuals and between individuals) approach with logit. Maybe others can elaborate on this... Oct 20 '10 at 12:14
• Your small example is very useful, but I assume your real dataset is larger. How much larger, i.e. (roughly) how big are your real N and k? Oct 20 '10 at 12:25
• N and k can be huge, but computational power is not a problem. Oct 20 '10 at 18:37

I believe this is a standard problem of Collaborative Filtering. A google search gives thousands of results.

• or biclustering (+1).
– chl
Oct 20 '10 at 19:09

This looks like a good problem for machine learning, so I'll concentrate on this group of methods.

First and the most obvious idea is the kNN algorithm. There you first calculate the similarity among viewers and then predict the missing votes with the average vote on this picture cast by similar users. For details see Wikipedia.

Another idea is to grow unsupervised random forest on this data (either way, with attributes in images or people, whatever is better) and impute missing data based on the forest structure; the whole method is implemented and described in R randomForest package, look for rfImpute function.

Finally, you can restructure the problem to a plain classification task, say make an object of each zero in matrix and try to think of some reasonable descriptors (like average viewer vote, average image vote, vote of a most, second most, ... similar viewer, same with image, possibly some external data (average hue of image, age of voter, etc). And then try various classifiers on this data (SVM, RF, NB, ...).

There are also some more complex possibilities; for an overview you can look for Netflix prize challenge (which was a similar problem) solutions.