You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

confusionMatrix报错'matrix must have equal dimensions'求助解决方案

解决confusionMatrix维度不匹配错误

问题重现

连续三次遇到matrix must have equal dimensions错误,搜索相关Stack Overflow答案均不适用。项目中相关代码如下:

### Classification Forecasting Model #5: Multivariate Adaptive Regression Splines
library(earth)
library(plotmo)
library(plotrix)
marsGrid = expand.grid(.degree = 1:2, .nprune = 2:38)
set.seed(100)
marsModelR1 = train(x = data2014, y = pr_var2014, method = "earth", 
                    preProc = c("center", "scale"), tuneGrid = marsGrid)

# 对比2015年的预测分类与观测分类
marsR1Pred = predict(marsModelR1, newdata = data2015)
> dim(marsR1Pred)
[1] 4120    1

经排查,核心数据维度差异为:

length(pr_var2014)
[1] 3808

执行评估代码时触发错误:

marsR1_PR = postResample(pred = marsR1Pred, obs = pr_var2014)
> marsR1_PR
       RMSE    Rsquared         MAE 
         NA 1.24489e-06          NA

marsModelR1_CFM <- confusionMatrix(data = marsR1Pred, reference = pr_var2014,
                                   positive = "Increase")
> marsModelR1_CFM <- confusionMatrix(data = marsR1Pred, reference = pr_var2014,
+                                    positive = "Increase")
Error in confusionMatrix.matrix(data = marsR1Pred, reference = pr_var2014,  : 
  matrix must have equal dimensions

已尝试的无效修复方法

  • 尝试随机采样匹配预测结果长度:
marsModelR1_CFM <- confusionMatrix(data = marsR1Pred, 
                                   reference = sample(pr_var2014, length(marsR1Pred)),
                                   positive = "Increase")
Error in confusionMatrix.matrix(data = marsR1Pred, reference = sample(pr_var2014,  : 
  matrix must have equal dimensions
  • 指定采样4120条数据:
> length(pr_var2014)
[1] 3808
> length(marsR1Pred)
[1] 4120
> marsModelR1_CFM <- confusionMatrix(data = marsR1Pred, 
+                                    reference = sample(pr_var2014, 4120),
+                                    positive = "Increase")
Error in confusionMatrix.matrix(data = marsR1Pred, reference = sample(pr_var2014,  : 
  matrix must have equal dimensions

解决方案

核心问题是逻辑错误:用2014年数据训练模型,却拿2015年的预测结果和2014年的真实标签pr_var2014做对比,两者样本量完全不匹配(4120 vs 3808)。

正确处理步骤:

  1. 找到2015年对应的真实标签变量(例如命名为pr_var2015),确保其长度与data2015行数一致(即4120)
  2. 使用2015年真实标签与预测结果做评估:
# 替换为实际2015年的真实标签变量
marsR1_PR = postResample(pred = marsR1Pred, obs = pr_var2015)
marsModelR1_CFM <- confusionMatrix(data = marsR1Pred, reference = pr_var2015,
                                   positive = "Increase")

若没有2015年真实标签,需重新调整实验设计:

  • 可将2014年数据划分为训练集和验证集,用验证集标签做评估
  • 或调整预测逻辑,确保预测结果与对比标签的样本量严格一致

注:之前的采样方法无效,是因为pr_var2014仅3808条数据,无法在不重复采样的前提下提取4120条;即使开启重复采样,这种对比也无业务意义,属于无效评估。

内容的提问来源于stack exchange,提问作者Marlen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:40:50