简单的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 04 Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
Python KMeans聚类问题分析
Feb 23 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
python中的逆序遍历实例
Dec 25 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
python实现数字炸弹游戏
Jul 17 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
document.forms[].submit()使用介绍
2014/02/19 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
用python生成1000个txt文件的方法
2018/10/25 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python队列原理及实现方法示例
2019/11/27 Python
Python3实现飞机大战游戏
2020/04/24 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
好的演讲稿开场白
2013/12/30 职场文书
五年级语文教学反思
2014/01/30 职场文书
黄金酒广告词
2014/03/21 职场文书
员工年终自我评价
2014/09/14 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android