Деревья Регрессии

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

Исходные данные представлены в Таблице 1:

Таблица 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   

 

_

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