Blog posts on Data Science, Machine Learning, Data Mining, Artificial Intelligence, Spark Machine Learning

Wednesday, November 18, 2015

Item Based Collaborative Filtering Recommender Systems in R

In the series of implementing Recommendation engines, in my previous blog about recommendation system in R, I have explained about implementing user based collaborative filtering approach using R. In this post, I will be explaining about basic implementation of Item based collaborative filtering recommender systems in r.

Item based Collaborative Filtering:
Unlike in user based collaborative filtering discussed previously, in item-based collaborative filtering, we consider set of items rated by the user and computes item similarities with the targeted item. Once similar items are found, and then rating for the new item is predicted by taking weighted average of the user’s rating on these similar items.
let's understand with an example:
As an example: consider below dataset, containing users rating to movies. Let us build an algorithm to recommend movies to CHAN.
Implementing Item based recommender systems, like user based collaborative filtering, requires two steps:
  • Calculating Item similarities
  •  Predicting the targeted item rating for the targeted User.

Step1: Calculating Item Similarity:
This is a critical step; we calculate the similarity between co-rated items. We use cosine similarity or pearson-similarity to compute the similarity between items. The output for step is similarity matrix between Items.

Code snippet:
#step 1: item-similarity calculation co-rated items are considered and similarity between two items
#are calculated using cosine similarity
ratings = read.csv("Rating Matrix.csv")
x = ratings[,2:7]
x[] = 0

item_sim = cosine(as.matrix(x))
Step2: Predicting the targeted item rating for the targeted User CHAN.
In this most important step, we first predict the items which the user is not rated by making use of the ratings he has made to previously interacted items and the similarity values calculated in the previous step. First we select item to be predicted, in our case “INCEPTION”, we predict the rating for INCEPTION movie by calculating the weighted sum of ratings made to movies similar to INCEPTION. i.e We take the similarity score for each rated movie by CHAN w.r.t INCEPTION and multiply with the corresponding rating and sum up all the for all the rated movies. This final sum is divided by total sum of similarity scores of rated items w.r.t INCEPTION.
Recommending Top N items:
Once all the non rated movies are predicted we recommend top N movies to CHAN. Code for Item based collaborative filtering in R:
 #data input
 ratings = read.csv("~Rating Matrix.csv")

"step 1: item-similarity calculation\nco-rated items are considered and similarity between two items\nare calculated using cosine similarity"

 x = ratings[,2:7]
 x[] = 0
 item_sim = cosine(as.matrix(x))
"Recommending items for chan: since three movies are not rated\nas a first step we have to predict rating value for each movie\nin CHANs case we have to first predict values for Titanic, Inception,Matrix"

 rec_itm_for_user = function(userno)
   #extract all the movies not rated by CHAN
   userRatings = ratings[userno,]
   non_rated_movies = list()
   rated_movies = list()
   for(i in 2:ncol(userRatings)){
       non_rated_movies = c(non_rated_movies,colnames(userRatings)[i])
       rated_movies = c(rated_movies,colnames(userRatings)[i])
   non_rated_movies = unlist(non_rated_movies)
   rated_movies = unlist(rated_movies)
   #create weighted similarity for all the rated movies by CHAN
   non_rated_pred_score = list()
   for(j in 1:length(non_rated_movies)){
     temp_sum = 0
     df = item_sim[which(rownames(item_sim)==non_rated_movies[j]),]
     for(i in 1:length(rated_movies)){
       temp_sum = temp_sum+ df[which(names(df)==rated_movies[i])]
     weight_mat = df*ratings[userno,2:7]
     non_rated_pred_score = c(non_rated_pred_score,rowSums(weight_mat,na.rm=T)/temp_sum)
   pred_rat_mat =
   names(pred_rat_mat) = non_rated_movies
   for(k in 1:ncol(pred_rat_mat)){
     ratings[userno,][which(names(ratings[userno,]) == names(pred_rat_mat)[k])] = pred_rat_mat[1,k]

> rec_itm_for_user(7)
  Users  Titanic Batman Inception SuperMan Spiderman   matrix

7  CHAN 3.085298    4.5  2.940811        4         1 3.170034

Calling above function gives the predicted values not previously seen values for movies Titanic, Inception, Matrix. Now we can sort and recommend the top items.
This is all about Collaborative filtering in R, in my upcoming posts I will talk about content based recommender systems in r.


  1. A person essentially help to make seriously articles I would state. This is the very first time I frequented your web page and thus far? I amazed with the research you made to create this particular publish extraordinary. Magnificent job!smok mag baby

    1. Machine Learning Projects for Final Year machine learning projects for final year

      Deep Learning Projects assist final year students with improving your applied Deep Learning skills rapidly while allowing you to investigate an intriguing point. Furthermore, you can include Deep Learning projects for final year into your portfolio, making it simpler to get a vocation, discover cool profession openings, and Deep Learning Projects for Final Year even arrange a more significant compensation.

      Python Training in Chennai
      Python Training in Chennai

      Angular Training Project Centers in Chennai

  2. Hi my friend! I want to say that this article is amazing, nice written and include approximately all vital infos. I would like to see more posts like this. best ecommerce web development

  3. We are a group of volunteers and starting a new scheme in our community. Your site offered us with valuable information to work on. You have done a formidable job and our whole community will be grateful to you.
    approaching a potential influencer

  4. You should Hire MediaOne for conversion rate optimization. It would be a sound decision that would show results in the long run. They would improve your website usability by optimizing your site and landing page experience to allure more visitors.

  5. LifeVoxel AI - Best Medical Imaging Platform also Provide critical patient-centric delivery of care using intuitive, diagnostic and instantly accessible visualizations over the Internet. 

    RIS PACS Software

  6. The great information that you shared. It will help all of them. Thanks for posting. Keep maintain the updates
    Green Pen
    Ecommerce Solution Provider
    Data Extraction Solutions

  7. Just wish to say your article is as amazing. The clarity in your post is simply spectacular and i can assume you are an expert on this subject. Fine with your permission allow me to grab your RSS feed to keep updated with forthcoming post. Thanks a million and please keep up the enjoyable work. supply chain track and trace

  8. Wow! This blog looks exactly like my old one! It's on a entirely different topic but it has pretty much the same layout and design. Great choice of colors! singapore live streaming

  9. I'm not sure exactly why but this blog is loading very slow for me. Is anyone else having this problem or is it a issue on my end? I'll check back later and see if the problem still exists. roller bearing

  10. I'm starting a blog soon but have no coding experience so I wanted to get guidance from someone with experience. Any help would be greatly appreciated!power systems

  11. Best Digital Marketing agency in Dubai We are in an ‘ always on ‘ world. Connecting, sharing, collaborating. We, at ISD Global, help brands digitell the digital while distinguishing the distinguished and distilling the brand essence. ISD Global can evaluate the strength of your brand through a brand audit. The –––audit can be initiated before embarking on a Brand Engineering exercise or at any time that you want to establish your brand’s power/equity in the marketplace. The brand identity reflects stakeholder vision, the brand positioning and resonates with the brand’s core values.

  12. Looks like this will take more time but still thanks.
    buy logo