代码下载

# coding:UTF-8
'''
Date:20160928
@author: zhaozhiyong
'''import numpy as np
import pandasdef load_data(file_path):'''导入用户商品数据input:  file_path(string):用户商品数据存放的文件output: data(mat):用户商品矩阵'''f = open(file_path)   data = []for line in f.readlines():lines = line.strip().split("\t")tmp = []for x in lines:if x != "-":tmp.append(float(x))  # 直接存储用户对商品的打分else:tmp.append(0)data.append(tmp)f.close()return np.mat(data)def cos_sim(x, y):'''余弦相似性input:  x(mat):以行向量的形式存储,可以是用户或者商品y(mat):以行向量的形式存储,可以是用户或者商品output: x和y之间的余弦相似度'''numerator = x * y.T  # x和y之间的额内积denominator = np.sqrt(x * x.T) * np.sqrt(y * y.T) return (numerator / denominator)[0, 0]def similarity(data):'''计算矩阵中任意两行之间的相似度input:  data(mat):任意矩阵output: w(mat):任意两行之间的相似度'''m = np.shape(data)[0]  # 用户的数量# 初始化相似度矩阵w = np.mat(np.zeros((m, m)))for i in range(m):for j in range(i, m):if j != i:# 计算任意两行之间的相似度w[i, j] = cos_sim(data[i, ], data[j, ])w[j, i] = w[i, j]else:w[i, j] = 0return wdef user_based_recommend(data, w, user):'''基于用户相似性为用户user推荐商品input:  data(mat):用户商品矩阵w(mat):用户之间的相似度user(int):用户的编号output: predict(list):推荐列表'''m, n = np.shape(data)interaction = data[user, ]  # 用户user与商品信息# 1、找到用户user没有互动过的商品not_inter = []for i in range(n):if interaction[0, i] == 0:  # 没有互动的商品not_inter.append(i)# 2、对没有互动过的商品进行预测print('not_inter=',not_inter)predict={}dd=np.array(data)ww=np.array(w) if len(not_inter)>0:for i in not_inter:predict[i]=ww[:,user]@dd[:,i].Tprint(predict)return predictdef top_k(predict, k):'''为用户推荐前k个商品input:  predict(list):排好序的商品列表k(int):推荐的商品个数output: top_recom(list):top_k个商品'''pp=pandas.Series(predict)pp1=pp.sort_values(ascending=False)#top_recom = []len_result = len(predict)if k>=len_result:return pp1.iloc[:k]else:return pp1if __name__ == "__main__":# 1、导入用户商品数据print ("------------ 1. load data ------------")data = load_data("data.txt")# 2、计算用户之间的相似性print ("------------ 2. calculate similarity between users -------------"  )  w = similarity(data)# 3、利用用户之间的相似性进行推荐print ("------------ 3. predict ------------" )   predict = user_based_recommend(data, w, 0)# 4、进行Top-K推荐print ("------------ 4. top_k recommendation ------------")top_recom = top_k(predict, 1)print ('top_recom=',top_recom)
------------ 1. load data ------------
------------ 2. calculate similarity between users -------------
------------ 3. predict ------------
not_inter= [2, 4]
{2: 5.1030390226883604}
{2: 5.1030390226883604, 4: 2.2249110640673515}
------------ 4. top_k recommendation ------------
top_recom= 2    5.103039
4    2.224911
dtype: float64

