至上次重寫ID3 MR版以後,手賤繼續嘗試CF。以前耳聞CF這兩年內很是火,論內某大神也給了單機版(90%代碼來自於其)。因此想試試可否改到MR上。總體來講,CF自己的機制以類似性爲核心,與迭代調用幾乎無關聯。因此在MR上的表現,未必能徹底發揮MR做用。基本上是線性路子,一走到底。原先網上也有很多CF的介紹,不過以文文圖圖居多,對CF的時序性邏輯表達較少,講的比較隱晦,如今經過代碼剖析從新將其展示在你們面前(純粹理論此處略過):ios
先貼圖,貼圖是王道:git
1,整個MR過程其實與單機版90%重疊。僅指望在Mapper過程當中,儘量地先構建後評分矩陣,減小Reducer壓力。github
2,與大多數機器學習特性同樣,既指望用小樣原本預測將來。本想在Mapper 過程當中同時構建neighbour,可是若是不是太過追求最終成功率,能夠值得一試。app
3,對於CF中以用戶平均分做爲一個大結果因素這件事,不是很贊同,多少顯的有些粗糙。應該還有更好地觀測手法,比方說標差、正態、二項式都是很好的選擇。機器學習
3,爲了加快文本讀取速度,取消了標入的同步。std::ios::sync_with_stdio(false);學習
4,最終結果以下:blog
5,原始文本以下:get
6,源代碼以下:同步
https://github.com/zacard-orc/Zacard_CFit
望各位看官手下留情。。。。^)^