简单的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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
研究Python的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
Python读取键盘输入的2种方法
Jun 16 Python
python中异常报错处理方法汇总
Nov 20 Python
flask-restful使用总结
Dec 04 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
Dec 28 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
详解Python是如何实现issubclass的
Jul 24 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
浅谈优化Django ORM中的性能问题
Jul 09 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注入点构造代码
2008/06/14 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python 同时读取多个文件的例子
2019/07/16 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
Python类型转换的魔术方法详解
2020/12/23 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
new修饰符是起什么作用
2015/06/28 面试题
教师专业理论水平的自我评价分享
2013/11/09 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP