python矩阵相乘_协同过滤:使用共现矩阵来实现

一、前言

各位网友大家好。十分感谢网友们的阅读、点赞和关注。有关机器学习算法协同过滤的共现矩阵问题国外的材料也有阐述,文章思想和数据集也借鉴了国外的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次, 直观的展现如下示意图所示:

37b6b29885eb36df1ea6a7e99278952f.png

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

...

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

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

afe8dd30468a73ff398d199d292e5665.png

2、实现矩阵运算

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

ab05fc49ee88cbf7b281c313212cadb6.png

乘以下列矩阵:

1d98122402b86fde29adce7365bb18e0.png

结果为:

ca50e629ccc12013e467284eda869d87.png

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

e1c8acdfb5b4d91b27c51be85f3c0639.png

3、电影推荐

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值