# Extract transform and analyze
# Load recommenderlab library
library("recommenderlab")
setwd("C:/Users/Tanishka/Desktop/R Datasets")
# Read dataset
rating<- read.csv("product_ratings_data.csv")
#Create rating matrixfrom data
ratings_matrix<- as(rating,"realRatingMatrix")
# display transformed data
image(ratings_matrix[1:6,1:10])

# Extract a sample from ratings matrix
sample_ratings <- sample(ratings_matrix,1000)
# Compute the mean product ratings for the first User
rowMeans(sample_ratings[1])
  u10048 
2.611765 
# Compute distribution of item ratings
hist(getRatings(sample_ratings),breaks=100,xlab="Product Ratings", main="Histogram of Product Ratings")

# Get distribution of normalized item ratings
hist(getRatings(normalize(sample_ratings)),breaks=100, xlab="Normalized Product Ratings", main= "Histogram of Normalized Product Ratings")

# Number of items rated per user
hist(rowCounts(sample_ratings), breaks = 50, xlab = "Number of Products", main = "Histogram of Product Count Distribution")

# Model preparation and prediction
# Create "User Based collaborative filtering" Model
ubcf_recommender <- Recommender(ratings_matrix[1:10], "UBCF")
# Predict list of product which can be recommended to potential user
recommendations<- predict(ubcf_recommender,
                          ratings_matrix[1010:1011], n=5)
# Display recommendation in form of the list
as(recommendations,"list")
$u14521
[1] "prod_85" "prod_72" "prod_94" "prod_80" "prod_84"

$u14530
[1] "prod_83" "prod_72" "prod_81" "prod_85" "prod_73"
# Model evaluation
# Evaluation scheme
eval_scheme <- evaluationScheme(ratings_matrix[1:500], method="split", train=0.9, given=15)
# Display the evaluation scheme
eval_scheme
Evaluation scheme with 15 items given
Method: ‘split’ with 1 run(s).
Training set proportion: 0.900
Good ratings: NA
Data set: 500 x 100 rating matrix of class ‘realRatingMatrix’ with 35514 ratings.
# Training model
training_recommender <- Recommender(getData(eval_scheme, "train"), "UBCF")
                                    
# Predictions on the test dataset
test_rating <- predict(training_recommender, getData(eval_scheme,"known"), type="ratings")
# Error
error <- calcPredictionAccuracy(test_rating,getData(eval_scheme, "unknown"))
error
     RMSE       MSE       MAE 
1.1618838 1.3499739 0.9272752 
#To Evalate the performance of UBCF algorithm, we use IBCF as comparision
# Training model using IBCF 
training_recommender_2 <- Recommender(getData(eval_scheme, "train"), "IBCF")
# Prediction on test dataset
test_rating_2 <- predict(training_recommender_2, getData(eval_scheme,"known"), type="ratings")
error_compare <- rbind(calcPredictionAccuracy(test_rating, getData(eval_scheme,"unknown")), calcPredictionAccuracy(test_rating_2, getData(eval_scheme, "unknown")))
rownames(error_compare)<- c("User Based CF", "Item Based CF")

Add a new chunk by clicking the Insert Chunk button on the toolbar or by pressing Ctrl+Alt+I.

When you save the notebook, an HTML file containing the code and output will be saved alongside it (click the Preview button or press Ctrl+Shift+K to preview the HTML file).

