简单的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实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
python 构造三维全零数组的方法
Nov 12 Python
python多任务之协程的使用详解
Aug 26 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
python查询MySQL将数据写入Excel
Oct 29 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
Feb 24 Python
python如何查找列表中元素的位置
May 30 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
我的论坛源代码(八)
2006/10/09 PHP
php目录管理函数小结
2008/09/10 PHP
php字符串截取的简单方法
2013/07/04 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
Element Input组件分析小结
2018/10/11 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Python作用域用法实例详解
2016/03/15 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
python实现证件照换底功能
2019/08/20 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
外企财务年会演讲稿
2014/01/03 职场文书
八一演出活动方案
2014/02/03 职场文书
简历的自我评价范文
2014/02/04 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
董事长秘书岗位职责
2015/02/13 职场文书