如何在训练好的 SVD 模型上验证测试集?

问题描述 投票:0回答:2

我正在使用 奇异值分解 (SVD) 学习有关 Python 中电影推荐的矩阵分解的教程: 这里

使用 SVD,使用 SVD 将数据集近似为三个组成部分:

M ≈ U ⋅ S ⋅ Vt


  • 所以你从左边(M)到三个组件,然后再返回,
  • 现在您可以使用大约。
  • M 作为推荐矩阵。

现在,我想在这个矩阵上使用训练/测试验证集,因为你需要找到 M 的最佳 k(数字)近似值。

如何在经过训练的模型上应用单独的测试集来获得未见过的测试集的预测? 这个的数学/算法是什么? 谢谢

python machine-learning artificial-intelligence svd
2个回答
1
投票

拟合任何机器学习模型的标准程序如下:

  • 您将数据集随机分为三部分:训练集(60% 的数据)、验证集(20% 的数据)、测试集(20%)。
  • 使用您的训练数据来训练任何模型
  • 您使用验证集来选择超参数并在不同模型中选择最佳的
  • 您在测试集上评估您的模型,以了解它将如何在新的未见数据上执行

因此,根据您的情况,您应该执行以下步骤:

  • 将数据集分为这 3 部分(如果您使用 sklearn,则可以使用
    train_test_split
    ,如此处
  • 您使用不同的
    k
    值运行 SVD,并评估这些近似值在验证集上的性能,并选择 RMSE 值最低的
    k
    (如教程中所述)
  • 在测试集上应用所选模型,看看它在未见过的数据上的表现如何

如果您的数据集很小,而不是拆分为 3 个数据集,您可以拆分以进行训练和测试,并使用 交叉验证 来微调您的

k


0
投票

通常不会这样写,但为了简单起见,我将如何回答你的问题:

A
train 矩阵被分解为三个矩阵的乘积:

A
火车
= U @ S @ VT

一旦确定 A 的最佳 k(数字)近似值。

A
火车
≈ U
k
@ S
k
@ VT
k

要查找火车组的投影或新坐标,请执行以下操作:

A
火车
@ VT
k
.T
A
火车
.T @ VT
k

要查找测试集的投影或新坐标,请执行以下操作:

A
测试
@ VT
k
.T
A
测试
.T @ VT
k

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.