简单的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 相关文章推荐
Python3中的2to3转换工具使用示例
Jun 12 Python
python获取list下标及其值的简单方法
Sep 12 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
Python性能分析工具Profile使用实例
Nov 19 Python
Python基于Tkinter编写crc校验工具
May 06 Python
python 实现压缩和解压缩的示例
Sep 22 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 Python
python常量折叠基础知识点讲解
Feb 28 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 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
typecho插件编写教程(五):核心代码
2015/05/28 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
JS的反射问题
2010/04/07 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python中pytest收集用例规则与运行指定用例详解
2019/06/27 Python
python爬虫增加访问量的方法
2019/08/22 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
香港士多网上超级市场:Ztore
2021/01/09 全球购物
中层干部岗位职责
2013/12/18 职场文书
银行职员思想汇报
2013/12/31 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
2015年手术室工作总结
2015/05/11 职场文书
工程款催款函
2015/06/24 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
对讲机的最大通讯距离是多少
2022/02/18 无线电
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS