简单的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中函数的调用与定义
Mar 14 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
浅谈关于Python3中venv虚拟环境
Aug 01 Python
解决python "No module named pip" 的问题
Oct 13 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
Django 静态文件配置过程详解
Jul 23 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
np.random.seed() 的使用详解
Jan 14 Python
Python内置类型性能分析过程实例
Jan 29 Python
pytorch梯度剪裁方式
Feb 04 Python
Python selenium实现断言3种方法解析
Sep 08 Python
python中urllib包的网络请求教程
Apr 19 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
如何使用PHP中的字符串函数
2006/11/24 PHP
php 三维饼图的实现代码
2008/09/28 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php实现比较两个文件夹异同的方法
2015/06/18 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JS实现div居中示例
2014/04/17 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python中lambda()的用法
2017/11/16 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
技校生自我鉴定范文
2013/09/26 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
小学二年级评语
2014/04/21 职场文书
作风建设年度心得体会
2014/10/29 职场文书
离职告别感言
2015/08/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
检讨书怎么写?
2019/06/21 职场文书