96 R Beispiele für Empfehlungsalgorithmen

R-Sprache: Zusammenfassung und Anwendungsfall des Empfehlungslab-Pakets

1 Einführung in das Rahmenpaket

  1. Empfehlungssystem: Das Referrerlab-Paket Allgemeine Idee
    Das Recommendationerlab-Paket bietet einen Rahmen zum Entwickeln und Testen von Empfehlungsalgorithmen mit Bewertungsdaten und 0-1-Daten.
    Es bietet mehrere grundlegende Algorithmen und kann den Registrierungsmechanismus verwenden, um Benutzern die Verwendung ihrer eigenen Algorithmen zu ermöglichen.Der
    Datentyp des Empfehlungspakets wird unter Verwendung der S4-Klasse erstellt.

(1) Scoring-Matrix-Datenschnittstelle: Verwenden Sie die abstrakte RaisingMatrix, um eine Schnittstelle zum Scoring von Daten bereitzustellen.
RaringMatrix verwendet viele ähnliche Operationen wie Matrixobjekte, wie dim(), dimnames(), rowCounts(), colMeans(), rowMeans(), colSums(), rowMeans();
es fügt auch einige spezielle Operationsmethoden hinzu, wie sample (), zum Abtasten von Benutzern (d. H. Zeilen), image () zum Generieren von Pixmaps.
Die beiden spezifischen Anwendungen von raringMatrix sind realRatingMatrix und binaryRatingMatrix, die unterschiedlichen Situationen der Bewertungsmatrix entsprechen.

其中realRatingMatrix使用的是真实值的评分矩阵,存储在由Matrix包定义的稀疏矩阵(spare matrix)格式中;
 binaryRatingMatrix使用的是0-1评分矩阵,存储在由arule包定义的itemMatrix

(2) Speichern des Empfehlungsmodells und Erstellen von Empfehlungen basierend auf dem Modell. Die Klasse Recommender verwendet eine Datenstruktur, um Empfehlungsmodelle zu speichern.

 创建方法是:Rencommender(data=ratingMatrix,method,parameter=NULL),返回一个Rencommender对象object,可以用来做top-N推荐的预测:
 predict(object,newdata,n,type=c('topNlist,ratings'),…)

(3) Benutzer können den vom Registrierungspaket bereitgestellten Registrierungsmechanismus verwenden, um ihre eigenen Empfehlungsalgorithmen anzupassen.
Der Registrierungsmechanismus ruft die Empfehlungsregistrierung auf und speichert den Namen und die Kurzbeschreibung des Empfehlungsalgorithmus.

(4) Bewertung der Leistung des Empfehlungsalgorithmus: Das Empfehlungspaket stellt Objekte der Klasse „evaluationScheme“ zum Erstellen und Speichern von Evaluierungsplänen bereit.
Die Erstellungsfunktion lautet wie folgt: evaluatiomScheme(data,method,train,k,given) Die Methode kann hier einfache Division, Bootstrap-Sampling, k-fache Kreuzvalidierung usw. sein.
Als Nächstes können Sie die Funktion evalute() verwenden, um die Leistung mehrerer Bewertungsalgorithmen mithilfe des Bewertungsplans zu bewerten.

Fall Analyse

2 Datenvorschau

library(recommenderlab)
library(ggplot2)
library(reshape2)
#install.packages("reshape")
library(reshape)
Sys.setlocale(category="LC_ALL",locale="Chinese" ) #Nachdem
Sie den Projektpfad festgelegt haben, können Sie read it Geben Sie die Daten ein, achten Sie auf das Format der Daten, die erste Spalte ist die Benutzer-ID, die zweite Spalte ist die Artikel-ID, die dritte Spalte ist die Bewertung und die vierte Spalte ist der Zeitstempel.
#Timestamp ist nicht hier verwendet und kann entfernt werden.

Bildbeschreibung hier einfügen

ml100k <- read.table("u.data",header=FALSE, stringsAsFactors = T)
head(ml100k)
ml100k <-ml100k[, -4]

Sie können sich einfach die Verteilung der Bewertungen ansehen

