Построение Деревьев
Классификации и Регрессии на платформе 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

усеченное дерево:
pl2ûPlot tc2
Òpl2
2
_issf pl2
1
show `pl2 is `tree
ã .pl2: variable bound to tree

_