Исходные данные представлены в Таблице 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/regres3.+
Загружаем данные:
dataûRead '/home/vova/Trees/paper5.csv'
Òdata
5 15
Будем строить дерево регрессии для переменной, представленной в первом столбце (Таблица 1). Так как по умолчанию программа построения дерева регрессии считает зависимой переменной переменную в последнем столбце, то необходимо преобразовать исходные данные. Для этого воспользуемя функцией Parse{formula;data}, где аргумент formula задает зависимую и предикторные переменные. Будем строить дерево для X1 в зависимости от всех предикоров, поэтому аргумент formula будет иметь вид ‘X1~.’(В случае, если нам нужно использовать только ряд предикторов, например X2 и X3, то в качестве formula следует задать строку ‘X1~X2+X3).
data2ûParse{'X1~.';data}
Для построения дерева регрессии воспользуемся
функцией Grow{i;data}. Первый аргумент i используется во внутренних рекурсивных вызовах Grow{}, поэтому он при основном вызове не задается:
tûGrow{;data2}
Òt
27 7
t[0;]
< 1
< 3
< 1.5
< 2
< 3
<
5.866666667
<
10.61333333
Для графического изображения полученно дерева регрессии
его необходимо преобразовать соответствующим образом к типу ‘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
14 10.52
11 10.5175
10 10.415
9 10.52
7 10.52
6 10.52
5 9.698367347
4 9.698367347
3 10.56556122
2 10.93881078
1 14.06925548
График поведения ошибки на кросс-проверке:
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
5.1 5.1 4.4 5.4
5 7.2 6.1 6.8 5.6 7.2 6.4 6 6.7 5.5 5.5
_