Исходные данные представлены в Таблице 1:
|
5.1 |
0.5 |
Aaaaa |
3 |
1 |
|
5.1 |
4.5 |
Bbbb |
3 |
1 |
|
4.4 |
4 |
Ccc |
3 |
1 |
|
5.4 |
3.5 |
Ccc |
4.5 |
1 |
|
5 |
3.5 |
Dd |
4 |
1 |
|
7.7 |
5 |
Aaaaa |
1.5 |
2 |
|
6.1 |
3.5 |
Bbbb |
3.5 |
2 |
|
6.8 |
0.5 |
Bbbb |
2.5 |
2 |
|
5.6 |
4 |
Bbbb |
3.5 |
2 |
|
6.7 |
5 |
Aaaaa |
1.5 |
2 |
|
6.4 |
1 |
Dd |
0.5 |
3 |
|
6 |
4.5 |
Ccc |
2.5 |
3 |
|
6.7 |
2 |
Ccc |
3 |
3 |
|
5.5 |
4.5 |
Dd |
5 |
3 |
|
5.5 |
0.5 |
Dd |
0.5 |
3 |
Загружаем
А+ скрипт в рабочую область:
$load /home/vova/Trees/class3.+
Загружаем данные:
dataûRead '/home/vova/Trees/paper5.csv'
Òdata
5 15
Будем строить дерево регрессии для переменной, представленной в последнем
5-ом столбце (Таблица 1). Будем строить дерево для X5 в
зависимости от предикоров X2 и X3, Для этого воспользуемя функцией Parse{formula;data}, где
аргумент formula задает зависимую и предикторные переменные:
data2ûParse{'X5~X2+X3';data}
Для построения дерева регрессии воспользуемся
функцией Grow{i;data}. Первый аргумент i используется во внутренних рекурсивных вызовах Grow{}, поэтому он при основном вызове не задается:
tûGrow{;data2}
Для графического изображения полученно дерева
регрессии его необходимо преобразовать соответствующим образом к типу ‘slotfiller’. Для этого
воспользуемся функцией Plot{tree}:
trûPlot
t
Явно укажем свойства отображения дерева:
propsû(`class;`tree;`font;font;`nodebg;`red;`nodefg;`white)
`tr has props
`.tr
Отобразим результат:
show `tr

Для проведения кросс-проверки используем
функцию CrossVal{K;tree;data}, принимающей 3 аргумента. K – параметр
кросс-проверки, tree – проверяемое дерево, data – исходные
данные.
cvûCrossVal{10;t;data2}
cv
7 3
4 3
2 8
1 15
График поведения ошибки на кросс-проверке:
cû`cv
show `c is `graph
`c has
(`title;'Cross Validation')
`.c

Как видно из графика в качестве дерева
правильного размера следует выбрать дерево с 4 вершинами. Усечем исходное
дерево до 4 вершин и графически изобразим полученный результат:
t2ûCut{4;t}
tr2ûPlot t2
`tr2 has props
`.tr2
show `tr2

Для предсказания классовой принадлежности
новых данных по значениям их предикторных переменных воспользуемся функцией Predict{newdata;tree}, где newdata представляет матрицу новых данных, а tree – построенное дерево.
prûPredict{data2;t}
Øpr
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
_