[原博文](https://blog.csdn.net/qqzhuimengren/article/details/78345891)一些說明

原博文一些說明:

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函數的調用順序

  1. 讀入原始數據(movies和ratings),傳給demo

  2. 計算準確率、召回率:demo.getPrecision() 其內部調用

    • 調用getRecommand,處理train和test數據,返回推薦列表、共同評分用戶集
    • 計算precision和recall
  3. 簡單方法計算預測評分:foreCast

計算Mae值:cal_Mae方法

4、最後

  • 先補充這些吧,
  • 很感謝那些聯繫我的夥伴們。另外,很抱歉,沒能給你們更多的幫助
  • 一個是python,一個是算法本身,一個是數據。如果沒有比較瞭解,一些疑問我真的不知該怎麼回答。

作者:akufire

郵箱:[email protected]
本文由博客一文多發平臺 OpenWrite 發佈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章