Skynet

          ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(13)

          我參與的團隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜



          公式:



          #數據 elt 清洗后(txt)
          #
           一般 user 和 item 分值化 
          #
           比如 用戶下載,收藏,試聽 某item 等等
          user    items    score
          .


          # 結果輸出 (bdb)
          #
           user    item1:score1,item2:score2,item3:score3.

          python
          <<EOF
          import bsddb
          db 
          = bsddb.hashopen('user-items.db','c')
          for row in open('user-item-sc.txt'):
              row
          =row.split('\n')[0]
              dr 
          = row.split(':')
              
          if not db.has_key(dr[0]) : db[dr[0]]=dr[1]+':'+dr[2]
              
          else : db[dr[0]]=db[dr[0]]+';'+dr[1]+':'+dr[2]

          db.close()
          EOF


          # 結果輸出 (txt)
          #
           user    user     score


          python
          <<EOF
          import bsddb
          from math import *
          db 
          = bsddb.hashopen('user-items.db','c')

          def ps(u1,u2):
              um1
          ={}
              
          for v in db[u1].split(';') :
                  v
          =v.split(':')
                  um1[v[0]]
          =float(v[1])
              um2
          ={}
              si
          =[]
              
          for v in db[u2].split(';') :
                  v
          =v.split(':')
                  um2[v[0]]
          =float(v[1])
                  
          if um1.has_key( v[0] ) : si.append(v[0])
              n 
          = len(si)

              
          if n ==0.0 :return None
              
              sum1
          =sum( [um1[it] for it in si] )
              sum2
          =sum( [um2[it] for it in si] )
              
              sum1Sq
          =sum([ pow(um1[it],2for it in si])
              sum2Sq
          =sum([ pow(um2[it],2for it in si])
              
              pSum 
          = sum( [ um1[it]*um2[it] for it in si ] )

              num 
          = pSum - (sum1*sum2/n)
              den 
          = sqrt( (sum1Sq-pow(sum1,2)/n )*( sum2Sq-pow(sum2,2)/n ) )
              
          if den==0.0 : return None
              
          return num/den

          fc 
          = open('user-user-sc.txt','w')
          for i in xrange(1,43381):
              
          for j in xrange(i+1,43381):
                  sc 
          = ps(str(i),str(j))  
                  
          if not sc == None: print >>fc, "%s\t%s\t%s" %(i,j,sc)      

          fc.close()

          EOF





          # 測試使用
          python<<EOF
          import bsddb
          db 
          = bsddb.hashopen('user-items.db','c')
          print db['1']
          EOF

          25    30604    1.0

          print um1['468'],um1['471']
          2.0 1.0
          (Pdb) 
          print um2['468'],um2['471']
          2.0 1.0






          如果對大家對 推薦有一些了解,數據能到 用戶與用戶關系(分值化) ,是能干很多事情了。
          比如:
            1. 首先得到某用戶相近度最高的幾位活躍用戶,看這幾位用戶在看什么,聽什么 然后推薦出去

          擴展:
            把初始值 反過來  item  user  score ,然后統計出 item 和 item 之間的關系 。
            當 消費某一產品 ,馬上推薦出 其他的相近的產品 (時時推薦)

           



          整理 www.aygfsteel.com/Good-Game
          posted on 2009-11-22 23:56 劉凱毅 閱讀(1473) 評論(0)  編輯  收藏 所屬分類: 算法/函數
          主站蜘蛛池模板: 鄂托克前旗| 舞钢市| 柳林县| 峨边| 西峡县| 五莲县| 横山县| 蓝山县| 镇远县| 辉南县| 扶绥县| 峨山| 崇文区| 正定县| 广德县| 新疆| 依兰县| 藁城市| 武定县| 韩城市| 祁阳县| 彭泽县| 无极县| 双峰县| 黎城县| 察哈| 鱼台县| 凌源市| 湄潭县| 通州市| 阳新县| 榆社县| 井冈山市| 汉中市| 疏勒县| 舒兰市| 睢宁县| 广丰县| 周宁县| 上饶市| 突泉县|