사례연구 : 네이버 영화
recommenderlab 패키지 불러오기
library(recommenderlab)
데이터 불러오기
m <- read.csv('MovieNaver.csv', stringsAsFactors = F,
fileEncoding = 'UTF-8')
데이터 탐색하기
dim(m)
colnames(m)
nrow(m)*ncol(m)
sum(is.na(m))
sum(!is.na(m))
hist(colMeans(m, na.rm = T))
hist(colMeans(m, na.rm = T), breaks = 50)
hist(apply(m, 1, function(x) sum(!is.na(x))), breaks = 50)
min(apply(m, 1, function(x) sum(!is.na(x))))
max(apply(m, 1, function(x) sum(!is.na(x))))
par(family = 'AppleGothic')
hist(m[,1], main = names(m)[1])
hist(m[,2], main = names(m)[2])
hist(m[,3], main = names(m)[3])
hist(m[,4], main = names(m)[4])
hist(m[,5], main = names(m)[5])
recommenderlab 패키지를 사용하기 위해 데이터 타입 변환하기
m <- as(m, 'matrix')
m <- as(m, 'realRatingMatrix')
평점을 기준으로 여러 모형들의 정확도 평가하기
scheme <- evaluationScheme(m, method="split",
train = .8, k = 1, given = 3)
algorithms <- list(
"random" = list(name="RANDOM"),
"popular" = list(name="POPULAR"),
"popularZ" = list(name="POPULAR", param=list(normalize = "Z-score")),
"userZ50C" = list(name="UBCF", param=list(normalize = 'Z-score', nn = 50, method = 'cosine')),
"userZ50P" = list(name="UBCF", param=list(normalize = 'Z-score', nn = 50, method = 'pearson')),
"itemZ100PF" = list(name="IBCF", param=list(normalize = 'Z-score', k = 100, method = 'pearson', normalize_sim_matrix = F)),
"itemZ100PT" = list(name="IBCF", param=list(normalize = 'Z-score', k = 100, method = 'pearson', normalize_sim_matrix = T)),
'SVDZ10PT' = list(name="SVD", param=list(normalize = 'Z-score', k = 10)),
'SVDZ10CF' = list(name="SVD", param=list(normalize = 'Z-score', k = 50)),
'SVDZ50PT' = list(name="SVD", param=list(normalize = 'Z-score', k = 100))
)
results <- evaluate(scheme, algorithms, type='ratings')
for (i in names(results))
{
print(i)
print(getConfusionMatrix(results[[i]]))
}
plot(results)
추천 TOP LIST를 기준으로 여러 모형들의 정확도 평가하기
scheme <- evaluationScheme(m, method="split",
train = .8, k = 1, given = 3, goodRating = 6)
results <- evaluate(scheme, algorithms, type='topNList', n=c(1, 3, 5, 10, 15, 20))
plot(results, annotate = 1, legend="topleft")
최종 알고리즘은 UBCF(데이터 사용자별 표준화(Z-score), 인접한 이웃 50명, 유사도는 피어슨 상관계수)로 결정
rec <- Recommender(m, method = 'UBCF', param=list(normalize = 'Z-score', nn = 50, method = 'pearson'))
5번째 사람에게 추천 영화 5개를 추천해보기
as(predict(rec, m[5,], type = 'topNList', n = 5), 'list')
as(m[5,], 'list')