简单的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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python根据日期返回星期几的方法
Jul 06 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
pytorch模型预测结果与ndarray互转方式
Jan 15 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
Python jiaba库的使用详解
Nov 23 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&&mysql)四
2006/10/09 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
获取焦点时,利用js定时器设定时间执行动作
2010/04/02 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
常用DOM整理
2015/06/16 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
超简单使用Python换脸实例
2019/03/27 Python
Python pandas用法最全整理
2019/08/04 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
如何强制垃圾回收
2015/10/06 面试题
大学生党员自我评价范文
2014/04/09 职场文书
大学生村官考核材料
2014/05/23 职场文书
计算机网络专业求职信
2014/06/05 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android
Java实现带图形界面的聊天程序
2022/06/10 Java/Android