本文是程序員數據挖掘實用指南的每周摘要。主要包括以下內容:
所謂推薦系統,就是系統根據妳的行為推薦妳可能想要的其他物品。這在電商平臺、音樂平臺、信息推送平臺都很常見。協同過濾簡單來說就是利用壹個興趣相似、體驗相同的群體的偏好來推薦用戶感興趣的信息。個體通過合作機制給予信息相當程度的回應(如評級)並記錄下來達到過濾的目的再幫助他人過濾信息。它的推薦是基於用戶評級的。用戶評分有兩種,即顯性評分和隱性評分。顯性評分是指每天對物品的評分,比如給喜歡的音樂評分;隱性評分是壹種通過對用戶行為的持續觀察來發現用戶偏好的方法,比如推送妳在新聞網頁中經常閱讀的相關內容。兩種分級方法都有各自的問題。
壹般來說,協同過濾的運行機制也可以分為兩種類型:
基於用戶的推薦是指根據用戶的行為偏好對相似用戶進行劃分。在相似的用戶群之間推送壹方喜歡而另壹方不喜歡的物品。核心在於相似用戶群的劃分。這種推薦方法有其自身的局限性:
基於用戶過濾的核心是用戶群的劃分,其實就是分類。
這裏有三種距離函數:曼哈頓距離和歐幾裏德距離。這裏以二維為例,更多的維度以此類推。
雙距離函數可以概括為:
其中,當r=1時,函數為曼哈頓距離;當r=2時,函數是歐氏距離。
算法實現:
計算距離函數後,通過比較目標用戶與所有用戶組的偏好,找到最近的用戶並進行推薦。
基於用戶距離的推薦有壹個很明顯的問題,就是用戶評分體系的差異。比如極端評分的用戶給喜歡的人最高分,給不喜歡的人最低分;而且有些用戶往往不會有極端的分數。所謂“等級貶值”問題。這個問題的存在,可能會讓基於距離的評分出現偏差。皮爾遜相關系數可以緩解這個問題。
在實際使用原有的皮爾遜相關系數公式時,會有多次叠代,影響計算效率。這裏有壹個近似的公式:
用戶對皮爾遜相關系數的判斷依據不是簡單的用戶距離,而是用戶的評分壹致性:取值在[-1,1]之間,越接近1,兩個用戶的評分壹致性越好;反其道而行之。
Python實現:
在基於用戶的推薦過程中,另壹個問題是存在大量計算值為0的特征,因為大多數人喜歡的項目交集太少。所謂稀疏性問題。壹個很好理解的例子就是書籍內容的挖掘。余弦相似性忽略了這個0-0匹配。
余弦相似度:
Python實現:
這麽多評價系數,如何取舍?根據數據特征:
另壹點值得考慮的是,到目前為止的推薦都是基於單個用戶的。也就是說,針對壹個用戶的推薦系統只是基於另壹個用戶。會有壹些問題。比如兩人雖然相似度高,但是對方有壹些怪癖,怪癖推薦不合理;再比如,在相似度高的情況下,妳無法確定統壹賬號下的操作是同壹個人做的或者操作行為是針對用戶本人的。比如壹個用戶考慮購買壹個產品作為禮物送給別人,這是基於別人喜好的購買行為,這個推薦也是不合適的。
這個問題的解決可以用分組的方法。原理類似於單個用戶,但是用戶的匹配度是k,在k個最佳匹配用戶中,基於相似度設置權重作為物品推薦的條件。這是協同過濾的k近鄰。
如上所述,基於用戶的推薦存在復雜和稀疏的問題,基於項目的過濾可以緩解這些問題。所謂基於項目的過濾,就是我們提前找到最相似的項目,結合用戶的評分結果,生成推薦。前提是匹配物品的相似度,找到算法。
這裏的調整是指從每個評分結果中減去用戶所有項目的平均分的評分結果,以減少用戶評分系統的不壹致性(抵消評分的貶值)。
其中u表示同時評價了I和J的所有用戶的集合。表示用戶U對項目I的評分的平均值減去用戶U對所有項目的評分。
在獲得所有項目的余弦相似度後,我們就可以通過這個指標來預測用戶對壹個項目的偏好。方法是將所有相似項的相似度乘以得分之和。
其中p(u,I)是指用戶u在項目I上得分的預測值,N是用戶u的所有評分項目中與I得分相似的每個項目,這裏的相似度是指矩陣中存在N和I的相似度得分。是I和n的相似度得分,是u對n評分的結果,公式運行良好的條件是值在(-1,1)之間,所以這裏要用到歸壹化的概念。
另壹種基於項目過濾的常用算法是slope one算法。它的壹般原理是,當用戶U預測產品J的得分時,預先計算壹個包含所有項目的二項偏差表;根據U評價的所有項目的得分之和以及該項目與產品J的偏差(),乘以對這兩類項目打分的用戶數,逐壹相加,除以同時對產品I和U評價的所有項目打分的用戶數,得到得分。公式如下:
其中,;是用戶U使用s1的加權算法給出的J項的預測值。指的是除了j以外所有被打擊太多的物品。
Python實現:
在前面兩節中,基於項目的過濾和基於用戶的過濾的前提是用戶需要對現有項目進行評分。事實上,如果壹個新的項目出現,它永遠不會被推薦,因為缺乏其他人的喜好。這就是推薦系統中所謂的冷啟動問題。這種問題會出現在基於用戶評價的系統中。
冷啟動問題的解決方案之壹是基於物品屬性的篩選進行推薦:匯總物品本身的屬性,並基於這些屬性進行推薦。基於物品屬性過濾有壹個問題,也是維度的不壹致。如果維度不統壹,極值會給推薦系統帶來很大的麻煩。解決方案也很簡單:規範化。本章使用z分數。
使用z-score還有壹個問題,就是容易受到離群值的影響。這裏妳可以使用改進的標準分數來緩解這個問題:
什麽時候能正常化?
這裏,曼哈頓距離用作基於項目屬性的過濾示例:
上壹章最後壹節,用戶是否喜歡壹個物品,其實包含了分類器的思想:分類器是壹個程序,它利用物體的屬性來確定壹個物體屬於哪壹組或哪壹類。下面用另壹個小項目簡單解釋壹下。
簡單來說就是根據運動員的壹些指標來判斷該運動員屬於哪壹類運動員。
準確率0.8。