1、协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering)。

1)基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分。根据不同用户对相同商品或内容的态度和偏好程度计算用户之间的关系。在有相同喜好的用户间进行商品推荐。

2)基于物品的协同过滤算法与基于用户的协同过滤算法很像,将商品和用户互换。通过计算不同用户对不同物品的评分获得物品间的关系。基于物品间的关系对用户进行相似物品的推荐。这里的评分代表用户对商品的态度和偏好。

2、这里做了初步的实现基于用户的协同过滤,相关理论可以进一步查阅。

# -*- coding: utf-8 -*-
'''
Created on 2017年9月18日@author: Jason.F
'''
import time
import pandas as pd
import math
import numpy as np
from operator import itemgetter def Recommend(user,df_test,W,TopK=3):rvi=1 #用户v对物品i的兴趣,默认为1#TopK:与用户user兴趣最接近的k个用户rank=dict()#df_itemU=df_sample[df_sample['userid'] == user]#u_items=list(set(df_itemU['itemid'].values))for v,wuv in sorted(W[user].items(),key=itemgetter(1),reverse=True)[0:TopK]:df_itemV=df_test[df_test['userid'] == v]v_items=list(set(df_itemV['itemid'].values))for i in v_items:#if i in u_items:#    continueif i not in rank.keys():rank[i]=0rank[i] +=wuv*rvi          return rank #返回推荐的物品def UserSimilarity(df_sample):#计算用户相似度#建立物品到用户的倒排表item_users=dict()item_list = list(set(df_sample['itemid'].values))#获取物品列表for item in item_list:item_users[item]=set()df_user=df_sample[df_sample['itemid'] == item]user_list= list(set(df_user['userid'].values))#获取物品对应的用户列表for user in user_list:    item_users[item].add(user)#计算用户之间物品相似度C = dict()N = dict()#初始化for u in list(set(df_sample['userid'].values)):N[u]=0for v in list(set(df_sample['userid'].values)):if u!=v:AddTwoDict(C,u,v,0)W=C #初始化相似度字段#计算           for item,users in item_users.items():for u in users:N[u] += 1for v in users:if u==v:continue#根据用户行为计算用户相似度,改良余弦相似度公式C[u][v] +=( 1/math.log(1+len(users)) )#计算用户相似度矩阵for u,related_users in C.items():for v,cuv in related_users.items():W[u][v]=cuv/math.sqrt(N[u]*N[v])return W#二维词典插入
def AddTwoDict(theDict, key_a, key_b, val): if key_a in theDict: theDict[key_a].update({key_b: val}) else: theDict.update({key_a:{key_b: val}})#计算准确率指标
def Precision(df_test,W,N=5):hit=0all=0#N最靠前的5个物品for user in list(set(df_test['userid'].values)):rank=Recommend(user,df_test,W)df_item=df_test[df_test['userid'] == user]for item,pui in sorted(rank.items(),key=itemgetter(1),reverse=True)[0:N]:if item in list(set(df_item['itemid'].values)):hit+=1all += Nreturn hit/(all*1.0)#召回率
def Recall(df_test,W,N=5):hit=0all=0#N最靠前的5个物品for user in list(set(df_test['userid'].values)):rank=Recommend(user,df_test,W)df_item=df_test[df_test['userid'] == user]for item,pui in sorted(rank.items(),key=itemgetter(1),reverse=True)[0:N]:if item in list(set(df_item['itemid'].values)):hit+=1all += len(df_item)return hit/(all*1.0)if __name__ == '__main__':    start = time.clock()  #导入数据df_sample = pd.read_csv("D:\\tmp\\ratings.csv",names=['userid','itemid','ratings','time'],header=0)  df_sample_=df_sample[['userid','itemid']]#模型训练W=UserSimilarity(df_sample)#模型预测#rank=Recommend(1,df_sample,W)#user=1#print (rank)#模型评估,准确率指标df_test=df_sample.sample(frac=0.2)#抽20%来测试print (Precision(df_test,W))#准确率print (Recall(df_test,W))#准确率end = time.clock()    print('finish all in %s' % str(end - start)) 

要结合实际业务定义相关参数,以及采集样本(兴趣度或偏好)。

基于物品的协同过滤实现类似。

【知识发现】基于用户的协同过滤推荐算法python实现相关推荐

  1. 协同过滤算法_基于用户的协同过滤推荐算法原理和实现

    (给算法爱好者加星标,修炼编程内功) 来源:Create Chen's Blog https://www.cnblogs.com/technology/p/4467895.html 在推荐系统众多方法 ...

  2. python协同过滤可以预测吗_基于用户的协同过滤推荐算法原理-附python代码实现...

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  3. 基于用户的协同过滤推荐算法原理和实现

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  4. 基于用户的协同过滤推荐算法原理和实现分析

    本文转载自nieson  基于用户的协同过滤推荐算法原理和实现 在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 ...

  5. (一)基于用户的协同过滤推荐算法原理和实现

    在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单.该算法1992年提出并用于邮件过滤系统,两年后1994年被 GroupLens 用于新闻过滤.一直到2000年,该算法都是 ...

  6. mysql数据推荐算法_Java+Mysql实现简单在线电影、音乐、图书推荐系统 基于用户的协同过滤推荐算法实现 源代码下载...

    # Java+Mysql实现简单在线电影.音乐.图书等推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,tomca ...

  7. Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系 java实现基于用户的协同过滤推荐算法 源代码下载 算法实现 Spring+Struts+Hibernate(SSH)开发框架

    Java+Jsp+Mysql实现简单在线图书推荐系统 个性化图书推荐系统(基于用户的协同过滤推荐算法) 一.项目简介 1.开发工具和实现技术 MyEclipse10,jdk1.7,mysql5.5,t ...

  8. Python实现基于用户的协同过滤推荐算法构建电影推荐系统

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设: ...

  9. java 用户协同过滤算法_基于用户的协同过滤推荐算法java实现(UserCF)

    UserCF的核心思想即为根据用户数据模拟向量相似度,我们根据这个相似度,来找出指定用户的相似用户,然后将相似用户买过的而指定用户没有买的东西推荐给指定用户,推荐度的计算也是结合了相似用户与指定用户的 ...

最新文章

  1. 进程创建函数fork()和vfork()
  2. 在吗?认识一下JWT(JSON Web Token) ?
  3. 二叉排序树(BST)构造与应用
  4. php数组全排列,元素所有组合
  5. 饿了么超级会员数量暴增,外卖市场“去泡沫化”的先声?
  6. php 实现栈与队列
  7. oracle修改filesystem,oracle数据库 boost::filesystem使用例子
  8. 经典排序算法 - 归并排序Merge sort
  9. 运行make_datafiles的过程
  10. 如何快速入门PLC编程?
  11. Vue.js实现文章评论和回复评论功能
  12. 百度涉嫌行政违法;库克承诺调查“沙特用App监控女性出境”事件;苹果高管涉内幕交易遭起诉 | 雷锋早报...
  13. Mixly按键控制LED灯
  14. 答大三犹豫考研的同学兼向大一学生叨叨几句
  15. 抓取百度地图瓦片(离线GIS)
  16. kafka中的配额管理(限速)机制
  17. 访问到页面的完整流程
  18. 高等数学笔记-乐经良老师-第四章-微分中值定理和导数的应用-第五节-曲线的曲率
  19. iOS是否是电话号码判断Demo
  20. CSS:精灵图 字体图标

热门文章

  1. php 与时间有关的函数,php中与时间相关的常用函数有哪些
  2. portainer的日常使用
  3. PHP未定义名称的方法,PHP:“调用未定义的方法”......但方法是否已定义?
  4. Linux 中使用 KVM
  5. 谷歌火狐浏览器限制的端口
  6. 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作
  7. sqlserver 2008r2 表分区拆分问题
  8. 【HNOI2011】数学作业(BZOJ 2326)
  9. Owasp live CD 2011下载地址
  10. ie6下padding bug