Порождение нелинейных регрессионных моделей (пример)
Материал из MachineLearning.
Порождение нелинейных регрессионных моделей — порождение функций, зависящих от параметров и от одной или нескольких свободных переменных. Зависимость от параметров предполагается нелинейной.
Постановка задачи
Задана выборка из  пар 
. Задан набор порождающих функций одного и двух аргументов 
, которые зависят от параметров 
 и свободных переменных 
. Функции гладкие параметрические. Требуется создать алгоритм, порождающий лексикографически упорядоченные суперпозиции возрастающей сложности. Каждая суперпозиция является регрессионной моделью одной независимой переменной. Сравнить качество моделей и регрессионные остатки на порожденном множестве.
Дополнительные предположения
Предполагается, что функции  корректно работают в случае вызова в виде 
.
Интерпретация на языке деревьев
Заметим вначале, что суперпозиция функций  может быть задана двоичным деревом 
, вершины которого 
∈
, корень – самая внешняя функция суперпозиции. Под глубиной вершины будем понимать расстояние от неё до корня. Если у вершины один потомок, то соответствующая функция запишется как 
, если два – то 
, если ноль – то 
 или 
.
Так, дереву А соответствует суперпозиция , а дереву Б – суперпозиция 
.
Альтернативная интерпретация
Эта интерпретация особенно ценна, если нельзя вызвать  в виде 
. Изменение состоит в том, что листья дерева суперпозиции считаются не функциями, а свободными переменными. В этом случае дереву А будет соответствовать суперпозиция 
 дереву Б – суперпозиция 
.
Порождение множества деревьев суперпозиций
Комбинаторная простота этого шага алгоритма заключается в том, что изоморфные деревья задают разные суперпозиции. Однако простые смещения вершин не дают новых деревьев.
Так, деревья А и В различны с точки зрения задаваемых суперпозиций, но деревья А и Б идентичны. Поэтому при машинной реализации можно вообще исключить деревья типа Б, т.е. если из вершины исходит одно ребро, будем «рисовать» его «сверху вниз, справа налево», как в деревьях А и В.
Порождение деревьев осуществим по уровням глубины. Т.е. для задачи порождения деревьев высоты не больше  породим все деревья высоты не больше 
 и запишем их в список 
. В список 
 поместим все деревья высоты ровно 
. Далее возьмём дерево из списка 
, построим всевозможные деревья высоты 
 из него, получаемые добавлением рёбер к вершинам нижнего уровня глубины, и поместим их в конец списка 
. То же проделаем со всеми остальными деревьями списка 
.
Обход дерева суперпозиции
Следующий этап алгоритма – это получение по дереву задаваемой им суперпозиции в виде строки символов { 
 
 
 
}, где 
 и 
 означают 
 и 
.
Для этого совершим обход дерева в глубину и поставим вершине типа А в соответствие конструкцию , вершине В – 
, вершине C – 
.
Уточнение типа функции
Для порождения полного списка возможных суперпозиций, в которых вместо  и 
 стоят 
 и 
, –  нужно, воспользовавшись тем, что 
 может быть вызвана как 
, заменить в каждой строке суперпозиции всеми возможными способами цифру 
 на 
. Это несложно реализуется полным перебором – в каждом вхождении 
 нужно выбрать, заменять её или нет.
Этот этап будет излишним в реализации альтернативного варианта алгоритма.
Подстановка номера функции
Заключительный этап заключается в том, чтобы по двум спискам с номерами функций: в первом – номера , во втором – 
 – и подготовленному на предыдущем шаге списку получить необходимый список суперпозиций. Осуществляется, опять же, полным перебором: рассматриваются все варианты замены 
 в каждом вхождении на номера из первого списка умножить на все варианты замены 
 в каждом вхождении на номера из второго списка.
Список, полученный после этого шага, будет искомым.
Выбор оптимальной модели
Необходимо понять, на каком этапе прекращать работу алгоритма и как из полученного множества моделей выбрать нужную. Вопрос выбора встаёт по той причине, что данные всегда зашумлены и функция, идеально приближающая обучающую выборку, может оказаться слишком сложной и, как следствие, неподходящей. Основная идея в том, чтобы ввести два параметра  и 
, характеризующие функцию. Параметр 
 характеризует степень приближения функцией данных на обучающей выборке (например, сумма квадратов остатков). Параметр 
 характеризует сложность функции. Выбор его может быть самым разнообразным и зависеть от самих функций (например, скорее всего, вес 
 или 
 много больше веса 
), или же от дерева суперпозиции, или от того и другого. При выборе зависимости 
 от дерева суперпозиции также есть варианты среди всевозможных характеристик дерева: высоты 
, числа вершин 
, длины наибольшего пути и др. Одна из характеристик (предложена Е.Владиславлевой) – сумма количеств вершин 
  по всем поддеревьям 
 дерева суперпозиции 
. Под поддеревом понимается дерево, состоящее из некоторой вершины и всех её потомков.
Например, на рисунках Б – Д обведены всевозможные поддеревья дерева А. Сложность по Владиславлевой дерева А равна .
Вычислительный эксперимент
Был проведен эксперимент, значения y на сетке по x от 1 до 5 с шагом 0.5 задавались функцией y = sin(sin(x) + sqrt(|x|)) + exp(-x). Суперпозиции искались в алфавите sin(x), cos(x), x+y, sqrt(x). В связи с этим, слагаемое exp(-x) - шумовой фактор. Искались суперпозиции глубины не более 4, с числом вершин не более 5 и вычислением сложности по методу Владиславлевой. Ниже приведен график в координатах C-R, плюсами отмечены модели с лучшим приближением в своем классе сложности. Число рядом - номер в полном списке порожденных моделей (всего их было 2212).

Далее следуют графики моделей. Красной линией изображен график начальной функции.









 
Ниже, по возрастанию сложности, приведены модели. R - сумма квадратов регрессионных остатков. Функции здесь следует понимать следующим образом: sin(x) - w1*sin(w2*x); cos(x) - w1*cos(w2*x); sqrt(x) - w*sqrt(|x|); a+b - w1*a + w2*b. Здесь w, w1, w2 - параметры функции, оптимизируются matlab-функцией nlinfit.
sin(x)			, R = 	0.8185 
cos(cos(x))		, R = 	0.0612
sin(x)+cos(x)		, R =   0.1001
cos(sin(cos(x)))	, R = 	0.0357
cos(x)+cos(sin(x))	, R = 	5.6*10^-4
cos(sin(x)+sqrt(x))	, R = 	0.0294
sin(x)+(cos(x)+cos(x))	, R = 	2.3*10^-5
sin(sqrt(x))+cos(sin(x)), R = 	1.8*10^-4
(cos(x)+sin(x))+cos(x)	, R = 	5.6*10^-4
cos(sin(sin(x)+sin(x)))	, R = 	0.0016
Исходный код
Скачать программную реализацию можно здесь: [1]
См. также
- Конструктивное построение множества суперпозиций
- Нелинейная регрессия
- Регрессионный анализ
- MVR Composer
Литература
- Стрижов В.В. Поиск параметрической регрессионной модели в индуктивно заданном множестве. [2]
- E. Vladislavleva, G. Smits, and D. den Hertog. “Order of Nonlinearity as a complexity measure for models generated by symbolic regression via Pareto genetic programming”, doi 10.1109/TEVC.2008.926486
|   | Данная статья была создана в рамках учебного задания. 
 
 См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. | 





