TGViewer
Матчасть Матчасть @matchast · 881 subscribers
Post #278 2.72K
Недавно мне понадобилось для калибровки регрессионных моделей обучить формулу y=f(X), которая хорошо бы приближала заданное облако точек (возможно, нелинейно) и была бы монотонно возрастающая и по возможности гладкая.

В scikit-learn нашлись три примерно подходящие модели:
1) Старая добрая LinearRegression: монотонная и максимально гладкая, но неспособная описывать нелинейности.
2) IsotonicRegression: монотонная и умеющая в произвольные нелинейности, но очень негладкая и склонная к переобучению.
3) HistGradientBoostingRegressor: нечто кусочно-постоянное, вроде IsotonicRegression, но приспособленное и для многомерных Х.

Мне захотелось создать что-то среднее: модель, которая была бы настолько же гибкая, как IsotonicRegression, но в которой можно было бы задавать степень гладкости (так, что максимально гладкая версия сходилась бы к линейной регрессии). Для этого можно обучать линейную регрессию над базисом из множества непрерывных кусочно-линейных ступенек, минимизируя одновременно MSE и средний модуль разностей крутизны соседних ступенек, с ограничением, что крутизна каждой ступеньки – неотрицательная. Чем больше вес второй компоненты в функции потерь, тем более гладкая получится в результате функция.

Попробовал имплементировать эту идею, получилось ровно 100 строк кода:
- Ступеньки такие: слева и справа от – константа, между ними – линейная функция.
- Границы ступенек делаем в каждом наблюдении, если данных мало, и в процентилях (либо с равномерным шагом), если датасет большой.
- Веса ступенек инициализируем из Ridge-регрессии: она тоже добавляет гладкости, но минимизирует не разность крутизны соседних ступенек, а сумму квадратов крутизны ступенек.
- Дальше "правильную" функцию потерь минимизируем с помощью scipy.optimize.
- После обучения модель можно сконвертировать в IsotonicRegression, которая делает predict эффективнее (под капотом очень быстрая numpy.interp).

Код тут: https://gist.github.com/avidale/83998aa24e5d9c40c894e9e39c9f9c86
  • 🔥 8
  • 👍 4
  • ❤ 1
  • 💩 1
More from @matchast
  1. Sep 10, 2024Классный хабр от tech_priestess про внутреннюю размерность фигур и пространств эмбеддингов…
  2. Sep 4, 2024Почему почти у всех полезных матриц маленький ранг? В нашей с вами жизни матрицы малого ра…
  3. Sep 5, 2022Ищем в нашу команду Mathshub талантливых инструкторов в сфере machine learning! Кто мы? Ma…
  4. Aug 11, 2022photo post
  5. Aug 8, 2022Представляю бесплатный интенсив из 20 занятий по питону и математике для начинающих. Орган…
  6. Jul 18, 2022Слева: линейная, изотоническая, и сглаженная изотоническая регрессии. Справа: в зависимост…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →