Почему кубические сплайны — лучшая модель регрессии.

Введение

В этой статье я рассмотрю кубические сплайны и покажу, насколько они более надежны, чем модели линейной регрессии высокой степени. Сначала я расскажу о математике кубических сплайнов, затем покажу модель на Python и, наконец, объясню феномен Рунге.

Библиотека Python, используемая в этой статье, называется Regressio. Это библиотека Python с открытым исходным кодом, созданная автором для одномерной регрессии, интерполяции и сглаживания.

Во-первых, кубический сплайн — это модель кусочной интерполяции, которая сопоставляет кубический полином каждой части кусочной функции. В каждой точке пересечения двух многочленов первая и вторая производные равны. Это обеспечивает плавную линию прилегания.

Например, на изображении выше мы видим, как можно разделить кубический многочлен. На этом изображении 3 части, и две центральные синие точки — это точки пересечения многочленов. Мы видим, что функция гладкая вокруг этих двух точек и что вся функция непрерывна. Давайте посмотрим на математику подгонки кубических сплайнов.

Математика

Примечание. Все математические функции созданы автором этой статьи.

Допустим, у нас есть три точки данных (2,3), (3,2) и (4,4). При расчете кубического сплайна приходится использовать не менее 2 и не более n-1 кусочных функций. Каждая из этих кусочных функций является регрессионной моделью третьей степени.

Поскольку у нас есть 3 точки данных, нам понадобятся 2 кусочные функции. Мы будем обозначать их как f1(x) и f2(x).

В каждом приведенном выше уравнении у нас есть 4 неизвестные переменные (a, b, c, d). Нам нужно будет составить систему уравнений для вычисления неизвестных в каждом уравнении, поэтому у нас всего 8 неизвестных. Во-первых, мы знаем, что для 1-й и 2-й точек эти точки должны попадать на первую функцию.

Далее мы знаем, что вторая и третья точки должны приходиться на вторую функцию.

А еще мы знаем, что первые производные двух функций должны быть равны при их пересечении.

Тогда мы знаем, что вторые производные пересекающихся сплайнов должны быть равны.

Наконец, мы хотим, чтобы вторые производные в каждой конечной точке были равны 0. Это создает естественный кубический сплайн.

Получившиеся 8 уравнений выглядят следующим образом.

Затем мы можем подключить три точки данных (2,3), (3,2), (4,4).

Приведенные выше уравнения затем можно представить в матричной форме и решить с помощью линейной алгебры. Уравнения представлены в виде матрицы размера 4 x (n - 1). В этом примере матрица будет 8 х 8.

Затем мы можем подставить эти значения обратно в наши два уравнения, и мы получим кусочные функции!

Замечательно, что мы понимаем математику алгоритма, но нам не нужно каждый раз вычислять веса вручную. В ячейке ниже я показываю, как решить уравнение в Numpy.

Библиотека Регрессио

Мы можем сделать это лучше, чем ручной ввод. Мы можем использовать легкую библиотеку Python под названием Regressio. Эта библиотека имеет одномерные модели для регрессии, интерполяции и сглаживания. В следующей ячейке мы устанавливаем библиотеку и генерируем случайную выборку из 200 точек данных.

Затем мы можем просто импортировать модель кубического сплайна и подогнать ее к данным.

Это довольно удивительная модель, так как мы можем представить сильно изменяющиеся отношения, используя комбинацию полиномов низкой степени. С Regressio легко экспериментировать с различными наборами данных и кусочными размерами, и я призываю вас поэкспериментировать с библиотекой. Теперь давайте посмотрим, почему эти модели лучше, чем линейная регрессия.

Феномен Рунге

Подбор сплайн-моделей был именно тем, чем занимался Карл Дэвид Толме Рунге в 1901 году, и он обнаружил, что методы полиномиальной интерполяции, такие как кубический сплайн, превосходят модели линейной регрессии с высокими степенями. Это связано с большими колебаниями на краях интервалов в моделях линейной регрессии. Это хорошо видно на изображении ниже.

На этом изображении оранжевая линия представляет метод интерполяции кубическим сплайном, а синяя линия представляет модель линейной регрессии. Мы видим, что две модели колеблются очень по-разному.

Для модели линейной регрессии, если нам дается точка данных за пределами границ обучающих данных, мы получим выпадающий прогноз. Это связано с тем, что величина производных модели за пределами диапазона обучения чрезвычайно велика по величине. Это не относится к сплайновой модели, и поэтому она более надежна.

Последние мысли

Надеюсь, эта статья показала вам, насколько кубические сплайны более надежны, чем модели линейной регрессии высокой степени. Кубические сплайны часто пропускаются во вводных курсах по регрессии, но этого не должно быть. На мой взгляд, они являются лучшим решением для моделей линейной регрессии из-за того, как они смягчают феномен Рунге.

Я призываю вас изучить больше примеров кубического сплайна и посмотреть другие модели в библиотеке Regressio. Как автор этого пакета, я сделал базу кода очень читабельной для тех, кто пытается понять, как работает каждая модель. Эта библиотека все еще находится в разработке и часто меняется, не стесняйтесь ставить звезду, чтобы следить за ее изменениями, или вносить свой вклад самостоятельно!

Если вам нужен код блокнота для этой статьи, вы можете найти его здесь.

Рекомендации