資料說明

1.本單元主題僅在介紹分群與推荐

2.MovieLens是某電影公司針對1000位使用者共1700部電影之資料

- 我們會使用U.data、U.item、U.user

- U.data: 是使用者對1682部電影的評分

- U.item: 記錄每一部電影的資訊

- U.user: 記錄每一位使用者的基本資料


[設定所需的函式庫(libraries)以及載入資料]

#install.packages("kknn")
library(kknn)
#install.packages("class")
library(class)



setwd("/home/m600/Working Area/Rdata Practice/Customer Course/ml-100k")

data=read.table("u.data")
data=data[,-4] #刪除不用的第四列資料
names(data)=c("userid","itemid","rating")

head(data)
dim(data)

user=read.table("u.user")
head(user)

[Part 1].手動撰寫一個MovieLens_KNN的函數

Userid=1;Itemid=61;n=50;K=10

MovieLens_KNN=function(Userid,Itemid,n,K) {
  
  sub=which(data$userid==Userid)
  if(length(sub)>=n) sub_n=sample(sub,n)
  if(length(sub)<n) sub_n=sample(sub,length(sub))
  known_itemid=data$itemid[sub_n]
  unknown_itemid=Itemid
  
  unknown_sub=which(data$itemid==unknown_itemid)
  user=data$userid[unknown_sub[-1]]
  
  data_all=matrix(0,1+length(user),2+length(known_itemid))
  data_all=data.frame(data_all)
  names(data_all)=c("userid",paste("unknown_itemid_",Itemid),paste("itemid_",known_itemid,sep=""))
  item=c(unknown_itemid,known_itemid)
  data_all$userid=c(Userid,user)
  
  for (i in 1:nrow(data_all))
  { 
    data_temp=data[which(data$userid==data_all$userid[i]),]
    for (j in 1:length(item))
    {  if(sum(as.numeric(data_temp$itemid==item[j]))!=0)
    {data_all[i,j+1]=data_temp$rating[which(data_temp$itemid==item[j])]}
    } }
  
  data_test_x=data_all[1,c(-1,-2)]
  data_test_y=data_all[1,2]
  data_train_x=data_all[-1,c(-1,-2)]
  data_train_y=data_all[-1,2]
  
  fit=knn(data_train_x,data_test_x,cl=data_train_y,k=K)
  list("data_all:"=data_all,"True Rating:"=data_test_y,"Predict Rating:"=fit,"User ID:"=Userid,"Item ID:"=Itemid)
}
MovieLens_KNN(Userid=1,Itemid=61,n=50,K=10)
## $`data_all:`
##    userid unknown_itemid_ 61 itemid_228 itemid_156 itemid_208 itemid_243
## 1       1                  4          5          4          5          1
## 2      76                  4          0          3          0          0
## 3     305                  4          2          4          0          0
## 4     201                  2          3          4          0          0
## 5     195                  3          0          0          0          0
## 6      13                  4          4          0          5          3
## 7      60                  4          4          0          5          0
## 8     354                  5          0          0          4          0
## 9      58                  5          5          5          0          0
## 10     94                  5          4          5          4          0
## 11    452                  1          0          4          0          5
## 12    321                  5          0          0          0          0
## 13    334                  3          5          0          5          0
## 14    493                  4          0          1          4          0
## 15    387                  3          5          5          3          1
## 16     18                  4          0          0          4          0
## 17    391                  5          2          0          0          0
## 18    474                  3          0          0          3          0
## 19    296                  3          4          0          0          0
## 20    380                  4          3          0          2          0
## 21    456                  4          3          0          4          0
## 22     59                  4          4          0          5          1
## 23    144                  3          0          0          0          0
## 24    498                  4          2          5          0          0
## 25    500                  4          0          0          4          0
## 26    592                  4          0          0          0          1
## 27    449                  5          0          0          0          0
## 28    154                  4          0          0          0          0
## 29    279                  4          4          4          5          0
## 30    535                  3          0          2          0          0
## 31    585                  4          0          0          0          0
## 32    405                  1          1          0          5          0
## 33    608                  5          0          0          0          0
## 34    308                  3          0          4          4          0
## 35    189                  3          0          0          0          0
## 36    160                  4          2          0          0          0
## 37    828                  5          0          0          0          0
## 38    257                  5          0          0          0          0
## 39    385                  2          0          4          3          0
## 40    763                  5          0          0          0          0
## 41    409                  4          0          2          0          0
## 42    543                  4          0          0          0          0
## 43    712                  3          3          0          0          4
## 44    537                  4          3          0          4          1
## 45    773                  5          3          0          0          0
## 46    268                  4          4          3          4          0
## 47    645                  5          3          0          5          1
## 48    894                  4          0          0          0          0
## 49    846                  3          5          0          5          0
## 50    868                  5          5          3          3          0
## 51    883                  5          4          0          4          0
## 52    903                  4          0          5          0          0
## 53    450                  4          4          0          5          0
## 54    862                  5          5          0          2          0
## 55    655                  3          3          2          3          0
## 56    758                  3          3          0          4          0
## 57    877                  5          4          0          0          0
## 58    299                  4          3          0          4          0
## 59    639                  3          0          0          0          0
##    itemid_226 itemid_82 itemid_108 itemid_198 itemid_264 itemid_103
## 1           3         5          5          5          2          1
## 2           0         0          0          0          3          0
## 3           0         0          0          4          0          0
## 4           3         4          0          4          0          0
## 5           0         0          0          3          3          0
## 6           4         2          0          3          4          0
## 7           0         3          0          0          0          0
## 8           0         0          0          0          0          0
## 9           0         0          0          3          0          0
## 10          2         4          0          0          0          0
## 11          0         3          0          0          0          0
## 12          0         0          0          4          0          0
## 13          0         4          0          0          0          0
## 14          0         5          0          0          3          0
## 15          3         4          0          4          0          0
## 16          0         3          0          3          0          0
## 17          0         0          0          0          1          0
## 18          0         0          0          3          0          0
## 19          0         0          0          5          0          0
## 20          0         0          0          0          0          0
## 21          2         0          0          0          0          0
## 22          4         5          0          5          0          0
## 23          0         0          0          4          0          0
## 24          0         0          0          0          0          0
## 25          0         4          0          0          0          0
## 26          0         0          0          5          2          0
## 27          0         0          0          4          0          0
## 28          0         0          0          0          0          0
## 29          4         0          4          3          0          0
## 30          0         0          0          4          0          0
## 31          0         0          0          5          0          0
## 32          2         4          0          2          0          0
## 33          0         0          0          0          0          0
## 34          3         4          0          3          2          0
## 35          0         0          0          4          0          0
## 36          0         0          0          0          0          0
## 37          0         0          0          4          0          0
## 38          0         0          0          3          0          0
## 39          0         1          0          3          0          0
## 40          0         0          0          5          0          0
## 41          0         0          0          0          1          0
## 42          4         4          0          4          0          0
## 43          0         5          0          0          0          0
## 44          2         2          0          2          0          0
## 45          0         0          0          4          2          0
## 46          4         3          3          4          3          0
## 47          0         0          0          3          0          0
## 48          0         0          0          4          3          0
## 49          4         2          0          5          0          0
## 50          0         2          0          5          0          0
## 51          3         3          0          5          0          0
## 52          0         0          0          4          0          0
## 53          4         3          0          0          3          0
## 54          0         4          0          5          0          0
## 55          3         2          0          4          0          0
## 56          0         4          5          0          0          0
## 57          3         0          0          0          0          0
## 58          0         0          0          4          2          0
## 59          0         0          0          2          0          0
##    itemid_246 itemid_145 itemid_9 itemid_260 itemid_7 itemid_238
## 1           5          2        5          1        4          4
## 2           0          0        0          0        4          0
## 3           3          0        0          0        4          3
## 4           0          3        3          4        3          3
## 5           0          0        0          0        0          0
## 6           0          2        3          1        2          3
## 7           0          0        5          0        5          0
## 8           4          0        3          0        4          4
## 9           5          0        4          0        5          5
## 10          4          0        5          2        4          5
## 11          0          0        0          0        5          0
## 12          0          0        4          0        4          0
## 13          4          0        4          0        5          4
## 14          0          0        0          1        3          3
## 15          3          0        0          0        5          5
## 16          0          0        5          0        0          5
## 17          0          0        5          0        0          5
## 18          0          0        5          0        5          4
## 19          4          0        4          0        5          4
## 20          0          0        3          0        3          3
## 21          0          0        3          0        0          4
## 22          0          0        4          0        4          5
## 23          0          0        5          0        2          0
## 24          0          0        2          0        3          4
## 25          5          0        4          0        5          4
## 26          5          0        5          4        5          5
## 27          0          0        4          0        0          0
## 28          0          0        0          0        0          5
## 29          0          0        0          0        5          4
## 30          0          0        5          0        5          4
## 31          0          0        0          0        0          0
## 32          0          0        0          0        0          5
## 33          0          0        4          0        0          5
## 34          0          0        4          0        4          5
## 35          4          0        3          0        3          5
## 36          0          0        3          0        3          0
## 37          2          0        0          0        0          0
## 38          0          0        0          0        0          0
## 39          0          1        0          0        0          5
## 40          0          0        0          0        0          4
## 41          0          0        4          0        0          0
## 42          0          0        4          0        0          3
## 43          0          0        0          0        0          3
## 44          0          0        0          0        4          4
## 45          0          3        0          2        2          4
## 46          5          1        0          3        4          3
## 47          0          0        0          0        0          0
## 48          4          0        4          2        4          0
## 49          0          0        0          0        0          5
## 50          0          1        0          0        5          4
## 51          0          0        4          0        5          4
## 52          0          0        3          0        2          5
## 53          0          3        0          2        4          5
## 54          0          0        0          5        5          4
## 55          3          0        3          0        3          3
## 56          0          0        0          0        5          5
## 57          0          0        0          0        0          0
## 58          0          0        0          0        3          4
## 59          0          0        0          0        0          0
##    itemid_224 itemid_261 itemid_22 itemid_49 itemid_182 itemid_240
## 1           5          1         4         3          4          3
## 2           0          0         0         0          4          0
## 3           0          0         0         3          0          0
## 4           0          0         2         0          4          3
## 5           0          0         0         0          0          0
## 6           4          1         4         4          5          0
## 7           0          0         0         0          0          0
## 8           0          0         0         0          0          0
## 9           0          0         0         0          4          4
## 10          0          0         4         4          5          0
## 11          0          0         5         0          0          0
## 12          3          0         0         0          3          0
## 13          2          0         4         0          3          0
## 14          0          0         5         0          5          0
## 15          5          0         5         0          5          0
## 16          5          0         5         0          4          0
## 17          0          0         4         0          4          0
## 18          0          0         4         0          5          0
## 19          0          0         4         0          0          1
## 20          0          0         4         0          3          0
## 21          0          0         4         0          3          0
## 22          0          0         4         0          5          2
## 23          0          0         5         0          3          0
## 24          0          0         0         0          4          0
## 25          0          0         0         4          2          0
## 26          5          1         5         0          5          0
## 27          4          0         0         0          0          0
## 28          0          0         0         0          5          0
## 29          4          0         1         0          0          4
## 30          0          0         3         0          3          0
## 31          2          0         0         0          0          0
## 32          0          0         5         1          1          0
## 33          0          0         4         0          4          0
## 34          0          0         4         3          5          0
## 35          0          0         0         0          0          0
## 36          0          0         0         0          5          4
## 37          3          0         0         0          0          0
## 38          4          0         0         0          0          0
## 39          2          0         0         0          5          4
## 40          5          0         4         0          0          0
## 41          0          0         2         0          0          0
## 42          0          0         3         0          0          0
## 43          0          0         0         3          0          0
## 44          3          0         2         0          4          0
## 45          0          0         0         0          4          2
## 46          0          0         0         0          4          2
## 47          0          0         4         0          5          0
## 48          0          0         0         0          0          0
## 49          0          0         4         0          5          0
## 50          0          0         0         0          0          5
## 51          4          0         3         3          0          0
## 52          0          0         0         0          5          4
## 53          0          0         5         5          5          0
## 54          0          0         5         0          5          0
## 55          3          0         2         1          4          3
## 56          4          0         0         0          0          3
## 57          0          0         0         0          0          0
## 58          0          0         0         4          3          2
## 59          0          0         0         0          0          0
##    itemid_102 itemid_177 itemid_126 itemid_169 itemid_203 itemid_73
## 1           2          5          2          5          4         3
## 2           0          0          0          0          4         0
## 3           0          0          0          5          4         0
## 4           0          0          0          0          5         0
## 5           0          0          0          0          0         0
## 6           0          5          0          0          0         3
## 7           0          0          0          0          0         4
## 8           0          0          0          3          0         0
## 9           0          0          0          4          5         0
## 10          3          5          0          0          5         0
## 11          2          0          0          0          3         3
## 12          0          0          0          0          0         0
## 13          0          0          0          4          4         3
## 14          0          0          0          0          0         0
## 15          3          0          0          5          4         0
## 16          0          3          5          5          0         0
## 17          0          4          0          0          4         0
## 18          0          0          4          0          5         3
## 19          0          0          0          0          0         0
## 20          0          3          0          0          0         0
## 21          0          4          0          0          0         0
## 22          2          4          5          4          4         4
## 23          0          0          4          0          0         3
## 24          0          0          0          0          5         0
## 25          0          0          0          0          0         0
## 26          0          0          0          5          5         0
## 27          0          0          0          0          0         0
## 28          0          0          0          0          0         0
## 29          0          0          0          5          2         4
## 30          0          0          0          0          3         0
## 31          0          0          0          0          0         0
## 32          1          1          0          1          1         5
## 33          0          0          1          0          0         0
## 34          0          5          0          5          5         3
## 35          0          0          0          0          3         0
## 36          0          0          3          4          0         0
## 37          0          0          0          0          0         0
## 38          0          0          0          0          0         0
## 39          0          4          0          5          0         0
## 40          0          0          0          0          0         3
## 41          0          0          0          0          5         0
## 42          4          4          0          4          0         0
## 43          4          2          0          0          0         5
## 44          1          3          0          0          4         0
## 45          0          0          0          5          0         0
## 46          0          0          0          5          5         3
## 47          0          4          0          0          4         3
## 48          0          0          3          0          0         0
## 49          2          3          0          0          5         4
## 50          0          0          0          5          0         1
## 51          0          0          0          0          0         0
## 52          0          4          0          0          4         0
## 53          4          4          5          5          4         3
## 54          0          4          0          0          4         0
## 55          0          0          2          0          3         0
## 56          0          5          0          0          5         0
## 57          0          0          0          0          4         0
## 58          0          0          0          4          0         2
## 59          0          0          0          0          0         0
##    itemid_235 itemid_212 itemid_140 itemid_253 itemid_220 itemid_176
## 1           5          4          1          5          3          5
## 2           0          0          0          0          0          0
## 3           0          3          0          0          0          4
## 4           0          4          0          0          0          4
## 5           3          0          0          0          0          0
## 6           2          5          0          0          0          3
## 7           0          5          0          0          0          4
## 8           0          0          0          0          0          0
## 9           0          0          0          0          0          4
## 10          4          0          0          0          0          4
## 11          0          2          0          0          0          0
## 12          0          3          0          0          0          0
## 13          3          0          0          0          3          3
## 14          2          0          0          0          0          5
## 15          0          0          0          0          0          3
## 16          0          5          0          0          0          0
## 17          0          0          0          0          0          3
## 18          0          4          0          0          0          5
## 19          0          0          0          0          0          0
## 20          0          0          0          0          0          3
## 21          0          0          0          0          0          0
## 22          1          4          1          0          2          5
## 23          1          5          0          0          0          4
## 24          0          3          0          0          0          2
## 25          5          0          0          0          0          0
## 26          3          0          3          1          0          5
## 27          0          5          0          0          0          0
## 28          0          0          0          0          0          0
## 29          3          0          0          0          0          3
## 30          0          4          0          0          0          0
## 31          0          5          0          0          0          0
## 32          0          1          3          0          0          1
## 33          0          0          0          0          0          0
## 34          3          0          0          0          0          4
## 35          0          0          0          4          0          4
## 36          0          0          0          0          0          0
## 37          0          0          0          0          0          0
## 38          0          0          0          0          0          0
## 39          5          0          0          3          0          2
## 40          0          4          0          0          0          4
## 41          0          0          0          0          0          0
## 42          0          4          0          0          0          4
## 43          0          0          4          0          5          0
## 44          1          3          2          0          0          2
## 45          4          2          0          0          0          4
## 46          3          0          0          0          0          5
## 47          0          4          0          0          0          0
## 48          0          5          0          0          0          0
## 49          0          5          4          0          0          4
## 50          0          0          0          0          0          4
## 51          0          5          0          0          0          4
## 52          0          0          0          0          0          0
## 53          3          0          3          0          4          4
## 54          0          0          0          0          0          5
## 55          0          3          0          0          2          2
## 56          5          4          0          5          0          5
## 57          0          0          0          0          0          5
## 58          1          4          0          0          0          4
## 59          0          4          0          0          0          0
##    itemid_193 itemid_105 itemid_206 itemid_241 itemid_96 itemid_18
## 1           4          2          4          4         5         4
## 2           0          0          0          0         5         0
## 3           0          0          0          0         3         0
## 4           3          0          2          2         4         0
## 5           0          0          0          0         0         0
## 6           5          0          0          3         4         0
## 7           0          0          0          0         4         0
## 8           3          0          0          3         0         0
## 9           3          0          0          0         0         0
## 10          5          0          4          4         3         0
## 11          0          0          0          0         2         0
## 12          3          0          0          0         0         0
## 13          4          0          0          0         0         0
## 14          0          0          0          0         4         0
## 15          5          0          4          1         4         0
## 16          5          0          0          3         0         0
## 17          0          0          0          0         3         0
## 18          4          0          0          0         4         0
## 19          0          0          0          0         5         0
## 20          0          0          0          2         0         0
## 21          0          0          0          0         0         0
## 22          4          0          0          4         5         4
## 23          4          2          0          0         5         0
## 24          0          0          0          0         0         0
## 25          0          0          0          0         0         0
## 26          5          0          0          0         5         0
## 27          0          1          0          0         0         0
## 28          0          0          0          0         0         0
## 29          2          4          0          0         4         0
## 30          4          0          0          0         0         0
## 31          0          0          0          0         0         2
## 32          4          0          1          1         3         0
## 33          4          0          0          0         0         0
## 34          3          0          0          4         4         0
## 35          0          2          0          3         5         0
## 36          0          0          0          0         0         0
## 37          0          0          0          0         0         0
## 38          0          0          0          0         0         0
## 39          0          0          0          0         0         5
## 40          0          0          0          0         2         0
## 41          0          0          4          0         0         0
## 42          0          0          0          0         4         0
## 43          0          0          0          0         5         0
## 44          4          0          1          3         3         0
## 45          0          0          0          0         2         0
## 46          0          2          3          3         5         0
## 47          0          0          0          0         3         0
## 48          0          0          0          0         0         0
## 49          5          0          0          4         4         0
## 50          2          0          5          0         2         0
## 51          0          0          0          4         4         0
## 52          0          3          0          0         2         0
## 53          5          0          0          4         4         0
## 54          4          3          0          0         4         0
## 55          3          0          0          0         3         3
## 56          0          2          0          3         5         0
## 57          0          0          0          4         0         0
## 58          0          0          0          3         0         0
## 59          3          0          0          0         0         0
##    itemid_134 itemid_139 itemid_249 itemid_157 itemid_91 itemid_146
## 1           4          3          4          4         5          4
## 2           0          0          0          0         0          0
## 3           5          0          3          0         2          0
## 4           4          0          0          4         0          1
## 5           5          0          0          0         0          0
## 6           0          0          0          3         2          0
## 7           4          0          0          0         0          0
## 8           4          0          0          0         0          0
## 9           5          0          4          0         0          0
## 10          5          0          0          5         5          0
## 11          3          0          0          0         0          0
## 12          3          0          0          0         0          0
## 13          5          0          0          0         4          0
## 14          3          0          4          0         3          0
## 15          0          0          0          0         4          0
## 16          5          0          0          3         3          0
## 17          4          0          0          0         0          0
## 18          4          0          0          0         0          0
## 19          5          0          0          0         0          0
## 20          3          1          0          0         0          0
## 21          0          0          0          0         2          0
## 22          5          0          0          0         4          0
## 23          0          0          0          0         2          0
## 24          3          0          0          0         0          0
## 25          5          0          3          0         0          0
## 26          5          0          4          5         0          0
## 27          0          0          0          0         0          0
## 28          0          0          0          0         0          0
## 29          0          3          3          0         0          1
## 30          5          0          0          0         0          0
## 31          0          0          0          0         0          0
## 32          0          3          0          0         2          0
## 33          3          0          0          1         0          0
## 34          5          3          0          5         4          0
## 35          5          0          0          4         3          0
## 36          0          0          0          5         0          0
## 37          0          0          0          0         0          0
## 38          0          0          0          0         0          0
## 39          5          0          2          0         0          0
## 40          0          0          0          4         0          0
## 41          5          0          0          0         0          0
## 42          5          0          2          3         0          0
## 43          0          0          0          0         0          0
## 44          5          0          0          0         2          0
## 45          0          0          0          0         4          0
## 46          5          2          4          0         3          0
## 47          5          0          0          0         3          0
## 48          4          0          3          0         0          0
## 49          4          2          0          0         4          0
## 50          0          1          0          0         3          0
## 51          5          0          0          0         0          0
## 52          0          0          0          4         5          0
## 53          3          5          0          3         4          0
## 54          0          0          0          0         5          0
## 55          4          0          3          3         0          0
## 56          5          4          4          0         4          0
## 57          0          0          0          0         0          0
## 58          4          0          3          0         4          0
## 59          0          0          0          0         0          0
##    itemid_142 itemid_218 itemid_242 itemid_180
## 1           2          3          5          3
## 2           0          0          0          0
## 3           0          0          5          4
## 4           0          4          4          3
## 5           0          0          4          0
## 6           0          1          2          5
## 7           0          4          0          4
## 8           0          0          5          3
## 9           0          0          0          0
## 10          3          3          0          5
## 11          0          0          0          4
## 12          0          0          0          4
## 13          3          3          0          0
## 14          0          0          0          4
## 15          0          3          0          4
## 16          4          0          5          4
## 17          0          0          0          5
## 18          0          4          0          5
## 19          0          0          4          5
## 20          0          0          0          2
## 21          0          4          0          4
## 22          1          5          0          4
## 23          0          0          4          4
## 24          0          3          0          4
## 25          0          0          3          0
## 26          0          0          5          5
## 27          0          0          0          0
## 28          0          0          3          0
## 29          0          0          3          2
## 30          0          0          0          4
## 31          0          0          0          0
## 32          1          5          0          3
## 33          0          4          0          0
## 34          0          5          0          5
## 35          0          0          0          5
## 36          0          4          0          0
## 37          0          0          0          0
## 38          0          0          0          0
## 39          0          2          0          4
## 40          0          0          0          0
## 41          0          0          0          5
## 42          0          3          0          4
## 43          4          0          0          0
## 44          0          0          3          4
## 45          0          2          0          0
## 46          0          2          0          3
## 47          0          0          0          4
## 48          0          0          4          0
## 49          3          4          0          5
## 50          1          3          0          4
## 51          0          0          0          0
## 52          0          0          0          5
## 53          5          4          0          4
## 54          0          0          0          5
## 55          0          3          4          0
## 56          0          4          3          0
## 57          0          0          0          0
## 58          0          0          0          0
## 59          0          0          4          0
## 
## $`True Rating:`
## [1] 4
## 
## $`Predict Rating:`
## [1] 3
## Levels: 1 2 3 4 5
## 
## $`User ID:`
## [1] 1
## 
## $`Item ID:`
## [1] 61

[Part 2].20部電影的推薦數

2-1.如果是User1,你會推薦他的前五名電影是什麼

user1=NULL
for(Item in 1:20) 
user1=c(user1,MovieLens_KNN(Userid=1,Itemid=Item,n=50,K=10)$`True Rating:`)
## Warning in knn(data_train_x, data_test_x, cl = data_train_y, k = K): k = 10
## exceeds number 9 of patterns
user1 #我們預測user1 對這20部電影的評分
##  [1] 5 3 4 3 3 5 4 1 5 3 2 5 5 5 5 5 3 4 5 4
which(user1==5) #顯示評分為五分的ID
## [1]  1  6  9 12 13 14 15 16 19

這9部電影分別是