简单的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中的CURL PycURL使用例子
Jun 01 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python实现的归并排序算法示例
Nov 21 Python
django模板语法学习之include示例详解
Dec 17 Python
python绘制圆柱体的方法
Jul 02 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
在SQLite-Python中实现返回、查询中文字段的方法
Jul 17 Python
python getpass实现密文实例详解
Sep 24 Python
Django 再谈一谈json序列化
Mar 16 Python
python时间time模块处理大全
Oct 25 Python
Python3读写ini配置文件的示例
Nov 06 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错误日志 display_errors与log_errors的区别
2012/10/09 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
Python面向对象class类属性及子类用法分析
2018/02/02 Python
详解从Django Allauth中进行登录改造小结
2019/12/18 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
基于python 取余问题(%)详解
2020/06/03 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
捷科时代的软件测试笔试题
2015/11/09 面试题
总经理秘书的岗位职责
2013/12/27 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
员工手册编写范本
2015/05/14 职场文书
创业计划书之家教中心
2019/09/25 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
Flask搭建一个API服务器的步骤
2021/05/28 Python
详解Python中的进程和线程
2021/06/23 Python
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
利用Python多线程实现图片下载器
2022/03/25 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
教你部署vue项目到docker
2022/04/05 Vue.js
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技