zoukankan      html  css  js  c++  java
  • 基于用户的协同过滤算法(UserCF)

    基于用户的协同过滤算法:

    1. 找到和目标用户相似的用户集合
    2. 找到这个集合中用户喜欢的但目标用户没有听过的物品
    #encoding: utf-8
    from Similarity import Person
    from Sort import select_sort
    
    
    file=open('user_bookmark','r')
    filew=open('user_bookRecommend','w')
    
    #加载训练集
    trainSet={}
    while True:
        line=file.readline().strip()
        if not line: break
        userId,itemId=line.split("::")
        trainSet.setdefault(userId,[])
        trainSet[userId].append(itemId)
    
    # 计算每个用户和其他所有用户的相似度,排序,获得相似度最高的前N个用户, 
    # 在计算每个用户的相似度*物品的偏好值(这里没有评分就把偏好值设置为1)
    
    for v in trainSet.keys():
        v2u={}
        K={}
        for u in trainSet.keys():
           if u!=v:
              sim=Person(trainSet[v],trainSet[u])
              v2u.setdefault(u,sim)
        keys,values=select_sort(v2u)
    
        s=v
        for i in range(len(values)-3,len(values)):
           s=s+"::"+keys[i]+" "+str(values[i])
           K.setdefault(keys[i],values[i])
    
        rank={}
        rki=1
        interacted_items=trainSet[v]
        for k,simk in K.items():
            for i in trainSet[k]:
                if i in interacted_items:
                    continue
                rvi=rki*simk
                rank.setdefault(i,rvi)
        s1=v
        _keys,_values=select_sort(rank)
        for i in range(len(rank)-6,len(rank)):
             #s1=s1+_keys[i]+" "+str(_values[i])+"::"
             s1=s1+"::"+_keys[i]
        print s1
        filew.write(s1+'
    ')
    
    
    from math import sqrt
    
    
    
    def Person(item_a,item_b):
        if len(item_a)==0 or len(item_b)==0:
            return 0;
        else:
            sum=0
            for i in range(len(item_a)):
                for j in range(len(item_b)):
                    if item_a[i]==item_b[j]:
                        sum=sum+1
            if sum==0:
                return 0
            else:
                sim=sum/sqrt(len(item_a)*len(item_b))
                return sim
    
    

      

  • 相关阅读:
    Ubuntu下安装mysql
    MySQL聚集索引与非聚集索引
    mysql索引的简单介绍
    Hive数据导入与导出
    hive的基本操作
    hive的数据模型
    29 ArcMap许可服务器点击授权后无法进入下一步
    28 ArcMap 运行特别慢怎么办
    27 ArcMap加载天地图服务一片空白怎么办
    26 Arcpy跳坑系列——ExportToPNG
  • 原文地址:https://www.cnblogs.com/zzblee/p/4189279.html
Copyright © 2011-2022 走看看