(Роками пізніше) кусково-лінійні функції - це сплайни 1-го ступеня, які можна сказати більшості слюсарів.
Наприклад, scipy.interpolate.UnivariateSpline може бути запущений k=1
та згладжуючий параметр s
, з яким вам доведеться грати - див.
scipy-interpolation-with-univariate-splines .
У Matlab дивіться,
як вибрати вузли .
Додано: знайти оптимальні вузли непросто, оскільки місцевих оптимів може бути багато. Натомість ви даєте UnivariateSpline ціль s
, суму помилки ^ 2, і дозволите їй визначити кількість вузлів. Після установки, get_residual()
ви отримаєте фактичну суму помилки ^ 2 та get_knots()
вузлів. Невелика зміна s
може сильно змінити вузли, особливо при високому шумі - ymmv.
Сюжет показує пристосування до випадкової кусочно-лінійної функції + шум для різних s
.
Докладніше про встановлення постійних констант див. У розділі
Виявлення кроків . Чи можна це використовувати для pw лінійних? Не знаю; починаючи з диференціації галасливих даних, підвищить рівень шуму, неправильно.
Інші тестові функції та / або посилання на папери або код будуть вітатися. Пара посилань:
кусково-лінійна регресія з вузлами як параметри
Лінійні сплайни дуже чутливі до місця розміщення
вузлів для вибору вузлів для кубічної регресії
Це складна проблема, і більшість людей просто вибирають вузли методом проб і помилок.
Одним із популярних підходів є використання замість цього санкціонованих регресійних сплайнів.
Додано березень 2014 року:
Динамічне програмування
- це загальний метод для проблем із вкладеними підпроблемами, як це:
optimal k lines
= optimal k - 1 lines up to some x
+ cost of the last line x to the end
over x (all x in theory, nearby x in practice)
Динамічне програмування є дуже розумним, але чи може він перемогти грубу силу + евристику для цього завдання?
Дивіться чудові записки курсу Еріка Демейна в розділі
MIT 6.006. Вступ до алгоритмів
також розрізненої лінійною регресією Google,
також синдром Джона Генрі.