简单的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 os模块介绍
Nov 30 Python
Python中查看文件名和文件路径
Mar 31 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
python复制文件到指定目录的实例
Apr 27 Python
Python当中的array数组对象实例详解
Jun 12 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python图片处理模块PIL操作方法(pillow)
Apr 07 Python
Python实现爬取并分析电商评论
Jun 19 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
python神经网络 使用Keras构建RNN训练
May 04 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脚本代码
2011/02/19 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
2011/11/07 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
微信小程序表单验证功能完整实例
2017/12/01 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
python中返回矩阵的行列方法
2018/04/04 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Python面向对象编程基础实例分析
2020/01/17 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
石油大学毕业生自荐信
2014/01/28 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
化妆品促销活动总结
2015/05/07 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers