简单的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脚本判断 Linux 是否运行在虚拟机上
Apr 25 Python
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
Sep 19 Python
Python Django基础二之URL路由系统
Jul 18 Python
Python简易版图书管理系统
Aug 12 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
tensorflow使用指定gpu的方法
Feb 04 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python3中apply函数和lambda函数的使用详解
Feb 28 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实例分享之二维数组排序
2014/05/15 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
Java Mybatis框架入门基础教程
2015/09/21 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
python求素数示例分享
2014/02/16 Python
python处理xml文件的方法小结
2017/05/02 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
2018/11/14 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
Django单元测试工具test client使用详解
2019/08/02 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
Python 使用type来定义类的实现
2019/11/19 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
普通大学毕业生自荐信
2013/11/04 职场文书
《观舞记》教学反思
2014/04/16 职场文书
暑期学习心得体会
2014/09/02 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书