简单的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中 ? : 三元表达式的使用介绍
Oct 09 Python
python设定并获取socket超时时间的方法
Jan 12 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
Django 反向生成url实例详解
Jul 30 Python
pytorch索引查找 index_select的例子
Aug 18 Python
python微信公众号开发简单流程实现
Mar 09 Python
python中如何进行连乘计算
May 28 Python
python3读取autocad图形文件.py实例
Jun 05 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
浅析python 通⽤爬⾍和聚焦爬⾍
Sep 28 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 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入门的学习方法
2007/01/02 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
JQuery从头学起第一讲
2010/07/04 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
python计算最大优先级队列实例
2013/12/18 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python多层装饰器用法实例分析
2018/02/09 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
python爬取抖音视频的实例分析
2021/01/19 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
公司口号大全
2014/06/11 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
2014年公务员工作总结
2014/11/18 职场文书
党员自评材料范文
2014/12/17 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记
Java 数组的使用
2022/05/11 Java/Android