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)。
正确处理步骤:
- 找到2015年对应的真实标签变量(例如命名为
pr_var2015),确保其长度与data2015行数一致(即4120) - 使用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
相关产品推荐
相关产品推荐

