简单的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列表推导式的使用方法
Nov 21 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
python binascii 进制转换实例
Jun 12 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
python列表插入append(), extend(), insert()用法详解
Sep 14 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
变长双向rnn的正确使用姿势教学
May 31 Python
详解Python常用的魔法方法
Jun 03 Python
python数字图像处理:图像的绘制
Jun 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/04/24 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
动态表格Table类的实现
2009/08/26 Javascript
js数组的操作指南
2014/12/28 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python编程生成随机用户名及密码的方法示例
2017/05/05 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
应届生程序员求职信
2013/11/05 职场文书
工作中个人的自我评价
2013/12/31 职场文书
新学期开学演讲稿
2014/05/24 职场文书
食品安全演讲稿
2014/09/01 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
pt-archiver 主键自增
2022/04/26 MySQL