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

R语言F_meas函数报错‘input data must have the same two levels’求助

解决F_meas报错:input data must have the same two levels(多分类场景)

我之前也碰到过这个问题!核心原因是caret包里的F_meas()函数默认是为二分类任务设计的,它会默认检查输入的数据是否只有两个类别水平,但你的任务是7类的多分类,所以就触发了这个报错。下面是具体的解决办法:

1. 显式指定多分类的F1计算方式

F_meas()支持多分类场景,但需要手动设置multiClass参数,常用的选项有两个:

  • multiClass = "macro":计算每个类别的F1分数,然后取算术平均值
  • multiClass = "micro":将所有类别合并,计算全局的F1分数(更侧重样本量多的类别)

修改你的代码,在F_meas()中添加这个参数即可:

F_meas(data = y_test_hat, reference = y_test, multiClass = "macro")

2. 确保预测值与真实值的因子水平完全匹配

虽然你确认了两者有7个水平,但有时候predict()返回的结果可能是字符型,或者因子水平的顺序不一致,这也可能导致潜在的匹配问题。可以提前统一两者的因子类型和水平:

# 将预测结果转换为因子,并对齐真实值的水平顺序
y_test_hat <- factor(y_test_hat, levels = levels(y_test))

修正后的完整代码

set.seed(1)
library(caret)
library(dslabs)
library(dplyr)
data("tissue_gene_expression")
y_ <- tissue_gene_expression$y
test_index <- createDataPartition(y_, times = 1, p=0.5, list = FALSE)
x_train <- tissue_gene_expression$x[-test_index,]
y_train <- tissue_gene_expression$y[-test_index]
x_test <- tissue_gene_expression$x[test_index,]
y_test <- tissue_gene_expression$y[test_index]

fit <- knn3(x_train,y_train,k=1)
y_test_hat <- predict(fit,x_test,type = 'class')

# 统一因子水平
y_test_hat <- factor(y_test_hat, levels = levels(y_test))
# 计算多分类F1分数
F_meas(data = y_test_hat, reference = y_test, multiClass = "macro")

运行上面的代码应该就能正常输出多分类的F1分数了。本质上就是告诉F_meas():"这是个多分类任务,按照多分类的规则计算F1"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:28:10