嗨,我是这个领域的新手。我对推荐算法中的准确性方法感到困惑。据我所知,用户项目的评分矩阵是稀疏的。我知道我可以使用一些算法来预测缺失值和模型,如 RMSE 或 MAE,但是如何计算准确度?
对于某些项目,我不知道他们的真实评级。如果我使用 0,它会增加错误,不是吗?
感谢帮助!
嗨,我是这个领域的新手。我对推荐算法中的准确性方法感到困惑。据我所知,用户项目的评分矩阵是稀疏的。我知道我可以使用一些算法来预测缺失值和模型,如 RMSE 或 MAE,但是如何计算准确度?
对于某些项目,我不知道他们的真实评级。如果我使用 0,它会增加错误,不是吗?
感谢帮助!
与其他机器学习模型相比,实际上很难衡量推荐系统的准确性,因为我们没有明确的方法来判断推荐是否准确。但是有一种方法可以计算准确度。
您将拥有users * items
用于训练推荐系统的矩阵。
如果您假设您有10
用户和20
项目。
您的矩阵将具有维度10 * 20
。
您可以做的是将矩阵划分为训练和测试数据集。
例如,您可以4 * 4
从矩阵的右下端剪切一个子10 * 20
矩阵。在剩余矩阵上训练推荐系统,然后针对4 * 4
cut 进行测试。您将获得预期的输出和系统的输出。使用它们,您可以轻松计算precision
、recall
和F1 score
。
您应该从矩阵的各个部分中切割出各种维度的子矩阵,然后计算分数以了解您的系统整体表现如何。
您只能检查您拥有数据的项目用户的准确性。最好在不属于训练的验证集数据上测试准确性。然后,如果这是回归问题,您可以使用 RMSE 检查您的准确性;如果这是分类问题,则可以使用 AUC、log_loss、混淆矩阵等。因此,您只需要获取数据集中标记项目的平均误差即可。
由于在真实数据集中我们有很多缺失值(有时甚至 90%),为了有更好的预测,我们通常用 NA 替换缺失值。然后我们将 NA 替换为用户评分或项目评分的平均值,甚至两者的平均值。如果将缺失值替换为 0,则会低估影响结果的那些数据。例如,如果我们将矩阵命名为 ds:
#compute the user means
user.mean = matrix (rowMeans (ds, na.rm = T), nrow(ds) ,ncol(ds))
# replace the missing values (NA) with the user means
ds[is.na(ds)] = user.mean[is.na(ds)]