Predict() ничего не возвращает для type = class отлично работает с type = raw

Данные обучения считываются из двух файлов: один только с независимыми переменными (df.train), а другой — только с фактическими соответствующими значениями класса (df.churn). Эти значения только -1 и 1. Затем я удаляю все столбцы NA и удаляю повторяющиеся столбцы, если они найдены.

Я собираю два набора данных в один кадр данных с независимыми значениями и значениями класса и запускаю naiveBayes() без ошибок и.

Используя модель, созданную naiveBayes, я запускаю функцию predict() и замечаю, что выходные данные с type = «raw» выглядят как разумные данные — в большинстве случаев эти вероятности относительно близки к 0 или 1. Я показываю первые 6 элементов ниже.

Я ищу фактические значения предсказанного класса для ввода в предсказание () с целью получения графика ROC и значения AUC. Я снова запускаю функцию predict() с типом = "class", и здесь я практически ничего не получаю.

    df.train <- read.csv('~/projects/kdd_analysis/data/train_table.csv', header=TRUE, sep=',')
    df.churn <- read.csv('~/projects/kdd_analysis/data/sm_churn_labels.csv', header=TRUE, sep=',')
    df.train <- df.train[,colSums(is.na(df.train))<nrow(df.train)]
    df.train <- df.train[!duplicated(lapply(df.train,c))]
    df.train_C <- cbind(df.train, df.churn)
    mod_C <- naiveBayes(V1~., df.train_C, laplace=0.01)
    pre_C <- predict(mod_C, df.train ,type="raw", threshold=0.001)

Я преднамеренно запускаю функцию predict() для обучающих данных, потому что подумал, что это будет интересно. Ниже значения, полученные из предсказать(), кажутся мне "разумными"... то есть, по крайней мере, они не кажутся полной ерундой. Я еще не сравнивал их с фактическими значениями и ожидаю, что для этого будут использоваться явные значения класса, заданные с помощью функции predict().

    head(pre_C)
           -1            1
    [1,] 9.996934e-01 3.066321e-04
    [2,] 9.005501e-07 9.999991e-01
    [3,] 1.000000e+00 3.468739e-11
    [4,] 9.362914e-01 6.370858e-02
    [5,] 9.854649e-01 1.453510e-02
    [6,] 9.997680e-01 2.320003e-04

Итак, это предсказывает () снова запускает ту же модель - я не понимаю, как это возможно, чтобы она ничего не возвращала:

    > pre_C <- predict(mod_C, df.train ,type="class", threshold=0.001)
    > pre_C
    factor(0)
    Levels:

person Kirk Fleming    schedule 08.06.2012    source источник


Ответы (1)


Решение состоит в том, чтобы привести столбец переменных класса к типу factor:

df.train_C$V1 <- factor(df.train_C$V1)

затем запустите модель и predict(), как и раньше. Я больше ничего не менял, и этот мод «исправил» проблему. Предоставлено Энди Лиау из r-help.

person Kirk Fleming    schedule 09.06.2012
comment
Неплохо бы (дополнительно) включить ссылку на сообщение в архивах r-help, которое на это ответило. - person Brian Diggs; 11.06.2012