R中的F_meas中错误'输入数据必须具有相同的两个级别?

问题描述 投票:0回答:1
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')

F_meas(data = y_test_hat,reference = y_test)

上面是我的代码,它总是返回错误:

Error in F_meas.default(data = y_test_hat, reference = y_test, ) :
 input data must have the same two levels

尽管我已经检查了这两个数据(y_test_haty_test_hat)的级别,并且它们具有相同的7个级别

r machine-learning knn multi-level
1个回答
0
投票

在这种情况下,两种方法是2,而不是7。因此,为了正确使用F_meas,您需要先置换小脑,结肠,子宫内膜,海马,肾脏,肝脏,胎盘,并为F_meas提供两个水平否则将无法正常工作。

#' @rdname recall
#' @importFrom stats complete.cases
#' @export
recall.default <- function(data, reference, relevant = levels(reference)[1], 
                       na.rm = TRUE, ...) {
  if (!is.factor(reference) | !is.factor(data)) 
stop("input data must be a factor")
  if (length(unique(c(levels(reference), levels(data)))) != 2) 
stop("input data must have the same two levels") # where we see two means 2
  if (na.rm) {
cc <- complete.cases(data) & complete.cases(reference)
    if (any(!cc)) {
  data <- data[cc]
  reference <- reference[cc]
}
}
  xtab <- table(data, reference)
 recall.table(xtab, relevant = relevant)
}  

希望这可以澄清。

© www.soinside.com 2019 - 2024. All rights reserved.