prop.table(table(ml100k[, 3]))
summary(ml100k[, 3])
ml100k V 3 < − as . numerisch ( ml 100 k V3 <- as.numeric(ml100kV3 _<ein s . n u m e r i c ( ml 1 0 0 k V3) Zusammenfassung ( ml100k
[, 3])

Bildbeschreibung hier einfügen

3 Transformation der Datenverarbeitung

as(ml.ratingMatrix , "matrix")[1:3, 1:10]
as(ml.ratingMatrix , "list")[[1]][1:10]

Zusätzlich stellt das Recommendationerlab-Paket eine Funktion normalize zur Normalisierung zur Verfügung, voreingestellt ist die Mittelwert-Normalisierung x – Mittelwert,
die Funktion zur Erstellung des Empfehlungsmodells, die über eine Normalisierungsverarbeitung verfügt, und es ist hier nicht erforderlich, die Normalisierung separat durchzuführen.

Vor der Modellierung können Sie einen Blick auf realRatingMatrix werfen, Referrerlab bietet diese empfohlenen Technologien, es gibt insgesamt 6 Arten,
wir werden drei davon zufällig (Empfehlung basierend auf Popularität), ubcf (Empfehlung basierend auf Popularität), ibcf (basierend auf Projektzusammenarbeit) Filter)

Nehmen Sie IBCF als Beispiel, um die Bedeutung der Parameter
K kurz vorzustellen: wie viele ähnlichste Elemente zu nehmen sind, der Standardwert ist 30
Methode: Ähnlichkeitsalgorithmus, der Standardkosinus Ähnlichkeitsalgorithmus Kosinus
Normalisieren: welcher Normalisierungsalgorithmus verwendet werden soll, der Standardmittelwert Normalisierung x –mean
normalize_sim_matrix: ob die Ähnlichkeitsmatrix normalisiert werden soll, der Standardwert ist nein
alpha: Alpha-Parameterwert, der Standardwert ist 0,5
na_as_zero: ob NA als 0 genommen werden soll, der Standardwert ist nein
minRating: die Mindestpunktzahl, der Standardwert ist nicht festgelegt
Diese Parameter können zum Erstellen des Modells verwendet werden. In diesem Artikel werden die Standardparameter verwendet.

Erstellen Sie ein Empfehlungsmodell

#recommender ist eine Funktion, die verwendet wird, um ein Modell in dem Recommendationerlab-Paket zu erstellen. Die Verwendung ist recht einfach.
#Beachten Sie, dass alle Spalten der Matrix nach itemlabels benannt werden müssen, bevor der Empfehlungsdienst aufgerufen wird.

colnames(ml.ratingMatrix) <- paste("M", 1:1682, sep = "")
as(ml.ratingMatrix[1,1:10], "list")
Bildbeschreibung hier einfügen

4 Erstellen von Modellen und Vorhersagen

##【Warning】在建立推荐模型之前一定要给item按照itemLabels进行命名,否则会有如下错误
##Error in validObject(.Object) :
##  invalid class “topNList” object: invalid object for slot "itemLabels" in class "topNList": got class "NULL", should be or extend class "character"
ml.recommModel <- Recommender(ml.ratingMatrix[1:30], method = "IBCF")
ml.recommModel
#Recommender of type ‘POPULAR’ for ‘realRatingMatrix’
#learned using 800 users.
#模型建立以后,可以用来进行预测和推荐了,同样使用predict函数,这里分别给801-803三个用户进行推荐,
#predict函数有一个type参数,可用来设置是top-n推荐还是评分预测,默认是top-n推荐。


##TopN推荐,n = 5 表示Top5推荐
ml.predict1 <- predict(ml.recommModel, ml.ratingMatrix[801:803], n = 5)
ml.predict1

as( ml.predict1, "list")  ##显示三个用户的Top3推荐列表

Bildbeschreibung hier einfügen

5 Modellbewertung

##用户对item的评分预测
 ml.predict2 <- predict(ml.recommModel, ml.ratingMatrix[801:803], type = "ratings")
 ml.predict2
 as(ml.predict2, "matrix")[1:3, 1:6]   ##查看三个用于对M1-6的预测评分

#模型的评估
#本文只考虑评分预测模型的评估,对于Top-N推荐模型请查看后面的参考资料,对于评分预测模型的评估,最经典的参数是RMSE(均平方根误差)


rmse <- function(actuals, predicts)
{
  sqrt(mean((actuals - predicts)^2, na.rm = T))
}
#幸运的是,recommenderlab包有提供专门的评估方案,对应的函数是evaluationScheme,
#能够设置采用n-fold交叉验证还是简单的training/train分开验证,本文采用后一种方法,
#即将数据集简单分为training和test,在training训练模型,然后在test上评估。


model.eval <- evaluationScheme(ml.ratingMatrix[1:943], method = "split", train = 0.9, given = 15, goodRating = 5)
model.eval
##分别用RANDOM、UBCF、IBCF建立预测模型
model.random <- Recommender(getData(model.eval, "train"), method = "RANDOM")
model.ubcf <- Recommender(getData(model.eval, "train"), method = "UBCF")
model.ibcf <- Recommender(getData(model.eval, "train"), method = "IBCF")
##分别根据每个模型预测评分
predict.random <- predict(model.random, getData(model.eval, "known"), type = "ratings")
predict.ubcf <- predict(model.ubcf, getData(model.eval, "known"), type = "ratings")
predict.ibcf <- predict(model.ibcf, getData(model.eval, "known"), type = "ratings")
#这里简单介绍,数据集是如何划分的,其实很简单,对于用户没有评分过的items,是没法进行模型评估的,因为预测值没有参照对象。
#getData的参数given便是来设置用于预测的items数量。

#接下来计算RMSE,对比三个模型的评估参数,calcPredictionError函数可以计算出MAE(绝对值均方误差)、MSE和RMSE。


error <- rbind(
  calcPredictionAccuracy(predict.random, getData(model.eval, "unknown")),
  calcPredictionAccuracy(predict.ubcf, getData(model.eval, "unknown")),
  calcPredictionAccuracy(predict.ibcf, getData(model.eval, "unknown")))
rownames(error) <- c("RANDOM", "UBCF", "IBCF")
error

Bildbeschreibung hier einfügen

6 SVD-Vergleich

SVD-Vergleich

model.svd <- Recommender(getData(model.eval, „train“), method = „SVD“)
Vorhersage.svd <- Vorhersage(model.svd, getData(model.eval, „known“), type = „ratings “)
calcPredictionAccuracy(predict.svd, getData(model.eval, „unknown“))

Vergleich der empfohlenen Ergebnisse

##Modelle für jeweils 1-100 Benutzer erstellen

ml.recommModel_IBCF <- Recommender(ml.ratingMatrix[1:100], method = „IBCF“)
ml.recommModel_UBCF <- Recommender(ml.ratingMatrix[1:100], method = „UBCF“)
ml.recommModel_svd <- Recommender (ml.ratingMatrix[1:100], Methode = „SVD“)

Machen Sie Vorhersagen für 801-803

Vorhersage_IBCF <- Vorhersage(ml.recommModel_IBCF,ml.ratingMatrix[801:803], n = 5)
Vorhersage_UBCF <- Vorhersage(ml.recommModel_UBCF,ml.ratingMatrix[801:803], n = 5)
Vorhersage_svd <- Vorhersage(ml .recommModel_svd,ml.ratingMatrix[801:803], n = 5)

as(predict_IBCF,„list“)
as(predict_UBCF,„list“)
as(predict_svd,„list“)

Ergebnis auswerten

evl.IBCF <- auswerten(model.eval,method="IBCF",n=c(1,3,5,10,15,20))
evl.IBCF

getConfusionMatrix(evl.IBCF)

model.eval1 <- evaluationScheme(ml.ratingMatrix, method=“cross“,k=4,given=15,goodRating=5 )
evl.IBCF <- evaluieren(model.eval1,method=“IBCF“,n=c( 1,3,5,10,15,20))

getConfusionMatrix(evl.IBCF) avg
(evl.IBCF)

plot(evl.IBCF,annotate=TRUE)
plot(evl.IBCF,“prec/rec“,annotate=TRUE)

Bildbeschreibung hier einfügen

Aggregat

zusammen <- list(
„Random“ = list(name=“RANDOM“,param=NULL),
„IBCF“ = list(name=“IBCF“),
„UBCF“ = list(name=“UBCF“),
„SVD ” = list(name=“SVD”)

)

Ergebnis <- auswerten (model.eval,zusammen,n=c(1,3,5,10,15,20))

plot(result,annotate=TRUE,legend=„topleft“)
plot(result,„prec/rec“,annotate=TRUE,legend=„topleft“)

Bildbeschreibung hier einfügen

Ich denke du magst

Origin blog.csdn.net/weixin_44498127/article/details/124444452
Empfohlen
Rangfolge