1. 推薦系統:recommenderlab包總體思路 recommenderlab包提供了一個能夠用評分數據和0-1數據來發展和測試推薦算法的框架。 它提供了幾種基礎算法,並可利用註冊機制容許用戶使用本身的算法 recommender包的數據類型採用S4類構造。 (1)評分矩陣數據接口:使用抽象的raringMatrix爲評分數據提供接口。raringMatrix採用了不少相似矩陣對象的操做,如 dim(),dimnames() ,rowCounts() ,colMeans() ,rowMeans(),colSums(),rowMeans();也增長了一些特別的操做方法,如sample(),用於從用戶(即,行)中抽樣,image()能夠生成像素圖。raringMatrix的兩種具體運用是realRatingMatrix和binaryRatingMatrix,分別對應評分矩陣的不一樣狀況。其中realRatingMatrix使用的是真實值的評分矩陣,存儲在由Matrix包定義的稀疏矩陣(spare matrix)格式中;binaryRatingMatrix使用的是0-1評分矩陣,存儲在由arule包定義的itemMatrix中。 (2)存儲推薦模型並基於模型進行推薦。類Recommender使用數據結構來存儲推薦模型。建立方法是:Rencommender(data=ratingMatrix,method,parameter=NULL),返回一個Rencommender對象object,能夠用來作top-N推薦的預測: predict(object,newdata,n,type=c('topNlist,ratings'),…) (3)使用者能夠利用registry包提供的註冊機制自定義本身的推薦算法。註冊機制調用recommenderRegistry並存貯推薦算法的名字和簡短描述。 (4)評價推薦算法的表現:recommender包提供了evaluationScheme類的對象用於建立並保存評價計劃。建立函數以下: evaluatiomScheme(data,method,train,k,given) 這裏的方法能夠採用簡單劃分、自助法抽樣、k-折交叉驗證等。接下來能夠使用函數evalute()使用評價計劃的多個評價算法的表現。 2.實例分析 library(recommenderlab) library(ggplot2) ##數據處理與數據探索性分析 data(MovieLense) image(MovieLense) # 獲取評分 ratings.movie <- data.frame(ratings = getRatings(MovieLense)) summary(ratings.movie$ratings) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1.00 3.00 4.00 3.53 4.00 5.00 ggplot(ratings.movie, aes(x = ratings)) + geom_histogram(fill = "beige", color = "black", binwidth = 1, alpha = 0.7) + xlab("rating") + ylab("count") # 標準化 ratings.movie1 <- data.frame(ratings = getRatings(normalize(MovieLense, method = "Z-score"))) summary(ratings.movie1$ratings) ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## -4.850 -0.647 0.108 0.000 0.751 4.130 ggplot(ratings.movie1, aes(x = ratings)) + geom_histogram(fill = "beige", color = "black", alpha = 0.7) + xlab("rating") + ylab("count") # 用戶的電影點評數 movie.count <- data.frame(count = rowCounts(MovieLense)) ggplot(movie.count, aes(x = count)) + geom_histogram(fill = "beige", color = "black", alpha = 0.7) + xlab("counts of users") + ylab("counts of movies rated") rating.mean <- data.frame(rating = colMeans(MovieLense)) ggplot(rating.mean, aes(x = rating)) + geom_histogram(fill = "beige", color = "black", alpha = 0.7) + xlab("rating") + ylab("counts of movies ") ##推薦算法的狀況 # 先看能夠使用的方法 recommenderRegistry$get_entries(dataType = "realRatingMatrix") #對於realRatingMatrix有六種方法:IBCF(基於物品的推薦)、UBCF(基於用戶的推薦)、SVD(矩陣因子化)、PCA(主成分分析)、 RANDOM(隨機推薦)、POPULAR(基於流行度的推薦) #利用前940位用戶創建推薦模型 m.recomm <- Recommender(MovieLense[1:940], method = "IBCF") m.recomm #對後三位用戶進行推薦預測,使用predict()函數,默認是topN推薦,這裏取n=3。預測後獲得的一個topNList對象,能夠把它轉化爲列表,看預測結果。 (ml.predict <- predict(m.recomm, MovieLense[941:943], n = 3)) str(ml.predict) as(ml.predict, "list")#預測結果 #代碼示例 library(recommenderlab) data(MovieLense) scheme <- evaluationScheme(MovieLense, method = "split", train = 0.9, k = 1, given = 10, goodRating = 4) algorithms <- list(popular = list(name = "POPULAR", param = list(normalize = "Z-score")), ubcf = list(name = "UBCF", param = list(normalize = "Z-score", method = "Cosine", nn = 25, minRating = 3)), ibcf = list(name = "IBCF", param = list(normalize = "Z-score"))) results <- evaluate(scheme, algorithms, n = c(1, 3, 5, 10, 15, 20)) plot(results, annotate = 1:3, legend = "topleft") #ROC plot(results, "prec/rec", annotate = 3)#precision-recall # 按照評價方案創建推薦模型 model.popular <- Recommender(getData(scheme, "train"), method = "POPULAR") model.ibcf <- Recommender(getData(scheme, "train"), method = "IBCF") model.ubcf <- Recommender(getData(scheme, "train"), method = "UBCF") # 對推薦模型進行預測 predict.popular <- predict(model.popular, getData(scheme, "known"), type = "ratings") predict.ibcf <- predict(model.ibcf, getData(scheme, "known"), type = "ratings") predict.ubcf <- predict(model.ubcf, getData(scheme, "known"), type = "ratings") # 作偏差的計算 predict.err <- rbind(calcPredictionError(predict.popular, getData(scheme, "unknown")), calcPredictionError(predict.ubcf, getData(scheme, "unknown")), calcPredictionError(predict.ibcf, getData(scheme, "unknown"))) rownames(predict.err) <- c("POPULAR, "UBCF", "IBCF") predict.err #calcPredictionError()的參數「know」和「unknow」表示對測試集的進一步劃分:「know」表示用戶已經評分的,要用來預測的items;「unknow」表示用戶已經評分,要被預測以便於進行模型評價的items。