LS0tDQp0aXRsZTogIlByb2R1Y3QgUmVjb21tZW5kYXRpb24gc3lzdGVtcyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQpgYGB7cn0NCiMgRXh0cmFjdCB0cmFuc2Zvcm0gYW5kIGFuYWx5emUNCiMgTG9hZCByZWNvbW1lbmRlcmxhYiBsaWJyYXJ5DQpsaWJyYXJ5KCJyZWNvbW1lbmRlcmxhYiIpDQpzZXR3ZCgiQzovVXNlcnMvVGFuaXNoa2EvRGVza3RvcC9SIERhdGFzZXRzIikNCiMgUmVhZCBkYXRhc2V0DQpyYXRpbmc8LSByZWFkLmNzdigicHJvZHVjdF9yYXRpbmdzX2RhdGEuY3N2IikNCg0KI0NyZWF0ZSByYXRpbmcgbWF0cml4ZnJvbSBkYXRhDQpyYXRpbmdzX21hdHJpeDwtIGFzKHJhdGluZywicmVhbFJhdGluZ01hdHJpeCIpDQojIGRpc3BsYXkgdHJhbnNmb3JtZWQgZGF0YQ0KaW1hZ2UocmF0aW5nc19tYXRyaXhbMTo2LDE6MTBdKQ0KIyBFeHRyYWN0IGEgc2FtcGxlIGZyb20gcmF0aW5ncyBtYXRyaXgNCnNhbXBsZV9yYXRpbmdzIDwtIHNhbXBsZShyYXRpbmdzX21hdHJpeCwxMDAwKQ0KDQojIENvbXB1dGUgdGhlIG1lYW4gcHJvZHVjdCByYXRpbmdzIGZvciB0aGUgZmlyc3QgVXNlcg0Kcm93TWVhbnMoc2FtcGxlX3JhdGluZ3NbMV0pDQoNCiMgQ29tcHV0ZSBkaXN0cmlidXRpb24gb2YgaXRlbSByYXRpbmdzDQpoaXN0KGdldFJhdGluZ3Moc2FtcGxlX3JhdGluZ3MpLGJyZWFrcz0xMDAseGxhYj0iUHJvZHVjdCBSYXRpbmdzIiwgbWFpbj0iSGlzdG9ncmFtIG9mIFByb2R1Y3QgUmF0aW5ncyIpDQoNCiMgR2V0IGRpc3RyaWJ1dGlvbiBvZiBub3JtYWxpemVkIGl0ZW0gcmF0aW5ncw0KaGlzdChnZXRSYXRpbmdzKG5vcm1hbGl6ZShzYW1wbGVfcmF0aW5ncykpLGJyZWFrcz0xMDAsIHhsYWI9Ik5vcm1hbGl6ZWQgUHJvZHVjdCBSYXRpbmdzIiwgbWFpbj0gIkhpc3RvZ3JhbSBvZiBOb3JtYWxpemVkIFByb2R1Y3QgUmF0aW5ncyIpDQoNCiMgTnVtYmVyIG9mIGl0ZW1zIHJhdGVkIHBlciB1c2VyDQpoaXN0KHJvd0NvdW50cyhzYW1wbGVfcmF0aW5ncyksIGJyZWFrcyA9IDUwLCB4bGFiID0gIk51bWJlciBvZiBQcm9kdWN0cyIsIG1haW4gPSAiSGlzdG9ncmFtIG9mIFByb2R1Y3QgQ291bnQgRGlzdHJpYnV0aW9uIikNCiMgTW9kZWwgcHJlcGFyYXRpb24gYW5kIHByZWRpY3Rpb24NCg0KIyBDcmVhdGUgIlVzZXIgQmFzZWQgY29sbGFib3JhdGl2ZSBmaWx0ZXJpbmciIE1vZGVsDQp1YmNmX3JlY29tbWVuZGVyIDwtIFJlY29tbWVuZGVyKHJhdGluZ3NfbWF0cml4WzE6MTBdLCAiVUJDRiIpDQoNCiMgUHJlZGljdCBsaXN0IG9mIHByb2R1Y3Qgd2hpY2ggY2FuIGJlIHJlY29tbWVuZGVkIHRvIHBvdGVudGlhbCB1c2VyDQpyZWNvbW1lbmRhdGlvbnM8LSBwcmVkaWN0KHViY2ZfcmVjb21tZW5kZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGluZ3NfbWF0cml4WzEwMTA6MTAxMV0sIG49NSkNCg0KIyBEaXNwbGF5IHJlY29tbWVuZGF0aW9uIGluIGZvcm0gb2YgdGhlIGxpc3QNCg0KYXMocmVjb21tZW5kYXRpb25zLCJsaXN0IikNCg0KIyBNb2RlbCBldmFsdWF0aW9uDQoNCiMgRXZhbHVhdGlvbiBzY2hlbWUNCmV2YWxfc2NoZW1lIDwtIGV2YWx1YXRpb25TY2hlbWUocmF0aW5nc19tYXRyaXhbMTo1MDBdLCBtZXRob2Q9InNwbGl0IiwgdHJhaW49MC45LCBnaXZlbj0xNSkNCg0KIyBEaXNwbGF5IHRoZSBldmFsdWF0aW9uIHNjaGVtZQ0KZXZhbF9zY2hlbWUNCg0KIyBUcmFpbmluZyBtb2RlbA0KdHJhaW5pbmdfcmVjb21tZW5kZXIgPC0gUmVjb21tZW5kZXIoZ2V0RGF0YShldmFsX3NjaGVtZSwgInRyYWluIiksICJVQkNGIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KIyBQcmVkaWN0aW9ucyBvbiB0aGUgdGVzdCBkYXRhc2V0DQp0ZXN0X3JhdGluZyA8LSBwcmVkaWN0KHRyYWluaW5nX3JlY29tbWVuZGVyLCBnZXREYXRhKGV2YWxfc2NoZW1lLCJrbm93biIpLCB0eXBlPSJyYXRpbmdzIikNCg0KIyBFcnJvcg0KDQplcnJvciA8LSBjYWxjUHJlZGljdGlvbkFjY3VyYWN5KHRlc3RfcmF0aW5nLGdldERhdGEoZXZhbF9zY2hlbWUsICJ1bmtub3duIikpDQoNCmVycm9yDQoNCiNUbyBFdmFsYXRlIHRoZSBwZXJmb3JtYW5jZSBvZiBVQkNGIGFsZ29yaXRobSwgd2UgdXNlIElCQ0YgYXMgY29tcGFyaXNpb24NCg0KIyBUcmFpbmluZyBtb2RlbCB1c2luZyBJQkNGIA0KDQp0cmFpbmluZ19yZWNvbW1lbmRlcl8yIDwtIFJlY29tbWVuZGVyKGdldERhdGEoZXZhbF9zY2hlbWUsICJ0cmFpbiIpLCAiSUJDRiIpDQoNCg0KIyBQcmVkaWN0aW9uIG9uIHRlc3QgZGF0YXNldA0KDQp0ZXN0X3JhdGluZ18yIDwtIHByZWRpY3QodHJhaW5pbmdfcmVjb21tZW5kZXJfMiwgZ2V0RGF0YShldmFsX3NjaGVtZSwia25vd24iKSwgdHlwZT0icmF0aW5ncyIpDQoNCmVycm9yX2NvbXBhcmUgPC0gcmJpbmQoY2FsY1ByZWRpY3Rpb25BY2N1cmFjeSh0ZXN0X3JhdGluZywgZ2V0RGF0YShldmFsX3NjaGVtZSwidW5rbm93biIpKSwgY2FsY1ByZWRpY3Rpb25BY2N1cmFjeSh0ZXN0X3JhdGluZ18yLCBnZXREYXRhKGV2YWxfc2NoZW1lLCAidW5rbm93biIpKSkNCg0Kcm93bmFtZXMoZXJyb3JfY29tcGFyZSk8LSBjKCJVc2VyIEJhc2VkIENGIiwgIkl0ZW0gQmFzZWQgQ0YiKQ0KDQoNCmBgYA0KDQpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ3RybCtBbHQrSSouDQoNCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ3RybCtTaGlmdCtLKiB0byBwcmV2aWV3IHRoZSBIVE1MIGZpbGUpLg0K