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_hat
和y_test_hat
)的级别,并且它们具有相同的7个级别
在这种情况下,两种方法是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)
}
希望这可以澄清。