# Which algorithms should I use for recommendation system using a graph database?

Basically I'm developing a recommendation system using a graph database (specifically neo4j), and I want to apply recommendation algorithms. Since i'm using a graph database, I can see the recommendation problem as a graph problem, and intuitively i can use graph based algorithms for the recommendation system.

From my research, recommendation systems are a subclass of information filtering system that seek to predict the "rating" or "preference" that a user would give to an item. And there exists basically two types, collaborative filtering and content based.

I've done a research on the algoritms, and i found some interesting ones:

• Weighted Bipartite Graph algorithm
• Energy Spread Activation
• Union Colors

My question is simple, which other graph algorithms exists that can be used for graph based recommendation system? Or if I use a graph database for recommendation system, the algorithm doesn't necessary need to be a graph based?

Thanks. Any suggestions are welcomed.

## 1 Answer

A biadjacency matrix of a bipartite graph admits matrix factorisation.

For $m$ items and $n$ users, the biadjacency matrix is an $m \times n$ matrix which can be factorised into two lower-rank factor matrices of sizes $m \times k$ and $k \times n$ respectively. This provides a lower-dimensional representation of how users' preferences vary over products.

This model also has the property that the inner product of the $i$th row and $j$th column of the two factor matrices provide an approximation of user $j$'s rating of item $i$. In other words, the product of the two matrices is an approximation of the original ratings matrix.

• Ok. Thanks for the answer, but do you any paper that has used this algorithm to implement in a recommendation system? And how can i implement this on neo4J (for example through a query)? Oct 11 '16 at 13:26
• The principal use of matrix factorisation, to my knowledge, is collaborative filtering for recommender systems. There are many hundreds of papers on the subject, as well as many online lectures and tutorials. It's also not a single algorithm, but a family of techniques. There are many different algorithms for factorising matrices, each with different constraints. I doubt any of them could be implemented directly in neo4j. They operate on matrices, not graphs. But your graph's biadjacency matrix will work with any off-the-shelf matrix factorisation algorithm. Oct 11 '16 at 13:38