如何在电影评分推荐系统中用NMAE评估模型准确率?
计算NMAE评估电影推荐模型(R语言)
没问题!我来帮你用R计算归一化平均绝对误差(NMAE),以此评估你的电影推荐模型表现。
首先明确你给出的NMAE公式:
NMAE = (∑|预测评分 - 真实评分|) / [n × (最大评分 - 最小评分)]
其中:
- ∑|predicted rating – real rating|:所有样本的绝对误差之和
- n:样本总数
- max rate - min rate:评分体系的范围(比如电影评分常用1-5,范围就是4)
步骤1:加载你的数据集
先确保数据正确导入R中,你提供的数据集可以直接用以下代码加载:
movies <- structure(list(`Movie Code` = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Votes = c(1371L, 2193L, 2294L, 39L, 50L, 110L, 144L, 153L, 208L, 296L, 372L, 377L, 474L, 500L, 508L, 515L, 539L), `Real rate` = c(2.5, 2, 2, 5, 4, 4, 3, 4, 3, 4, 3, 3, 2, 4, 4, 4, 3), `Predicted Rate` = c(2L, 3L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 4L, 3L, 3L, 3L, 4L, 3L, 3L, 3L)), class = "data.frame", row.names = c(NA, -17L))
步骤2:计算NMAE
下面是完整的计算代码,我会分步骤标注说明:
# 1. 计算每个样本的绝对误差 movies$absolute_error <- abs(movies$`Predicted Rate` - movies$`Real rate`) # 2. 统计所有绝对误差的总和 sum_abs_error <- sum(movies$absolute_error) # 3. 获取样本总数 n <- nrow(movies) # 4. 确定评分范围:两种方式可选 # 方式A:从当前数据集的真实评分中提取最大最小值 min_rate <- min(movies$`Real rate`) max_rate <- max(movies$`Real rate`) rate_range <- max_rate - min_rate # 方式B:如果你的评分体系是固定的(比如1-5分),直接设置固定值 # min_rate <- 1 # max_rate <- 5 # rate_range <- max_rate - min_rate # 5. 计算最终的NMAE值 nmae <- sum_abs_error / (n * rate_range) # 打印结果(保留4位小数) cat("模型的NMAE值为:", round(nmae, 4), "\n")
结果说明
- 用方式A(当前数据真实评分范围是2到5,差值为3)计算,NMAE≈0.1863
- 用方式B(固定1-5分评分体系,差值为4)计算,NMAE≈0.1397
通常更推荐用方式B——即使当前数据集没覆盖到全评分范围,固定用体系的完整范围计算,能让NMAE结果更具通用性,方便和同体系的其他模型做对比。
内容的提问来源于stack exchange,提问作者Debjyoti Das
相关产品推荐
相关产品推荐

