2015-11-23 64 views
2

我有一個包含129539行和530列的矩陣。第一列對應於客戶ID和產品品牌的第一行。在內部,我有一個每個ClientID對每個產品品牌都有的排名索引(如果ClientID從未購買該產品,則爲0,否則一直到10)。在R中構建基於用戶的協作過濾推薦系統

我在R中構建了一個基於用戶的協作過濾推薦系統,使用前5000行進行培訓,它給了我一個輸出,對我來說沒有意義。

我具有產生它的代碼是下面的:

# Loading to pre-computed affinity data
affinity.data <-read.csv("mydirectory")
affinity.matrix <- as(affinity.data,"realRatingMatrix")

# Creation of the model - U(ser) B(ased) C(ollaborative) F(iltering)
Rec.model <- Recommender(Rank_dataframe[1:5000,],method="UBCF", param=list(normalize = "Z-score",method="Cosine",nn=5, minRating=0))

# recommended top 5 items for user 1507323
recommended.items.1507323 <- predict(Rec.model, affinity.matrix["1507323",], n=5) # to display them
as(recommended.items.1507323, "list")

我得到的輸出值,如列表:
[[1]] [1] "0.0061652281134402" "0.00661813368630046" "0.0119331742243437" "0.0136147038801906" [5] "0.0138312586445367"

我期待的品牌,我想建議的名字,而不是一個數字列表。 PS:我的原始矩陣的值從0到10(包含小數,不僅是整數)

非常感謝您的幫助或澄清。

回答

0

這裏有幾個問題:首先,predict()函數將爲您選擇的用戶返回每個項目的預測評級。如果您想推薦前N個列表,則必須預測該用戶的每個項目的評分,然後對評分進行排序並返回前N個。其次,推薦系統通常使用NULL或NA或丟失當用戶和項目從未互動時的數據。你用這個0。這意味着預測將嚴重傾向於0(因爲大多數用戶不會與大多數項目交互),並且您的預測實際上是在說出用戶甚至可以與項目交互的概率。這可能是一個功能或錯誤,具體取決於您的使用情況。但是,如果您的評分1-10代表偏好,而0代表已使用/未使用的二進制,則表示混合信息,您應該將NA替換爲0。