如何解决R语言randomForest场景下出现的「table of extent 0 x 2」错误
R随机森林场景
table()函数报错table of extent 0 x 2解决方案 报错根因
该报错的本质是table()函数的两个输入参数中,pred向量无有效值,仅test$Survived存在2个不同取值,无匹配的有效pred值进行交叉统计。
与逻辑回归、XGBoost场景表现不一致的原因
逻辑回归、XGBoost的predict()接口默认返回数值型概率结果,pred>0.5的比较运算可正常生成布尔值,转换为整数后仍为有效值。
你调用随机森林预测时指定了type="class",randomForest包该参数下返回的是因子型分类标签,因子与数值0.5做比较运算会直接返回全量NA,经as.integer转换后pred全为无效值,因此触发报错。
修复方案
根据你的使用需求二选一即可:
方案1:按概率阈值判断分类结果
如果需要自定义0.5的分类阈值,修改predict的返回类型为概率,提取正例概率后再做判断:
# 提取Survived=1类的预测概率 pred_prob <- predict(RFmodel.rf, test, type="prob")[,2] pred <- as.integer(pred_prob>0.5) table(pred, test$Survived)
方案2:直接使用随机森林输出的分类结果
如果不需要自定义阈值,直接将返回的因子型分类结果转换为整数即可,无需做大于0.5的判断:
pred <- predict(RFmodel.rf, test, type="class") # 先转字符串再转整数,避免因子水平序号与实际标签不一致 pred <- as.integer(as.character(pred)) table(pred, test$Survived)
前置校验
如果修复后仍报错,可先运行以下代码确认输入向量有效性:
# 查看两个向量的有效非空长度 print(length(na.omit(pred))) print(length(na.omit(test$Survived)))
确认两个输出均大于0即可正常运行table函数。
内容的提问来源于stack exchange,提问作者mimilo
相关产品推荐
相关产品推荐

