Построение Деревьев Классификации и Регрессии на платформе R+A+.

 

1. Начало работы.

Загружаем А+ скрипт в рабочую область

 

$load s

$load /home/vova/aplus/iface5

В корневом контексте присутствует переменная _Destination:

$vars

_argv _Destination

_Destination

/home/vova/aplus/tmp/

, указывающая на директорию временного хранения файлов, создаваемых в процессе работы программы, «рабочий каталог». Поскольку эти файлы не предназначены для непосредственного использования пользователемб выделим для них директорию /tmp/, откуда , впоследствии, их можно удобно удалить. Измените знвчение данной переменной в соответствии со своими предпочтениями. Например

_Destination<-/home/vova/mytpm/

Для правильной работы программы обязательным является наличие ‘/’ к конце пути.

 

2. Загрузка данных в рабочую область А+.

Для этой цели присутствует функция Read, принимающая два аргумента:

Read{filename;flag}

, где filename указывает на абсолютный путь к файлу с данными, а flag может принимать два значения 1 или 0. В случае, если первая строка исходного файла содержит имена переменных, следует указать 1 в качестве значения аргумента flag. В противном случае указывается 0.  Структура файла – CSV(CommaSeparatedValues). В данном случае разделитель это ‘,’.

Data<-Read{‘/home/vova/aplus/CSV/dt600f’;0}

Òdata

 17 1130

