首页 > 编程问答 >如何在 python 中使用矩阵分解从 3 个不同的矩阵(2 个交互矩阵和 1 个相似矩阵)创建一个矩阵?

如何在 python 中使用矩阵分解从 3 个不同的矩阵(2 个交互矩阵和 1 个相似矩阵)创建一个矩阵?

时间:2024-07-31 15:21:01浏览次数:13  
标签:python machine-learning matrix-multiplication matrix-factorization

我有 3 个不同大小的矩阵 A、B、C,它们有一些共同的元素。 A(相似性)与 B(交互)有一些共同元素,但与 C(第二交互矩阵)没有共同元素。 B 有一些与 C 相同的元素。我想创建一个基于 B 和 C 的矩阵 M,但提供基于 A、B、C 的输出,就像推荐系统类型一样,其中根据评分、观看次数和偏好推荐电影。例如 A = [1,0,0.85,0,0,0,0.56 0,1,0,0.87,0.6,0.7.0,0 0,0,1,0,56,0,0,0.64,0,0.34] B= [0,0,1,1,0,0 1,0,0,1,0,1 0,1,0,0,1,1] C= [0,0,1,0,1 1,1,1,0,0 0,0,1,0,1] 我希望 M 类似于 M= [0,0,0.85,1,0,0, 1,1,1,.....]

尽管搜索了互联网甚至谷歌学者,但我无法找到一种方法来做同样的事情,我遇到的最多的只是两个矩阵的矩阵分解。


你正在尝试解决一个推荐系统中的有趣问题,该系统结合了三种不同的矩阵:两个交互矩阵和一个相似矩阵。这就是你如何处理它,并整合矩阵分解的概念:

1. 理解你的数据:

  • 矩阵 A(相似度): 这个矩阵似乎表示你的项目之间的相似度(例如,电影)。较高的值表示项目之间更大的相似度。
  • 矩阵 B 和 C(交互): 这些矩阵可能代表用户-项目交互,例如评级(如你的电影推荐系统示例中)或购买。行可以是用户,列可以是项目,并且单元格值表示交互(例如,评级、观看次数或二元交互 - 已观看/未观看)。

2. 矩阵分解的挑战:

  • 传统矩阵分解: 传统方法,如奇异值分解 (SVD) 或非负矩阵分解 (NMF),设计用于分解 单个 矩阵,通常是用户-项目交互矩阵。
  • 多个源: 你的挑战是如何有效地结合来自三个不同矩阵的信息。

3. 一种方法:基于模型的方法

一种有效的方法是使用基于模型的方法,将你的问题构建为一个可以使用机器学习技术学习的预测模型。以下是一种可能的方法:

  • 特征创建: * 来自 A(相似度)的特征: 对于 B 和 C 中的每个项目,创建一个表示其与其他项目的平均相似度的特征向量。你可以使用 A 中的值或使用 A 作为基础来计算更复杂的相似度度量。 * 来自 B 和 C(交互)的特征: 对于 B 和 C 中的每个用户-项目对,你可以直接使用交互值(如果可用)。对于具有多个交互矩阵的情况,你可以考虑以下事项: * 聚合: 如果 B 和 C 代表不同类型的交互,你可以创建聚合特征,例如 B 中用户对项目类型的所有评级的平均值。 * 指示符变量: 创建二进制特征,指示用户是否在矩阵 B 或 C 中与项目进行了交互。

  • 模型训练: * 使用你创建的特征,你可以训练一个监督学习模型(例如,回归、矩阵分解)。 * 你的目标函数将取决于你想要预测的内容: * 评级预测: 如果你的目标是预测矩阵 B 或 C 中的缺失评级,则使用回归模型,其中评级为你的目标变量。 * 推荐(隐式反馈): 如果你的目标是推荐项目(如你的示例中所示),你可以将问题构建为一个分类问题(喜欢/不喜欢)或使用一个旨在对项目进行排名的模型(例如,排名支持向量机)。

  • 矩阵 M: 经过训练的模型本质上代表你的矩阵 M。它将学习从你的特征(从 A、B 和 C 派生)到预测评级或推荐的映射。

4. 实现说明:

  • Python 库: 你可以使用 pandas 来进行数据处理、 scikit-learn 用于各种机器学习模型,以及 Surprise implicit 等库来进行推荐系统。
  • 评估: 使用适当的技术(例如,均方根误差 (RMSE) 用于评级预测,或精度/召回率或 NDCG 用于排名)评估你的模型。
  • 调整和实验: 此方法涉及大量实验。尝试不同的特征工程技术、模型和超参数,以找到最适合你的数据的组合。

