百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

协同过滤:使用共现矩阵来实现(协同过滤算法步骤)

off999 2024-10-14 12:13 19 浏览 0 评论

一、前言

各位网友大家好。十分感谢网友们的阅读、点赞和关注。有关机器学习算法协同过滤的共现矩阵问题国外的材料也有阐述,文章思想和数据集也借鉴了国外的Mahout之类的文章, 网上的文章我也看过,但是感觉总结的不算直观通俗,这里本文章通过自己的想法图文并茂的给大家展示。看在我花了很大的心思的份上,请大家关注、收藏、点赞啊,有了大家的支持,我才能花更多的心思把国外传过来的算法变得通俗易懂甚至改良,支持我在缩短您学习成本的同时也是在支持科技的发展,在此先表示对网友们的感谢!

二、算法的学习目的和环境

通过此文章了解协同过滤算法如何构建基于物品的同现矩阵;会使用Python进行矩阵运算。实验环境:

1、Python3.6以上版本

2、Python的基本数学库numpy、pandans、matplotlib、sklearn

3、Python的PyCharm开发环境

三、场景描述和共现矩阵的原理

1、场景描述

以前的文章也提到过,尽量使用通俗易懂的场景把抽象的东西变成直观的东西。现有7部科幻电影,电影编号及其电影名称如下:

M001 《星际穿越》

M002 《进入五维空间》

M003 《寻找第二地球》

M004 《VR虚拟世界的女友》

M005 《时间机器》

M006 《机器人女友》

M007 《月球基地》

下面是用户对上述科幻电影的观看记录及其评价行为的数据,数据字段之间使用Tab键分隔,数据的格式为:

用户编号 电影编号 评分(满分5分)

样本数据如下:

U001 M001 5.0

U001 M002 3.0

U001 M003 2.5

U002 M001 2.0

U002 M002 2.5

U002 M003 5.0

U002 M004 2.0

U003 M001 2.0

U003 M004 4.0

U003 M005 4.5

U003 M007 5.0

U004 M001 5.0

U004 M003 3.0

U004 M004 4.5

U004 M006 4.0

U005 M001 4.0

U005 M002 3.0

U005 M003 2.0

U005 M004 4.0

U005 M005 3.5

U005 M006 4.0


现用户U003看了M001、M004、M005、M007,请分析上述数据再为用户U003推荐1部精彩电影。

2、共现矩阵的原理

该原理参考了国外机器学习Mahout实战给读者列举下,大家尽量看,看不懂不要紧,我接下来以实际的图形并茂的例子阐述,然后你回过头来再看这段话估计就迎刃而解了。

基于物品的推荐系统,给出了计算任意一对物品之间相似度的方法。假设我们要计算出每个物品对之间的相似性,并将其结果导入一个巨大的矩阵,这应该是一个方阵,行和列的数目等于数据模型中的物品数。每行(以及每列)表达在一个特定物品和所有其它物品之间的相似性。事实上,把这些行和列看作向量有助于理解。该矩阵还是沿着对角线对称的,因为物品X与 Y之间的相似性与物品Y和X之间的相似性是一样的,所以行X和列Y上的条目也会等于在行Y和列X上的条目,这就是我们要构建的同现矩阵。

同现矩阵不是计算每个物品对之间的相似性,而是计算在某些用户偏好值列表中每个物品对共同出现的次数,以此来填充矩阵。例如,如果有9个用户都为物品X和Y做出了一些偏好,那么X和Y同时出现9次。共现关系与计算相似度很像:两个物品同时出现次数越多,它们越有可能相关或者相似。


四、数据准备

数据上面已经给出了。有的网友说,现在机器学习不是喂大数据吗?这种观点是错误的,在实际项目中,获取样本数据的成本是非常大的,大数据样本也是不现实的,很简单比如你有一火车皮的机器零件需要检验,难道你把整个车皮的零件都作为样本吗?显然不是,这时候我们可以经过抽样来计算总体的数学期望、方差等指标,也可以采用T分布、F分布等手段近似的代替正态分布,满足条件还可以采用强化学习等手段,当然你的集群很牛,都是多核CPU、GPU居多,使用大数据训练模型也未尝不可。

在学习中千万别为了大数据而大数据,典型的数据几十条、几百条足够了。从数据中能清晰看见我们处理的过程这是学习者追求的。

五、协同过滤共现矩阵的实现过程

1、 填充同现矩阵的数据

(1) 计算M001和“M001、M002、M003、M004、M005、M006、M007”同时出现的次数

从样本数据可以看出M001共出现5次;M001和M002同时出现3次;M001和M003同时出现4次,以此类推。

例如 M001和M002同时出现3次, 直观的展现如下示意图所示:


(2) 计算M002和“M001、M002、M003、M004、M005、M006、M007”同时出现的次数

...

(3) 计算M007和“M001、M002、M003、M004、M005、M006、M007”同时出现的次数

运算后的结果如下图所示的方阵:


2、实现矩阵运算


实现上述运算后的矩阵和用户U003矩阵相乘,如下图所示:


乘以下列矩阵:


结果为:


Python实现矩阵相乘的过程:

import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
B = np.array([[1,2,3],[4,5,6]])
print(np.dot(A,B) )

A x B = C ,结果为:

[[ 9 12 15]

[19 26 33]

[29 40 51]]

C 的第1行为 :1x1+1x4 1x2 + 2x5 1x3+2x6

C 的第2行为 :3x1+4x4 3x2 + 4x5 3x3 +4x6

C 的第3行为 :5x1 + 6x4 5x2 +6x5 5x3 + 6x6


3、电影推荐

经过上述计算,除去用户U003看过的电影,第3部没有看过并且权值最高为24.5,所以应该推荐给U003编号为M003的电影《寻找第二地球》 。

由于代码功能很单一,主要是计算用户ID同时出现的个数然后填表和矩阵运算,比较简单,请自行完成。

相关推荐

python入门到脱坑经典案例—清空列表

在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...

python中元组,列表,字典,集合删除项目方式的归纳

九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...

Linux 下海量文件删除方法效率对比,最慢的竟然是 rm

Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...

数据结构与算法——链式存储(链表)的插入及删除,

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...

Python自动化:openpyxl写入数据,插入删除行列等基础操作

importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...

在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)

通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...

Python 批量卸载关联包 pip-autoremove

pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...

用Python在Word文档中插入和删除文本框

在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...

Python 从列表中删除值的多种实用方法详解

#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...

Python 中的前缀删除操作全指南(python删除前导0)

1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...

每天学点Python知识:如何删除空白

在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...

Linux系统自带Python2&yum的卸载及重装

写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...

如何使用Python将多个excel文件数据快速汇总?

在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...

【第三弹】用Python实现Excel的vlookup功能

今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...

python中pandas读取excel单列及连续多列数据

案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...

取消回复欢迎 发表评论: