3

嘿,我正在嘗試學習一些在Amazon.com等網站中使用的推薦算法。所以我有這個簡單的java(春季休眠postgres)書店應用程序,在書中有屬性標題,類別,標籤,作者。爲了簡單起見,書中沒有內容。一本書必須以其標題,類別,作者和標籤來標識。對於登錄到應用程序的每個用戶,我應該能夠推薦一些書籍。每個用戶都可以查看圖書,將其添加到購物車並隨時購買。因此,在數據庫中,我存儲了每個用戶看過一本書的次數,購物車中的書以及用戶購買的書。目前沒有評分選項,但可以添加。針對書店應用的推薦系統

那麼有人能告訴我哪些算法可以用來演示每位用戶的書籍推薦嗎?我想保持它非常簡單。它不是一個銷售項目,而只是爲了擴展我對推薦算法的知識。所以假設總共只有約30本書(每本書5個類別和6本書)。如果有人也可以告訴我應該使用什麼屬性來計算兩個用戶之間的相似度,以及如何使用推薦的算法來處理它,這將非常有幫助。

在此先感謝。 5-羥色胺相。

回答

1

作爲一個具體的具體例子,一個選項是「最近的K鄰居」算法。

爲了簡化事情,假設您只有10本書,並且您只跟蹤每個用戶查看每本書的次數。然後,對於每個用戶,您可能有一個數組int timesViewed[10],其中值timesViewed[i]是用戶查看書號i的次數。

然後,您可以使用相關函數將用戶與所有其他用戶進行比較,例如Pearson correlation。計算當前用戶c與另一用戶o之間的關聯給出的值介於-1.0和1.0之間,其中-1.0表示「此用戶c與其他用戶o完全相反」,1.0表示「此用戶c是相同的作爲其他用戶o「。

如果您計算c與其他每個用戶之間的核心關係,則會得到用戶的查看模式與其他用戶的查看模式相似程度的結果列表。然後,您選擇K(例如5,10,20)最相似的結果(因此爲算法的名稱),即K用戶的相關性得分最接近1.0。

現在,您可以對這些用戶的每個timesViewed陣列進行加權平均。例如,我們會說averageTimesViewed[0]是K個用戶中每個用戶的timesViewed[0]的平均值,用它們的相關性得分加權。然後相互做相同的averageTimesViewed[i]

現在你有一個數組averageTimesViewed,它大體上包含了具有與c最相似的查看模式的K個用戶查看每本書的平均次數。推薦具有最高averageTimesViewed得分的圖書,因爲這是其他用戶表現出最感興趣的圖書。

它通常也值得排除用戶已經從推薦閱讀過的圖書,但它仍然很重要計算相似性/相關性時考慮到這些因素。

另外請注意,這可以被擴展平凡採取其他數據考慮在內(例如購物車列表等)。此外,您還可以如果你想選擇所有用戶(即K =用戶數),但是,這並不總是產生有意義的結果,通常選擇一個合理的小K就足夠了良好的效果,並快速計算。

+0

謝謝。讓我想想你說的話,看看如何實現它。如果我被困在某個地方,我會盡快回復你。再次感謝。 – SerotoninChase 2011-02-26 02:48:06

+0

@SerotoninChase:不是問題。如果有什麼事那裏,不完全凝膠,或者其他任何你需要讓你的算法運行起來,只是讓我知道... :) – Mac 2011-02-26 02:49:55

1

讀「集體智慧編程」建議。它會給你一個嚐嚐,還有更多。

1

你這裏有自由的一個巨大的量。彌補兩個用戶之間的相似程度,然後製作一個單調的函數,將類似用戶對書籍的評分作爲輸入,併爲每本書返回分數。標準解決方案是使用矩陣乘法。

+1

謝謝您的回答,老子。此問題已關閉。我得到了我的答案。我又做了一些精彩的實驗與相似之處,建議和協同過濾:) – SerotoninChase 2011-03-14 05:19:03

+0

啊,我的錯誤。謹慎與我們分享您的勞動成果,以及與誰共同分享這個問題? – isomorphismes 2011-03-14 05:25:22