原博文一些說明:
1、程序爲py3()
2、題外話
17年那會剛學了python及協同過濾,邊先做了個最簡單的測試程序,沒考慮效率等問題,核心是:實現算法即可。後來做了一些優化、以及ubcf、ibcf、slope-one等相關算法的程序,但由於多種原因一直未能整理更新,近期也不會更吧。。。
3、當時的整個思路:
3.1 寫個.py文件:
將rating數據隨機分成了training和test;
因爲通常需要五折交叉試驗,所以沒運行一次都可以生成不同的(train,test)數據集
3.2 關於該class CF的進一步說明
裏面其實已經很多註解了,特別要注意每個函數傳入傳出的數據格式。
否則肯定是跑不起來的
-
D:/d/201709train.txt及test的數據格式和rating的數據格式一樣
-
formatRate函數將train、test轉化 userDict或者itemDict
-
即每個人看了哪些電影及評分
{userid1:[(movieId1,rating),movieId2,rating),...] userid2:[(movieId1,rating),movieId2,rating),...] . . }
-
itemDict的格式也是類似,只是key是movieId
-
之所以轉化成itemDict和MoveDict是因爲後續運算過程中在進行相關運算時直接進行讀取就可以
(self.train_data, self.test_data) = (ratings[0], ratings[1]) # [UserID::MovieID::Rating::Timestamp] #傳個class的數據是嵌套列表 [ [UserID::MovieID::Rating::Timestamp] [UserID::MovieID::Rating::Timestamp] ... ]
-
formatuserDict函數就是依次把目標用戶和other用戶的數據轉成向量,讀取的是userDict;數據格式是
[ [目標用戶評分,other用戶評分] [0.2, 1], [0, 0.4], [0.2, 0] ... ]
3.3 start3函數的調用順序
-
讀入原始數據(movies和ratings),傳給demo
-
計算準確率、召回率:demo.getPrecision() 其內部調用
- 調用getRecommand,處理train和test數據,返回推薦列表、共同評分用戶集
- 計算precision和recall
-
簡單方法計算預測評分:foreCast
計算Mae值:cal_Mae方法
4、最後
- 先補充這些吧,
- 很感謝那些聯繫我的夥伴們。另外,很抱歉,沒能給你們更多的幫助
- 一個是python,一個是算法本身,一個是數據。如果沒有比較瞭解,一些疑問我真的不知該怎麼回答。
作者:akufire
郵箱:[email protected]
本文由博客一文多發平臺 OpenWrite 發佈!