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

Posted

技术标签:

【中文标题】如何在训练有素的 SVD 模型上验证测试集?【英文标题】:How to validate Test set on trained SVD model? 【发布时间】:2019-10-09 22:01:38 【问题描述】:

我正在学习使用 奇异值分解 (SVD) 在 Python 中对电影推荐进行矩阵分解的教程: here

使用 SVD,使用 SVD 将数据集近似为三个部分:M ≈ U ⋅ S ⋅ Vt

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

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

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

【问题讨论】:

如果您在浏览器中搜索“机器学习模型训练测试验证”,您会找到比我们在此处管理的更能解释这一点的参考资料。 【参考方案1】:

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

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

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

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

如果您的数据集很小而不是拆分为 3 个数据集,您可以拆分为训练和测试,并使用 cross validation 微调您的 k

【讨论】:

是的,我知道这一点。我要问的是,在 SVD 的情况下,您如何“评估这些近似值在验证集上的性能”。如何在经过训练的 SVD 矩阵上应用测试集? 我不确定我是否正确理解了您的问题,但您通过测量 RMSE 来评估验证集。关于第二个问题,我将其理解为“如何将 SVD 从训练集应用到测试集?”。如果这是问题,那么在您计算出您的 U、S、Vt 之后:X_test_transformed = np.dot(X_test, Vt.T) 解释为 here @StanisławWilczyński,如果我理解正确,不应该每次都用不同的 k 重新训练 SVD。可以使用 k=50 训练 SVD,然后可以使用内部矩阵仅计算前 10 个分量(无需完全重新训练矩阵)。例如,请参阅this tutorial for R。作者使用了一些我无法在 Python 中理解和重现的 varimax 变换。

以上是关于如何在训练有素的 SVD 模型上验证测试集?的主要内容,如果未能解决你的问题,请参考以下文章

python:在验证集上调整模型的参数

机器学习数据集划分-训练集,验证集,测试集

如何在 pyspark 上创建分层拆分训练、验证和测试集?

在使用 k 折交叉验证训练训练数据后如何测试数据?

评估机器学习模型的几种方法(验证集的重要性)

调参-网格搜索(Grid Search)