2015-06-13 4 views
2

I split Train данные комплект и Test данные комплект.ROC-кривая в R с использованием пакета rpart?

Я использовал пакет rpart для CART (классификационное дерево) в R (только поезд комплект). И я хочу провести анализ ROC с использованием пакета ROCR.

Переменная `n. (ответная вариация ... 1 = да, 0 = нет):

> Pred2 = prediction(Pred.cart, Test$n.use) 
Error in prediction(Pred.cart, Test$n.use) : 
    **Format of predictions is invalid.** 

Это мой код. Что проблема? А что такое право type ("class" или "prob"?

library(rpart) 
train.cart = rpart(n.use~., data=Train, method="class") 

Pred.cart = predict(train.cart, newdata = Test, type = "class") 

Pred2 = prediction(Pred.cart, Test$n.use) 
roc.cart = performance(Pred2, "tpr", "fpr") 

ответ

6

prediction() функция из ROCR пакета ожидает предсказанные «успех» вероятностей и наблюдаемый фактор неудач против успехов. Для того чтобы получить первое что вам нужно применять predict(..., type = "prob") к rpart объекту (т.е. не"class"). Однако, как это возвращает матрицу вероятностей с одной колонкой для каждого класса ответа вы должны выбрать «успех» колонки класса.

в вашем примере, UNF ortunately, не воспроизводимый Я использую kyphosis данные из rpart пакета для иллюстрации:

library("rpart") 
data("kyphosis", package = "rpart") 
rp <- rpart(Kyphosis ~ ., data = kyphosis) 

Затем вы можете применить функцию prediction() из ROCR. Здесь я использую данные в выборки (обучение), но то же самое может быть применено из образца (тестовые данные):

library("ROCR") 
pred <- prediction(predict(rp, type = "prob")[, 2], kyphosis$Kyphosis) 

И вы можете визуализировать кривую ROC:

plot(performance(pred, "tpr", "fpr")) 
abline(0, 1, lty = 2) 

Или точность по обрезаниям:

plot(performance(pred, "acc")) 

Или любое из других участков и резюме поддерживаемых ROCR.

ROCR plots

+0

Удивительный ответ! Откуда у вас все эти знания? – user1700890

+0

И что такое класс «успеха»? Для набора данных «кифоз» это довольно очевидный случай «настоящего», но если мы работаем с результатами 'a' и' b'. Какой из них следует назвать успешным? – user1700890

+0

Ваш выбор. Оба будут работать, и вы можете выбрать, какой из них вам легче интерпретировать. –

1
library("ROCR") 
Pred.cart = predict(train.cart, newdata = Test, type = "prob")[,2] 
Pred2 = prediction(Pred.cart, Test$n.use) 
plot(performance(Pred2, "tpr", "fpr")) 
abline(0, 1, lty = 2) 

выше фрагмент кода будет работать для вас.

для получения более подробной информации обратитесь к ссылке: Classification Trees (R)

Смежные вопросы