推荐算法 之协同过滤相关推荐

  1. 推荐算法-基于协同过滤的推荐算法

    推荐算法-基于协同过滤的推荐算法 在如今信息量呈爆炸式增长的时代,谷歌百度等搜索引擎为人们查找信息提供了便利,帮助用户快速查找有价值的信息.然而此类查询方式是大众化的,无法根据个人兴趣为用户展示相关的 ...

  2. 经典推荐算法之协同过滤

    本文是个人在学习过程中的总结,如有错误或者不全面的地方,请大家指正,谢谢! 一. 协同过滤算法简介 二. 基于用户的协同过滤算法 2.1 实例 2.2 相似度计算方式 2.2.1 余弦相似度 2.2. ...

  3. 推荐算法——基于协同过滤CF

    https://www.toutiao.com/a6643326861214482957/ 2019-01-06 18:21:09 前边我们已经介绍了推荐算法里的基于内容的推荐算法CB,今天我们来介绍 ...

  4. 推荐算法---FM,协同过滤

    文章目录 目录 1.FM算法产生背景 2.FM算法模型 3.FM算法VS其他算法 4.推荐算法总结 目录 1.FM算法产生背景 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接 ...

  5. 【推荐算法】协同过滤算法——基于用户 Java实现

    只是简单谢了一个Demo,先贴上GitHub地址. https://github.com/wang135139/recommend-system 基本概念就不过多介绍了,相信能看明白的都了解.如果想了 ...

  6. 初谈推荐算法:协同过滤推荐(CF)算法

    本章主要讲解协同过滤推荐(CF)算法的基础 协同过滤简单来说就是利用某兴趣相投,拥有共同经验之群体的喜好来推荐用户感兴趣的信息.个人通过合作机制基于信息相当程度的回应(如评分)并记录下来以达到过滤的母 ...

  7. 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法

    个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...

  8. 推荐算法概述:基于内容的推荐算法、协同过滤推荐算法和基于知识的推荐算法

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 所谓推 ...

  9. 推荐算法之协同过滤和基于内容推荐

    一.协同过滤 基于用户商品评分矩阵来做协同,典型的是根据余弦相似来求向量相似. 协同过滤典型的有两种Usercf和Itemcf,Usercf的思路就是根据a,b用户相似,将b用户喜欢的a用户未浏览过的 ...

  10. 抖音快手小视频推荐算法之--协同过滤算法剖析

    有人说抖音摧毁了中国的年轻人,也有人说抖音改变了自己的生活形态,还有人说抖音让自己的生活过的更加有意义--一千个人眼中,有一千个哈姆雷特,各人有各个行使自己话语的权力,我们无从争辩. 对于做自媒体的同 ...

最新文章

  1. CacheDependency缓存依赖里面的 absoluteExpiration(绝对到期时间),弹性到期时间(slidingExpiration)...
  2. 时间一天一天过去,很快;时间如果过的慢,更是没有意思
  3. c#_异常捕获(try catch finally、throw)
  4. 下载Hibernate中文参考手册2.1版
  5. [mmu/cache]-cache在linux和optee中的应用-InProgress
  6. 阿里规定代码中禁用static修饰SimpleDateFormat,为何?
  7. 史上最全基于vue的图片裁剪vue-cropper使用
  8. spring框架包含的模块
  9. 学生成绩管理系统(C语言版)
  10. html5查看ies文件,5千+ IES光域网文件 5312 IES Files + IES 预览
  11. vs番茄助手的方便功能和便捷快捷键介绍
  12. 【图像识别】基于人工蜂群算法优化卷积神经网络CNN实现图像分类附matlab代码
  13. c语言里除法符号,c语言整除符号(c语言switch用法举例)
  14. 加入Web前端学习还有市场吗?自己是否适合学习前端
  15. C++:重定义:符号重定义:变量重定义(二):解决变量重定义(const static)
  16. 800名科学家联名反对统计学意义,放弃P值“决定论”!
  17. 数据抓包(网络爬虫)-正方教务管理系统登录
  18. 将模板内容存储到数据库,通过URL访问报表
  19. 如何查看夜神、逍遥模拟器的端口
  20. 各地相继设立交易所,抢滩大数据交易市场

热门文章

  1. 「从源码中学习」面试官都不知道的Vue题目答案
  2. Linux监控命令之==netstat
  3. HaProxy介绍,安装及配置
  4. [译] NSCollectionView 入门教程
  5. Java并发编程之:Vector和ArrayList的区别
  6. 2017-01-09
  7. Maven 创建web项目
  8. 如何将文件复制到虚拟机中
  9. 算法提高课-动态规划-树形DP-AcWing 1072. 树的最长路径:dfs写法
  10. PAT甲级1090 Highest Price in Supply Chain:[C++题解]树、结点到根结点的距离、记忆化搜索、树形dp