1

我现在正在学习 R,现在正在做关于电影推荐算法的项目。我在推荐实验室库中使用了 movielense 100k 数据,并使用了这些教程。 https://mitxpro.mit.edu/asset-v1%3AMITProfessionalX+DSx+2017_T1+type@asset+block@Module4_CS1_Movies.pdf https://cran.r-project.org/web/packages/recommenderlab/vignettes/recommenderlab .pdf

我现在计算了稀疏性,并将数据拆分为训练数据和测试数据。我想制作人气推荐代码。我的代码在这里:

install.packages("SnowballC")
install.packages("class")
install.packages("dbscan")
install.packages("proxy")
install.packages("recommenderlab")
install.packages("dplyr")
install.packages("tm")
install.packages("reshape2")

library(recommenderlab)
library(dplyr) 
library(tm)
library(SnowballC)
library(class)
library(dbscan)
library(proxy)
library(reshape2)

#read data
data<- read.table('C:/Users/ginny/OneDrive/Documents/2018_1/dataanalytics/실습3/ml-100k/u.data')

#####raw data to matrix#####
data.frame2matrix = function(data, rowtitle, coltitle, datatitle, 
                         rowdecreasing = FALSE, coldecreasing = FALSE,
                         default_value = NA) {

# check, whether titles exist as columns names in the data.frame data
if ( (!(rowtitle%in%names(data))) 
     || (!(coltitle%in%names(data))) 
     || (!(datatitle%in%names(data))) ) {
  stop('data.frame2matrix: bad row-, col-, or datatitle.')
}

# get number of rows in data
ndata = dim(data)[1]

# extract rownames and colnames for the matrix from the data.frame
rownames = sort(unique(data[[rowtitle]]), decreasing = rowdecreasing)
nrows = length(rownames)
colnames = sort(unique(data[[coltitle]]), decreasing = coldecreasing)
ncols = length(colnames)

# initialize the matrix
out_matrix = matrix(NA, 
                    nrow = nrows, ncol = ncols,
                    dimnames=list(rownames, colnames))

# iterate rows of data
for (i1 in 1:ndata) {
  # get matrix-row and matrix-column indices for the current data-row
  iR = which(rownames==data[[rowtitle]][i1])
  iC = which(colnames==data[[coltitle]][i1])

  # throw an error if the matrix entry (iR,iC) is already filled.
  if (!is.na(out_matrix[iR, iC])) stop('data.frame2matrix: double entry in data.frame')
out_matrix[iR, iC] = data[[datatitle]][i1]
 }

# set empty matrix entries to the default value
out_matrix[is.na(out_matrix)] = default_value

 # return matrix
return(out_matrix)

}

#data 열 별로 이름 지정('' 안은 필요에 따라 변경 가능)
colnames(data)<-c('user_id','item_id','rating','timestamp')

#raw 데이터를 matrix로 변환
pre_data = data.frame2matrix(data, 'user_id', 'item_id', 'rating')

#matrix를 realratingmatrix로 변환
target_data<- as(as(pre_data, "matrix"), "realRatingMatrix")
data=data[,-which(names(data) %in% c("timestamp"))]
data
str(data)
summary(data)
hist(data$rating)
write.csv(data,"C:/Users/ginny/OneDrive/Documents/2018_1/dataanalytics/실습 
3/u.csv")
Number_Ratings=nrow(data)
Number_Ratings
Number_Movies=length(unique(data$item_id))
Number_Movies
Number_Users=length(unique(data$user_id))
Number_Users
data1=data[data$user_id %in% names(table(data$user_id)) 
[table(data$user_id)>50],]
Number_Ratings1=nrow(data1)
Number_Movies1=length(unique(data1$item_id))
Number_Users1=length(unique(data1$user_id))
sparsity=((Number_Ratings1)*3*5*100)/((Number_Movies1)*(Number_Users1))
sparsity

install.packages("caTools")
library(caTools)
set.seed(10)
sample=sample.split(data1$rating, SplitRatio=0.75)
train=subset(data1, sample==TRUE)
test=subset(data1, sample==FALSE)
data2<-as.data.frame(data1)
data2

#matrix to realratingmatrix
target_data2<- as(as(pre_data2, "matrix"), "realRatingMatrix")
recommender_models<-recommenderRegistry$get_entry(dataType = 
"realRatingMatrix")
recomm_model <- Recommender(data2$rating, method = "POPULAR")

我使用了data2 realRatingMatrix,但是当我运行最后一行时,会发生这样的错误:

(函数(类,fdef,mtable)中的错误:无法找到签名“整数”的函数“推荐者”的继承方法</p>

有人可以帮我看看有什么问题吗?

4

0 回答 0