Тип переменной data есть `box.

 

3. Построение Дерева Регресии.

Функция GrowTree принимает единственный аргумент. Это символьная строка, являющаяся точной копией вызова функции построения дерева в системе R:

     GrowTree ‘tr<-tree(V4~.,data)’

Здесь, tr – имя переменной, которая будет содержать результирующее дерево и которая будет доступна в корневом контексте рабочей области А+ ;  data – имя глобальной переменной корневого контекста, содержащая данные, которые будут использованы для построения дерева. V4~. – формула в формате R, в данном случае означающая «построить дерево для даннах, представленных в столбце V4 в зависимости от всех остальных столбцов».

В результате работы функции GrowTree в рабочей области (корневой контекст) появляется новая переменна tr, содержащая построенное дерево:

     $vars

 _argv tr _Destination data

     ТÒtr

 13 8

Строки tr представляют собой вершины полученного дерева:

tr[0]

tr[0]

<  1

< root

<

< 1130

< 19580.58000

< 535.6372

<

<

tr[1]

<  2

< V17:

< 10comp,11comp,12comp,5comp,6comp,7comp,8comp,9comp

< 853

< 4833.46300

< 533.7322

<

<

В нашем рабочем каталоге появляются 3 файла:

 

$ ls /home/vova/aplus/tmp/

data.csv    tr_obj    tr_tbl

 

data.csv – файл наших данных; tr_tbl – простой текстовый фай, содержащий представление дерева в виде получаемом в R посредством:

 

>tr

или

>print.tree(tr)

 

; tr_obj – файл, представляющий собой наше дерево в виде обьекта типа “tree” в формате R. Этот обьект можно использовать в среде R посредством:

 

>library(tree)

>load(“/home/vova/aplus/tmp/tr_obj”)

 

Ниже представлно содержимое файла tr_tbl:

     sys.readmat{'/home/vova/aplus/tmp/tr_tbl'}

 1) root 1130 19580.58000 535.6372                                                     

   2) V17: 10comp,11comp,12comp,5comp,6comp,7comp,8comp,9comp 853  4833.46300 533.7322 

     4) V9 < 541.5 185  1010.82900 531.8724                                            

       8) V11 < 351.2 21    59.69143 526.9429 *                                        

       9) V11 > 351.2 164   375.47780 532.5037 *                                       

     5) V9 > 541.5 668  3005.52500 534.2473                                            

      10) V17: 5comp,7comp,8comp 242   755.16710 533.0174 *                            

      11) V17: 10comp,11comp,12comp,6comp,9comp 426  1676.29800 534.9460 *             

   3) V17: 1comp,2comp,3comp,4comp 277  2119.96700 541.5032                            

     6) V7 < 544.5 55   293.52440 538.0255 *                                           

     7) V7 > 544.5 222   996.40590 542.3649                                            

      14) V13 < 351.3 137   399.62920 541.3401 *                                       

      15) V13 > 351.3 85   221.05690 544.0165 *

                                       

4. Кросс проверка полученного дерева

     CvTree 'cv<-cv.tree(tr,FUN=prune.tree)'

Единственным аргументом функции CvTree является одноименный вызов R функции.

Tr - имя А+ переменной, содержащей построеноое дерево

Cv – имя А+ переменной, которая будет создана в корневом контексте А+ сессии и которая бедет содержать результат кросс проверки.

$vars

 _argv cv tr _Destination data

Òcv

 7 3

cv

7          4237.590758   -Inf       

6          4719.591245    375.7198077

5          5583.014721    574.0598263

4          5583.014721    575.660172

3          6978.829446    817.1088681

2          6978.829446    830.0367662

1         19593.95078   12627.14844

cv[;0] – число вершин дерева

cv[;0] – значение ошибки на кросс проверке

cv[;0] – параметр усечения для соответствующего размера

    

5. Прунирование. Получение дерева «правильного» размера.

     Prune 'tr2<-prune.tree(tr,k=576)'

(значение для параметра усечения k=576 – из результата кросс проверки)

     $vars

 tr2 _argv cv tr _Destination data

Полученное усеченное дерево доступно в переменной tr2

 

6. Предсказание значений зависимой переменной для новых обьектов.

Для одной точки:

dd<-(10;20;30;40;50;60;70;80;590;100;110;120;130;140;150;160;'6comp')

     Predict{tr2;dd}

534.2473

Для всех точек исходных данных:

r<-Predict¡{<tr2;<@1ôdata}

Òr

 1130

     >10Ùr

< 542.3649

< 542.3649

< 542.3649

< 542.3649

< 538.0255

< 542.3649

< 542.3649

< 542.3649

< 542.3649

< 542.3649

 

7. Графическое изображение деревьев.

Исходное дерево:

     pl<-Plot tr

     show `pl is `tree

г    .pl: variable bound to tree

 

 

Усеченное дерево:

     pl2<-Plot tr2

     show `pl2 is `tree

г    .pl2: variable bound to tree

 

 

 

8. Деревья Классификации.

$load s

$load /home/vova/aplus/iface5

Получение данных:

 

     dataûRead{'/home/vova/aplus/CSV/Iris.csv';0}

Òdata

 5 150

data[;É1]

< Setosa

<  49

<  30

<  14

<  2

Построение дерева:

 

GrowTree 'tc<-tree(V1~.,data)'

     $vars

tc _argv _Destination data

Кросс проверка полученного дерева:

 

CvTree 'cv<-cv.tree(tc,FUN=prune.tree,method="misclass")'

$vars

tc _argv cv _Destination data

cv

6    7 ¢Inf

4    8    0

3   10    2

2   88   44

1  112   50

 

Усечение до «правильного» размера:

     Prune 'tc2<-prune.tree(tc,method="misclass",k=3)'

Предсказание классовой пренадлежности:

rû Predict¡{<tc;<@1ôdata}

     Òr

 150

     10Ùr

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

< Setosa

 

Графическое представление:

исходное дерево:

plûPlot tc

     Òpl2

 2

     _issf pl

 1

     show `pl is `tree

ã    .pl2: variable bound to tree

 

 

усеченное дерево:

plPlot tc2

Òpl2

 2

_issf pl2

 1

show `pl2 is `tree

ã    .pl2: variable bound to tree

 

 

 

                                                                      

 

 

 

 

_

Сайт создан в системе uCoz