Ошибка «входные данные должны иметь одинаковые два уровня» в F_meas в R? - PullRequest
0 голосов
/ 09 апреля 2020
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 уровней

1 Ответ

0 голосов
/ 09 апреля 2020

В этом случае два средства 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)
}  

Надеюсь, это прояснит.

...