2016-07-28 44 views
1

我在嘗試建立一個實驗來創建推薦(使用電影評級樣本數據庫),但不使用評分。我只是認爲,如果用戶對某些電影進行了評級,那麼他會對其他已經評價了他的電影的用戶評價過的電影感興趣。無評級的推薦(Azure ML)

例如,我可以考慮評級爲1(存在於數據庫中)或0(不存在),但在這種情況下,我如何轉換初始數據以反映這一點?

我找不到任何有關這種情況的示例或教程,我真的不知道如何繼續。在將數據注入算法之前,我應該轉換數據嗎?和/或有什麼特定的算法,我應該使用?

+0

「轉換初始數據」是什麼意思?對於一個簡單的實驗來說,評分的二元表示就足夠了(一個很好的評分)。從那裏你可以看到一個簡單的協作過濾實現。 – carrdelling

+0

我的困惑更多的是關於如何將數值與不存在的數據關聯起來,因爲數據庫中的所有評級都將爲「1」,因爲評級爲「0」的唯一方法就是不要存在於數據中... –

+0

您可以將值存儲在稀疏矩陣(用戶X電影)中。這樣你不需要表示0的 – carrdelling

回答

1

如果您希望在AML中使用Matchbox Recommender,那麼您需要確定一些不存在於原始數據集中的用戶 - 電影對,並將它們添加到評級爲零。 (我假設你已經設置了所有真實的用戶電影對,評分爲1,如上所述)。

我會建議生成一些隨機候選對並確認他們缺席訓練執行R(或Python)腳本模塊中的數據。我不知道你的數據集的功能的名稱,但這裏是一些僞R中做到這一點:

library(dplyr) 
df <- maml.mapInputPort(1) # input dataset of observed user-movie pairs 
all_movies <- unique(df[['movie']]) 
all_users <- unique(df[['user']]) 
n <- 30 # number of random pairs to start with 

negative_observations <- data.frame(movie = sample(all_movies, n, replace=TRUE), 
            user = sample(all_users, n, replace=TRUE), 
            rating = rep(0, n))   
acceptable_negative_observations <- anti_join(unique(negative_observations), df, by=c('movie', 'user')) 
df <- rbind(df, acceptable_negative_observations) 
maml.mapOutputPort("df"); 

或者,你可以嘗試像association rule learning的方法,它不要求你在假零添加收視率。 Martin Machac在Cortana Intelligence Gallery中發佈瞭如何在R/AML中執行此操作的nice example

+0

但是,如果所有組合都不存在數據,那麼默認行爲是什麼? Azure ML只是固定rating = 1,就是這樣..,沒有什麼可以計算和添加到行數據集(評級= 0) –