Правила тестирования, сгенерированные пакетом Rpart

Я хочу программно протестировать одно правило, сгенерированное из дерева. В деревьях путь между корнем и листовым (конечным узлом )можно интерпретировать как правило.

В R мы могли бы использовать пакет rpartи сделать следующее: (В этом посте я буду использовать набор данных iris, только для примера )

library(rpart)
model <- rpart(Species ~., data=iris)

. С помощью этих двух строк я получил дерево с именем model, класс которого rpart.object(rpart. документация, стр. 21 ). Этот объект содержит много информации и поддерживает различные методы. В частности, объект имеет frameпеременную (, доступ к которой можно получить стандартным способом:model$frame)(то же)и методpath.rpath(rpartдокументация, стр. 7 ), которая дает вам путь от корневого узла к интересующему узлу(nodeаргумент в функции)

row.namesпеременной frameсодержит номера узлов дерева. Столбец varдает разделенную переменную в узле, yvalподобранное значение и yval2вероятности класса и другую информацию.

> model$frame
           var   n  wt dev yval complexity ncompete nsurrogate     yval2.1     yval2.2     yval2.3     yval2.4     yval2.5     yval2.6     yval2.7
1 Petal.Length 150 150 100    1       0.50        3          3  1.00000000 50.00000000 50.00000000 50.00000000  0.33333333  0.33333333  0.33333333
2         50  50   0    1       0.01        0          0  1.00000000 50.00000000  0.00000000  0.00000000  1.00000000  0.00000000  0.00000000
3  Petal.Width 100 100  50    2       0.44        3          3  2.00000000  0.00000000 50.00000000 50.00000000  0.00000000  0.50000000  0.50000000
6         54  54   5    2       0.00        0          0  2.00000000  0.00000000 49.00000000  5.00000000  0.00000000  0.90740741  0.09259259
7         46  46   1    3       0.01        0          0  3.00000000  0.00000000  1.00000000 45.00000000  0.00000000  0.02173913  0.97826087

Но только помеченные как в столбце varявляются конечными узлами (. листья). В данном случае это узлы 2, 6 и 7.

Как упоминалось выше, вы можете использовать метод path.rpartдля извлечения правила (. Этот метод используется в пакете rattleи в статье Кредитный рейтинг Sharma следующим образом:

Дополнительно модель сохраняет значения предсказанного значения в

predicted.levels <- attr(model, "ylevels")

Это значение соответствует столбцу yvalв наборе данных model$frame.

Для листа с номером узла 7 (и номером строки 5 )прогнозируемое значение равно

> ylevels[model$frame[5, ]$yval]
[1] "virginica"

. и правило

> rule <- path.rpart(model, nodes = 7)

 node number: 7 
   root
   Petal.Length>=2.45
   Petal.Width>=1.75

Таким образом, правило может быть прочитано как

If Petal.Length >= 2.45 AND Petal.Width >= 1.75 THEN Species = Virginica

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

> hits <- subset(iris, Petal.Length >= 2.45 & Petal.Width >= 1.75)

а затем вычислить матрицу путаницы

> table(hits$Species, hits$Species == "virginica")

             FALSE TRUE
  setosa         0    0
  versicolor     1    0
  virginica      0   45

(Примечание. :Я использовал тот же набор данных радужной оболочки для тестирования )

. Как я могу оценить правило программно? Я мог бы извлечь условия из правила следующим образом

> unlist(rule, use.names = FALSE)[-1]
[1] "Petal.Length>=2.45" "Petal.Width>=1.75" 

Но как я могу продолжить отсюда? Не могу использовать функцию subset

Заранее спасибо

ПРИМЕЧАНИЕ:Этот вопрос был сильно отредактирован для большей ясности

7
задан rcs 29 January 2013 в 08:58
поделиться