Image

Освоение нелинейных данных: руководство по SplineTransformer из библиотеки Scikit-Learn.

Прекратите подгонять прямые линии к криволинейным данным. Более разумный способ обработки нелинейностей.

Делиться

afeda1bafdd54f6354f95fbb9e5e57b7

Всем известно, что линейные модели могут быть… ну, довольно жёсткими. Вы когда-нибудь смотрели на диаграмму рассеяния и понимали, что прямая линия просто не подойдёт? Все мы через это проходили.

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

Например, вы смотрите на график «Зависимость потребления энергии от температуры». Это не линия, а кривая. Обычно первым делом мы пытаемся использовать полиномиальную регрессию. Но это ловушка!

Если вы когда-либо видели, как кривая модели выходит из-под контроля на краях графика, вы стали свидетелем «феномена Ранге». Полиномы высоких степеней похожи на малыша с цветным карандашом: они слишком гибкие и недисциплинированные.

Поэтому я собираюсь показать вам вариант, называемый сплайнами. Это отличное решение: более гибкое, чем прямая линия, но гораздо более дисциплинированное, чем полином.

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

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

Проблема многочленов

Представьте, что у нас есть нелинейный тренд, и мы применяем к нему полином x² или x³. Локально всё выглядит нормально, но затем мы смотрим на края данных, и кривая сильно отклоняется. Согласно феномену Рунге [2] , у полиномов высокой степени есть такая проблема: одна странная точка данных на одном конце может вывести всю кривую из равновесия на другом конце.

a649070d56cbda91632d1e00db27e05a

Почему шлицы — это «идеальный» выбор

Сплайны не пытаются подогнать все данные под одно гигантское уравнение. Вместо этого они делят ваши данные на сегменты с помощью точек, называемых узлами . Использование узлов имеет ряд преимуществ.

  • Локальный контроль: то, что происходит в одном сегменте, остается в этом сегменте. Поскольку эти фрагменты являются локальными, странная точка данных на одном конце вашего графика не испортит соответствие на другом конце.
  • Плавность: Для обеспечения идеальной плавности кривой в местах пересечения сегментов используются «B-сплайны» (базисные сплайны).
  • Устойчивость: В отличие от полиномов, они не выходят из-под контроля на границах.

Хорошо. Достаточно разговоров, давайте теперь реализуем это решение.

Реализация с помощью Scikit-Learn

Для этой цели лучше всего подходит SplineTransformer из библиотеки Scikit-Learn. Он преобразует одну числовую характеристику в несколько базисных характеристик, которые простая линейная модель может затем использовать для изучения сложных нелинейных форм.

Давайте импортируем несколько модулей.

import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import SplineTransformer from sklearn.linear_model import Ridge from sklearn.pipeline import make_pipeline from sklearn.model_selection import GridSearchCV

Далее мы создаём данные в виде криволинейных колебаний.

# 1. Создайте синтетические данные с «извилистым» графиком (например, сезонные продажи) rng = np.random.RandomState(42) X = np.sort(rng.rand(100, 1) * 10, axis=0) y = np.sin(X).ravel() + rng.normal(0, 0.1, X.shape[0]) # Постройте график данных plt.figure(figsize=(12, 5)) plt.scatter(X, y, color='gray', alpha=0.5, label='Data') plt.legend() plt.title(«Data») plt.show()

da2c8404a02b1ae2718892c8e957a8c7

Хорошо. Теперь мы создадим конвейер, который запустит SplineTranformer с настройками по умолчанию, а затем Ridge Regression.

# 2. Создание конвейера: Сплайны + Линейная модель # n_knots=5 (по умолчанию) создает 4 сегмента; degree=3 делает его кубическим сплайном model = make_pipeline( SplineTransformer(n_knots=5, degree=3), Ridge(alpha=0.1) )

Далее мы настроим количество узлов для нашей модели. Мы используем GridSearchCV для запуска нескольких версий модели, тестируя различное количество узлов, пока не найдем ту, которая лучше всего работает на наших данных.

# Мы настраиваем 'n_knots', чтобы найти оптимальную настройку param_grid = {'splinetransformer__n_knots': range(3, 12)} grid = GridSearchCV(model, param_grid, cv=5) grid.fit(X, y) print(f»Оптимальное количество узлов: {grid.best_params_['splinetransformer__n_knots']}») Оптимальное количество узлов: 8

