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
相关产品推荐
相关产品推荐

