简单的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中的二维数组的操作方法
May 02 Python
Python中文竖排显示的方法
Jul 28 Python
Python字符串格式化输出方法分析
Apr 13 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
python实现websocket的客户端压力测试
Jun 25 Python
linux中如何使用python3获取ip地址
Jul 15 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python开发入门——set的使用
Sep 03 Python
详解pandas赋值失败问题解决
Nov 29 Python
Python 批量下载阴阳师网站壁纸
May 19 Python
Python+Selenium实现读取网易邮箱验证码
Mar 13 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
php的4种常用运行方式详解
2016/12/22 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
Python应用库大全总结
2018/05/30 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
Django 解决上传文件时,request.FILES为空的问题
2020/05/20 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
财务方面个人工作的自我评价
2013/12/28 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
《满井游记》教学反思
2014/02/26 职场文书
大学生创业项目方案
2014/03/08 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
给老婆的保证书范文
2014/04/28 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
送给客户微信问候语!
2019/07/04 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
理解python中装饰器的作用
2021/07/21 Python