SlopOne推荐算法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                SlopOne推荐算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
 
?
 
 
在開源框架taste中有SlopOne的Java實現(xiàn),效果不錯。使用movielens的數(shù)據(jù),代碼如下
 
代碼
#coding:utf-8import re import math#讀取數(shù)據(jù),并生成矩陣 def getMatrix():mat = {}f = open("u.data", "r")for line in f:list = map(int, line.strip("\n").split("\t"))if list[0] in mat:mat[ list[0] ][ list[1] ] = list[2]else:mat[ list[0] ] = { list[1] : list[2] }f.close()return mat#計算某個用戶的平均分 def getAvg(usr):res = 0.0for i in usr:res += usr[i]return res / len(usr)#預測分數(shù), 返回矩陣mat中用戶usr對item的評分 def getSlopOne(mat, user, item):#用戶user的所有item的列表list = mat[user]#分子mole = 0.0#分母demo = 0.0#對于每一個物品,都計算它和物品item的差值,最終算出相對它item的scorefor it in list:diff_sum = 0.0user_num = 0for us in mat:us_it = mat[us]#如果該user同時評價過這兩個item,則采納他的評分if item in us_it and it in us_it:diff_sum += us_it[item] - us_it[it]user_num += 1#如果item被人評價過if user_num:diff_avg = diff_sum / user_nummole += (list[it] + diff_avg) * user_numdemo += user_num#如果沒有人評價過,則取這個人的平均分if user_num == 0:return getAvg(list)#否則返回最終的scorereturn mole / demodef main():mat = getMatrix()rf = open("u.data", "r")wf = open("o.data", "w")for line in rf:list = map(int, line.strip("\n").split("\t"))score = getSlopOne(mat, list[0], list[1])output = str(list[0]) + "\t" + str(list[1]) + "\t" + str(list[2]) + "\t" + str(score) + "\n"wf.write(output)rf.close()wf.close()if __name__ == "__main__":main()
 
總結(jié)
以上是生活随笔為你收集整理的SlopOne推荐算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 径向基(RBF)神经网络
- 下一篇: 调度场算法与逆波兰表达式
