推薦系統實踐第四章: 利用使用者標籤

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

基本上可以通過3種方式聯絡使用者興趣和物品:

  • 使用者喜歡過的物品(item-cf)
  • 使用者的好友或者有相似興趣的好友喜歡過的物品(user-cf)
  • 使用者具有哪些feature, 哪些物品保護

之前用了user-cf,item-cf, 現在考慮使用標籤進行推薦。

標籤是一種無層次化結構的、用來描述資訊的關鍵詞。

給物品打標籤:

  • 專家、作者
  • 使用者

標籤系統中存在的問題:

  • 如何基於標籤推薦
  • 如何給使用者推薦標籤

基於標籤的推薦系統樣本:

利用Delicious資料集:(待連結)

     格式:userID     bookmarkID     tagID     timestamp

方法如書上介紹:

代碼如下:

# -*- coding: UTF-8 -*-‘‘‘Created on 2014??9??15??@author: joeyqzhou‘‘‘import randomdef addValueToMat(theMat,key,value,incr):    #theMat是字典格式    #它的value也是字典格式    if key not in theMat: #如果key沒出先在theMat中        theMat[key]=dict();        theMat[key][value]=incr;#    else:        if value not in theMat[key]:            theMat[key][value]=incr;        else:            theMat[key][value]+=incr;user_tags = dict();tag_items = dict();user_items = dict();user_items_test = dict();def InitStat():    #init:     data_file = open(‘E:\\RecomDataSet\\Decilious\\bookTag\\user_taggedbookmarks-timestamps.dat‘)    line = data_file.readline(); ##去掉第一行    line = data_file.readline();     while line:        if random.random()>0.1:##添加xunlianji            terms = line.split("\t");            user=terms[0];            item=terms[1];            tag=terms[2];            addValueToMat(user_tags,user,tag,1)            addValueToMat(tag_items,tag,item,1)            addValueToMat(user_items,user,item,1)            line = data_file.readline();        else:               addValueToMat(user_items_test,user,item,1)    data_file.close();   def Recommend(usr):    recommend_list = dict();    tagged_item = user_items[usr];    for tag_,wut in user_tags[usr]:        for item_,wit in tag_items[tag_]:            if item_ not in tagged_item:                if item_ not in recommend_list:                    recommend_list[item_]=wut*wit;                else:                    recommend_list[item_]+=wut*wit;InitStat();#Recommend(8);recom_len=0;#推薦的總長度hit=0;#預測準確的個數test_len=0;#測試集長度for user in user_items_test:#計算測試集的長度,來計算召回率    test_len+=user_items_test[user].__len__();for user in user_items:    for item in user_items[user]: #item被使用者打過的標籤至少打過一次        if user_items[user][item]>0:#如果打過三次以上就推薦            recom_len+=1;            if item in user_items_test:                hit+=1;print "precision="+str(hit*1.0/recom_len);print "recall="+str(hit*1.0/test_len);###利用內建sorted函數排序#print sorted(user_items[‘8‘].items(),key=lambda dic:dic[1],reverse=True)

把資料集分為10%測試,90%訓練,個人程式跑的結果如下:

準確率:1.8%

召回率:5.6%

  • 上面簡單的方法可能會造成容易推薦熱門,可以利用TF-IDF來最佳化
  • 對於新使用者或者新item,標籤比較稀疏,那麼可以進列標籤擴充。方法有:
    • topic model
    • 利用資料統計標籤相似性

標籤清理

    • 不是所有標籤都反應使用者的興趣(比如“不好笑)
    • 有利於給推薦解釋
    • 方法:去掉停止詞,合并同義字或者分隔字元造成的同義字。

推薦系統實踐第四章: 利用使用者標籤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.