推荐算法 - 皮尔逊函数

公式:



# 数据 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], 2 for  it  in  si])
    sum2Sq
= sum([ pow(um2[it], 2 for  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 之间的关系 。

  当 消费某一产品 ,马上推荐出 其他的相近的产品 (時时推荐)

本文转自博客园刘凯毅的博客,原文链接:推荐算法 - 皮尔逊函数,如需转载请自行联系原博主。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值