Skynet

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

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


公式:



#数据 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.blogjava.net/Good-Game
posted on 2009-11-22 23:56 刘凯毅 阅读(1460) 评论(0)  编辑  收藏 所属分类: 算法/函数

只有注册用户登录后才能发表评论。


网站导航: