简单的python协同过滤程序实例代码


Posted in Python onJanuary 31, 2018

本文研究的主要是python协同过滤程序的相关内容,具体介绍如下。

关于协同过滤的一个最经典的例子就是看电影,有时候不知道哪一部电影是我们喜欢的或者评分比较高的,那么通常的做法就是问问周围的朋友,看看最近有什么好的电影推荐。在问的时候,都习惯于问跟自己口味差不多的朋友,这就是协同过滤的核心思想。

这个程序完全是为了应付大数据分析与计算的课程作业所写的一个小程序,先上程序,一共55行。不在意细节的话,55行的程序已经表现出了协同过滤的特性了。就是对每一个用户找4个最接近的用户,然后进行推荐,在选择推荐的时候是直接做的在4个用户中选择该用户item没包括的,当然这里没限制推荐数量,个人觉得如果要提高推荐准确率的画,起码,1,要对流行的item进行处理。2,将相邻的四个用户的item进行排序,从多到少的进行推荐。程序所用的数据是movielens上的(http://grouplens.org/datasets/movielens)。相似度的计算也很简单,直接用了交集和差集的比值。好吧,上程序

#coding utf-8
import os
import sys
import re

f1=open("/home/alber/data_base/bigdata/movielens_train_result.txt",'r')  #读取train文件,已经处理成每一行代表一位用户的item,项之间用空格。
f2=open("/home/alber/data_base/bigdata/movielens_train_result3.txt",'a')
txt=f1.readlines()
contxt=[]
f1.close()
userdic={}
for line in txt:
  line_clean=" ".join(line.split())
  position=line_clean.index(",")
  ID=line_clean[0:position]
  item=line_clean[position+1:]
  userdic.setdefault(ID,item)
  if len(item)>=5:           #对观影量少于5的用户不计入相似性计算的范围
    contxt.append(item)
for key in userdic.keys():        #计算每位用户的4个最相似用户
  ID_num=key
  value=userdic[key]
   user_item=value.split(' ')
   Sim_user=[]
   for lines in contxt:
     lines_clean=lines.split(' ')
     intersection=list(set(lines_clean).intersection(set(user_item)))
     lenth_intersection=len(intersection)
     difference=list(set(lines_clean).difference(set(user_item)))
     lenth_difference=len(difference)
     if lenth_difference!=0:                     
       Similarity=float(lenth_intersection)/lenth_difference          #交集除以差集作为相似性的判断条件
       Sim_user.append(Similarity)
     else:
       Sim_user.append("0")
   Sim_user_copy=Sim_user[:]
   Sim_user_copy.sort()
   Sim_best=Sim_user_copy[-4:]
   position1=Sim_user.index(Sim_best[3])
   position2=Sim_user.index(Sim_best[2])
   position3=Sim_user.index(Sim_best[1])
   position4=Sim_user.index(Sim_best[0])
   if position1!=0 and position2!=0 and position3!=0 and position4!=0:
     recommender=userdic[str(position1)]+" "+userdic[str(position2)]+" "+userdic[str(position3)]+" "+userdic[str(position4)] #将4位用户的看过的电影作为推荐 
  else:
    recommender="none"   
  reco_list=recommender.split(' ')
  recomm=[]
  for good in reco_list:
    if good not in user_item:
      recomm.append(good)
    else:
      pass
  f2.write((" ".join(recomm)+"\n"))
f2.close()

总结

以上就是本文关于简单的python协同过滤程序实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python中常见的数据类型小结
Aug 29 Python
基于Python实现文件大小输出
Jan 11 Python
Python中标准模块importlib详解
Apr 16 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
树莓派与PC端在局域网内运用python实现即时通讯
Jun 22 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
python3中calendar返回某一时间点实例讲解
Nov 18 Python
matlab xlabel位置的设置方式
May 21 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 Python
Python进阶之递归函数的用法及其示例
Jan 31 #Python
Python tkinter事件高级用法实例
Jan 31 #Python
pyqt5自定义信号实例解析
Jan 31 #Python
Python使用flask框架操作sqlite3的两种方式
Jan 31 #Python
pyqt5简介及安装方法介绍
Jan 31 #Python
Python实现的圆形绘制(画圆)示例
Jan 31 #Python
Python Json序列化与反序列化的示例
Jan 31 #Python
You might like
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP数组实例总结与说明
2011/08/23 PHP
PHP编程中的Session阻塞问题与解决方法分析
2017/08/07 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
javascript实现随机抽奖功能
2020/12/30 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Python素数检测实例分析
2015/06/15 Python
python学习之编写查询ip程序
2016/02/27 Python
python实现图书借阅系统
2019/02/20 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
pygame实现成语填空游戏
2019/10/29 Python
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
医学专业毕业生个人求职信
2013/12/25 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
英雄儿女观后感
2015/06/09 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
python中tkinter复选框使用操作
2021/11/11 Python
table设置超出部分隐藏,鼠标移上去显示全部内容的方法
2022/12/24 HTML / CSS