推荐算法 - 皮尔逊函数

公式:

《推荐算法 - 皮尔逊函数》



#
数据 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 之间的关系 。

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

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

    原文作者:推荐算法
    原文地址: https://yq.aliyun.com/articles/352637
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