Затем мы переобучаем нашу сплайновую модель с оптимальным количеством узлов, делаем прогноз и строим график данных. Давайте также разберемся, что мы здесь делаем, с помощью краткого описания аргументов класса SplineTransformer:

  • n_knots: количество узлов в кривой. Чем больше узлов, тем гибче кривая.
  • Степень: Этот параметр определяет «гладкость» сегментов. Он относится к степени полинома, используемого между узлами (1 — прямая линия; 2 — более гладкая линия; 3 — значение по умолчанию).
  • Узлы: Этот параметр указывает модели, где размещать точки соединения. Например, параметр uniform разделяет кривую на равные участки, а параметр quantile выделяет больше узлов там, где данные более плотные.
    • Совет : используйте параметр 'квантиль', если ваши данные сгруппированы.
  • Экстраполяция: указывает модели, что она должна делать, когда сталкивается с данными, выходящими за пределы диапазона, который она видела во время обучения.
    • Совет : используйте слово «периодический» для циклических данных, таких как календарные или часовые метки.
  • include_bias: Следует ли включать столбец «смещение» (столбец, состоящий из одних единиц). Если вы используете модель линейной регрессии или гребневой регрессии на более поздних этапах обработки данных, эти модели обычно имеют собственный параметр fit_intercept=True, поэтому вы часто можете установить его значение в False, чтобы избежать избыточности.

# 2. Создание оптимизированной сплайновой модели = make_pipeline( SplineTransformer(n_knots=8, degree=3, knots= 'uniform', extrapolation='constant', include_bias=False), Ridge(alpha=0.1) ).fit(X, y) # 3. Прогнозирование и визуализация y_plot = model.predict(X) # Построение графика plt.figure(figsize=(12, 5)) plt.scatter(X, y, color='gray', alpha=0.5, label='Data') plt.plot(X, y_plot, color='teal', linewidth=3, label='Spline Model') plt.plot(X, y_plot_10, color='purple', linewidth=2, label='Polynomial Fit (Degree 20)') plt.legend() plt.title(«Сплайны: гибкие, но дисциплинированные») plt.show()

Вот результат. Использование сплайнов обеспечивает лучший контроль и более гладкую модель, позволяя избежать проблем на концах.

8ddc949faaf0ebcc105d62d673f696ba

Мы сравниваем полиномиальную модель степени 20 со сплайновой моделью. Можно утверждать, что модели меньших степеней лучше подходят для моделирования этих данных, и это будет справедливо. Я протестировал модели до 13-й степени, и они хорошо согласуются с этим набором данных.

Однако именно в этом и заключается суть данной статьи. Когда модель плохо соответствует данным, и нам приходится постоянно увеличивать степень полинома, мы неизбежно столкнемся с проблемой «диких границ».

Применение в реальной жизни

Где это можно реально использовать в бизнесе?

  • Циклы временных рядов: используйте extrapolation='periodic' для таких параметров, как «час дня» или «месяц года». Это гарантирует, что модель будет знать, что 23:59 находится непосредственно рядом с 00:01. С помощью этого аргумента мы указываем SplineTransformer, что конец нашего цикла (час 23) должен замыкаться и совпадать с началом (час 0). Таким образом, сплайн гарантирует, что наклон и значение в конце дня идеально совпадают с началом следующего дня.
  • Дозозависимый эффект в медицине: моделирование воздействия лекарства на пациента. Большинство лекарств следуют нелинейной кривой, где польза в конечном итоге стабилизируется (насыщение) или, что еще хуже, переходит в токсичность. Сплайны являются здесь «золотым стандартом», поскольку они позволяют отображать эти сложные биологические изменения, не загоняя данные в жесткую форму.
  • Доход против опыта: Зарплата часто быстро растет на начальном этапе, а затем стабилизируется; сплайны идеально отражают этот «изгиб».

Прежде чем уйти

Мы многое здесь обсудили, от того, почему полиномы могут быть «нестандартным» выбором, до того, как периодические сплайны решают проблему «полуночного разрыва». Вот краткий обзор, который стоит запомнить:

  • Золотое правило: используйте сплайны, когда прямая линия слишком проста, но полином высокой степени начинает колебаться и приводить к переобучению.
  • Узлы — это ключ: Узлы — это «соединения» вашей модели. Правильное определение их количества с помощью GridSearchCV — это разница между плавной кривой и зазубренным беспорядком.
  • Периодическая мощность: Для любой переменной, изменяющейся циклически (часы, дни, месяцы), используйте параметр extrapolation='periodic'. Это гарантирует, что модель понимает, что конец цикла плавно возвращается в начало.
  • Разработка признаков > Сложные модели: Зачастую простая регрессия Риджа в сочетании со SplineTransformer превосходит сложную модель типа «черный ящик», при этом ее гораздо проще объяснить начальнику.

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

https://gustavorsantos.me

Репозиторий GitHub

Вот полный код этого упражнения, а также несколько дополнительных фрагментов.

https://github.com/gurezende/Studying/blob/master/Python/sklearn/SplineTransformer.ipynb

Ссылки

[1. Документация по SplineTransformer] https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.SplineTransformer.html

[2. Феномен Рунге] https://en.wikipedia.org/wiki/Runge%27s_phenomenon

[3. Документация по MakePipeline] https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html

Источник: towardsdatascience.com

✅ Найденные теги: Scikit-Learn, SplineTransformer, Библиотека, Нелинейные Данные, новости, освоение, Руководство

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых