This recommender system uses the values from the lecture-provided dataset that have been mean-centered normalized. It will attempt to recommend movies, based on similarity of reviews of other movies.
# Create normalized data frame using provided mean-centered values
itemdf <- data.frame()
matt <- c(.75,NA,-1.25,NA,-1.25,1.75)
mauricio <- c(.5,NA,-.5,-.5,.5,NA)
param <- c(.5,.5,-2.5,NA,NA,1.5)
shipra <- c(NA,NA,0,1,NA,-1)
itemdf <- data.frame(matt,mauricio,param,shipra)
obsnames <- c("CaptainAmerica","Deadpool","Frozen","JungleBook","PitchPerfect2","StarWarsForce")
rownames(itemdf) <- obsnames
itemdf
## matt mauricio param shipra
## CaptainAmerica 0.75 0.5 0.5 NA
## Deadpool NA NA 0.5 NA
## Frozen -1.25 -0.5 -2.5 0
## JungleBook NA -0.5 NA 1
## PitchPerfect2 -1.25 0.5 NA NA
## StarWarsForce 1.75 NA 1.5 -1
itemvector <- function(df){
sum(df^2, na.rm=TRUE)^.5
}
# Calculate the length of each item vector
itemweight <- apply(itemdf, 1, itemvector)
# Apply Item-Item similarity
itemitemcf <- data.frame()
itemitemcf[1,1] <- 1
itemitemcf[2,1] <- (sum(itemdf["Deadpool",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['Deadpool'])
itemitemcf[3,1] <- (sum(itemdf["Frozen",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['Frozen'])
itemitemcf[4,1] <- (sum(itemdf["JungleBook",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['JungleBook'])
itemitemcf[5,1] <- (sum(itemdf["PitchPerfect2",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['PitchPerfect2'])
itemitemcf[6,1] <- (sum(itemdf["StarWarsForce",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['StarWarsForce'])
itemitemcf[1,2] <- (sum(itemdf["Deadpool",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['Deadpool'])
itemitemcf[2,2] <- 1
itemitemcf[3,2] <- (sum(itemdf["Frozen",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['Frozen'])
itemitemcf[4,2] <- (sum(itemdf["JungleBook",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['JungleBook'])
itemitemcf[5,2] <- (sum(itemdf["PitchPerfect2",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['PitchPerfect2'])
itemitemcf[6,2] <- (sum(itemdf["StarWarsForce",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['StarWarsForce'])
itemitemcf[1,3] <- (sum(itemdf["Frozen",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['Frozen'])
itemitemcf[2,3] <- (sum(itemdf["Frozen",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['Frozen'])
itemitemcf[3,3] <- 1
itemitemcf[4,3] <- (sum(itemdf["JungleBook",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['JungleBook'])
itemitemcf[5,3] <- (sum(itemdf["PitchPerfect2",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['PitchPerfect2'])
itemitemcf[6,3] <- (sum(itemdf["StarWarsForce",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['StarWarsForce'])
itemitemcf[1,4] <- (sum(itemdf["JungleBook",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['JungleBook'])
itemitemcf[2,4] <- (sum(itemdf["JungleBook",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['JungleBook'])
itemitemcf[3,4] <- (sum(itemdf["JungleBook",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['JungleBook'])
itemitemcf[4,4] <- 1
itemitemcf[5,4] <- (sum(itemdf["PitchPerfect2",]*itemdf["JungleBook",], na.rm=TRUE))/(itemweight['JungleBook'] * itemweight['PitchPerfect2'])
itemitemcf[6,4] <- (sum(itemdf["StarWarsForce",]*itemdf["JungleBook",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['JungleBook'])
itemitemcf[1,5] <- (sum(itemdf["PitchPerfect2",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['PitchPerfect2'])
itemitemcf[2,5] <- (sum(itemdf["PitchPerfect2",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['PitchPerfect2'])
itemitemcf[3,5] <- (sum(itemdf["PitchPerfect2",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['PitchPerfect2'])
itemitemcf[4,5] <- (sum(itemdf["PitchPerfect2",]*itemdf["JungleBook",], na.rm=TRUE))/(itemweight['JungleBook'] * itemweight['PitchPerfect2'])
itemitemcf[5,5] <- 1
itemitemcf[6,5] <- (sum(itemdf["StarWarsForce",]*itemdf["PitchPerfect2",], na.rm=TRUE))/(itemweight['StarWarsForce'] * itemweight['PitchPerfect2'])
itemitemcf[1,6] <- (sum(itemdf["StarWarsForce",]*itemdf["CaptainAmerica",], na.rm=TRUE))/(itemweight['CaptainAmerica'] * itemweight['StarWarsForce'])
itemitemcf[2,6] <- (sum(itemdf["StarWarsForce",]*itemdf["Deadpool",], na.rm=TRUE))/(itemweight['Deadpool'] * itemweight['StarWarsForce'])
itemitemcf[3,6] <- (sum(itemdf["StarWarsForce",]*itemdf["Frozen",], na.rm=TRUE))/(itemweight['Frozen'] * itemweight['StarWarsForce'])
itemitemcf[4,6] <- (sum(itemdf["StarWarsForce",]*itemdf["JungleBook",], na.rm=TRUE))/(itemweight['JungleBook'] * itemweight['StarWarsForce'])
itemitemcf[5,6] <- (sum(itemdf["StarWarsForce",]*itemdf["PitchPerfect2",], na.rm=TRUE))/(itemweight['StarWarsForce'] * itemweight['PitchPerfect2'])
itemitemcf[6,6] <- 1
rownames(itemitemcf) <- obsnames
colnames(itemitemcf) <- obsnames
# This data frame indicates similarity of items with other items, in this case movies - as rated by the user group
itemitemcf
## CaptainAmerica Deadpool Frozen JungleBook
## CaptainAmerica 1.0000000 0.4850713 -0.83280877 -0.21693046
## Deadpool 0.4850713 1.0000000 -0.88045091 0.00000000
## Frozen -0.8328088 -0.8804509 1.00000000 0.07874992
## JungleBook -0.2169305 0.0000000 0.07874992 1.00000000
## PitchPerfect2 -0.4954151 0.0000000 0.34334082 -0.16609096
## StarWarsForce 0.7963955 0.5970223 -0.83227733 -0.31499969
## PitchPerfect2 StarWarsForce
## CaptainAmerica -0.4954151 0.7963955
## Deadpool 0.0000000 0.5970223
## Frozen 0.3433408 -0.8322773
## JungleBook -0.1660910 -0.3559953
## PitchPerfect2 1.0000000 -0.6467082
## StarWarsForce -0.6467082 1.0000000
heatmap(data.matrix(itemitemcf))