Python 代码示例(概念性):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression  # 或其他模型

# 示例数据(你需要使用你的实际矩阵)
A = ...  
B = ...
C = ...

# 1. 特征工程(示例 - 你需要根据你的数据进行调整)
def create_features(B, C, similarity_matrix):
    # ...(从 B、C 和相似度矩阵创建特征)
    return features

# 2. 创建特征矩阵 
features = create_features(B, C, A)

# 3. 数据准备
X = features  # 你的特征
y = ...  # 你的目标变量(例如,来自 B 或 C 的评级)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 4. 模型训练
model = LinearRegression()  # 选择合适的模型
model.fit(X_train, y_train)

# 5. 预测/评估
predictions = model.predict(X_test)
# ...(评估你的模型)

# 现在,你经过训练的 'model' 代表你的矩阵 M - 它可以进行预测。

请记住,这只是一个高级概述。具体的实现将根据你的数据的具体性质、你拥有的交互类型以及你想要实现的目标而有所不同。

标签:python,machine-learning,matrix-multiplication,matrix-factorization
From: 78814865

相关文章

  • Python - Decorators
    Adecoratorisacallablethattakesacallableasinputandreturnsacallable.Thisisthegeneraldefinitionofadecorator.Thecallableinthisdefinitioncanbeafunctionoraclass.Inourinitialdiscussion,wewilltalkaboutdecoratorfunctions......
  • Python捕获一组中的1000个项目进行处理
    我有一个包含数千条记录的大表(可能有3,000到75,000条记录),我将所有数字ID放入排序列表中。我想一次有序地处理一组1000个ID。我如何优雅地获取前1000个和“标签”,设置为“223344到337788”(字典在这里有意义吗,或者只是列表捕获中的第一个/最后一个项目......以跟......
  • 在 Python 中创建和/或检查编号变量的优雅方法
    我是一个试图学习Python的老家伙,所以我最后的编码经验是使用BASIC-不,不是VisualBasic。我理解一些与Python相关的概念,但我处于初级编码阶段,所以我使用“强力”逻辑编写了这个项目-基本上,将字符串分解为单个字母,然后用经典的“”测试每个字母猜单词类型的游戏。......
  • 使用法兰克福 API 和 Python 虚拟环境时出现 404 错误
    我正在VisualStudioCode中用Python制作货币转换器脚本,并且使用法兰克福API,它在几天前一直工作正常,直到现在每次我尝试获取API时都会收到404错误:|||输出:>response=requests.get(f"https://api.frankfurter.app/latest?amount={amount}&from={CF}&to={CT}")>......
  • 我的目标是检测车道并控制车辆保持在车道中央。使用Python
    我目前正在做一个项目,我是一个初学者。并且我需要找到一种方法来使用检测到的车道来控制我的项目车辆保持在两条线之间的中心。img1|||img2我有疑问的话题如下如何判断我的机器人车是否在车道中央?我们应该用什么方法来控制机器人的转向......
  • 【学习笔记】Matlab和python双语言的学习(主成分分析法)
    文章目录前言一、主成分分析法1.主成分分析法简介2.主成分分析法原理3.主成分分析法思想4.PCA的计算步骤二、代码实现----Matlab三、代码实现----python总结前言通过模型算法,熟练对Matlab和python的应用。学习视频链接:https://www.bilibili.com/video/BV1EK41187......
  • 如何使用python输入提示具有相同参数类型但不同返回类型的函数?
    我有一个函数,它的返回类型是tuple[bool,set[int]|str]如果第0项是True,则第1项是结果set[int],否则第1项是一个str,显示失败的原因。是这样的defcallee(para_a:int)->tuple[bool,set[int]|str]:result=set([1,2,3])if......
  • 彻底卸载Python
        前言通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装。所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Python 软件卸载方法1:首先,在安装python时,下载了一个可执行文件,也就是Python的安装包,我们双击它,点击uninstal......
  • 如何使用 Azure Devops API (Python) 提取特定提交的文件内容?
    这就是我想要做的:每次对我的存储库中的特定分支进行提交时,我想提取该提交中更改的所有YAML文件,对其内容进行一些修改,然后将结果作为PR推送到一个新的、独立的分支。我已经弄清楚了这里的大部分步骤,但我陷入了解析提交文件内容部分。我已经尝试过get_item_content和......
  • 在Python中,为什么这个负浮点数能够通过非负while循环测试条件?
    在Python中工作收集用户输入输入需要非负在程序的另一部分成功使用了While条件但现在不明白为什么这个捕获有效输入的测试失败了。print("Howmanygramsofxyzarerequired?")xyz_string=input()xyz=int(float(xyz_string))whilex......