2015-07-14 4 views
-1

Используя простой пример набора данных «iris», с «trainData» для обучения модели Random Forest и «testData» для прогнозирования/классификации видов.Случайный лес: код R для идентификации конкретных правильно предсказанных записей

# 1 - Create a Random Forest Model. 
iris.rf <- randomForest(Species ~ ., data=trainData) 
# 2 - Predict using Model and Test data set 
iris.pred <- predict(iris.rf, testData) 
# 3 - Show Crosstab results: 
table(observed = testData$Species, predicted = iris.pred) 

Вопрос:
Шаг № 3 выше,
дает таблицу с общим числом
тестовых записей, классифицированных правильно и неправильно.

Что такое код R, чтобы получить список конкретных записей в «Testdata»,
, которые были:
(а) предсказал правильно -или-
(б)НЕ предсказано правильно,
(т. Е. Предсказанные $ Speces ошибочны).

Причина моего вопроса:
Я пытаюсь выяснить
если есть ценная информация
, глядя на конкретных, отдельных записей
, которые были неправильно классифицированных в случайном Лесная сессия.

Может быть, это является дополнительным (возможно) способом
повышения точности
предсказания Random Forest ...

+0

Возможно, я здесь глуп, но у вас есть «истинный позитив» с проблемой классификации, которая не является бинарной? – Jason

ответ

0

За мой комментарий, я думаю, что вам нужен двоичный переменный результат смотреть в специфичность и чувствительность, но вот начало вашего ответа:

library(randomForest) 
data(iris) 
set.seed(44) 
indexes = sample(2, length(iris), replace = TRUE, prob = c(0.3,0.7)) 
trainData<-iris[indexes==2,] 
testData<-iris[indexes==1,] 
iris.rf <- randomForest(Species ~ ., data=trainData) 
iris.pred <- predict(iris.rf, testData) 

truePositives<-which(iris.pred==testData$Species) 
falsePositives<-which(iris.pred!=testData$Species) 
truePositives 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22 23 24 
[24] 25 26 27 28 29 30 
falsePositives 
[1] 15 

head(testData[truePositives,]) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1   5.1   3.5   1.4   0.2 setosa 
6   5.4   3.9   1.7   0.4 setosa 
11   5.4   3.7   1.5   0.2 setosa 
16   5.7   4.4   1.5   0.4 setosa 
21   5.4   3.4   1.7   0.2 setosa 
26   5.0   3.0   1.6   0.2 setosa 
+0

Спасибо, Джейсон. Возможно, я использовал неправильную терминологию. Я имел в виду идентификацию конкретных записей тестов, показанных в таблице: (наблюдаемый = testData $ Виды, предсказанные = iris.pred) ## предсказано ## отмечено setosa versicolor virginica ## setosa 8 0 0 ## versicolor 0 6 1 ## virginica 0 1 10 – user39150

+0

Для моего примера вы можете запустить 'table (testData $ Species, iris.pred)' – Jason