Как найти линейную суперпозицию в хаосе

Теперь у нас есть набор точек, которые, хотя и довольно случайны с математической точки зрения, дают нам изображение знака «Дополнительное усиление». Для моего метода мне нужно найти несколько групп, каждая из которых представлена ​​линейной комбинацией базисных функций. Я установил время (t) так, чтобы оно двигалось слева направо, от 0 до 1. Базисными функциями являются [1,t, sin(kt), cos(kt)], поэтому экстраполирующая функция равна (выражение ниже).

Веса (A,B,C,D) можно оценить по набору данных с помощью метода наименьших квадратов, но нам все равно нужно выбрать k. После серии экспериментов я выбрал k=50: это удобный масштаб — длина волны примерно равна ширине буквы.

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

Вот мы и: узкая полоса.

Затем я удалил точки в пределах допуска и повторил процесс. К моему удивлению, после первой итерации ничего не изменилось.

Вы можете видеть, что точки исчезли, но кривая не изменилась. Через некоторое время я понял почему. Это было виброкодирование: я попросил своего железного друга найти кривую, захватывающую наибольшее количество точек; вместо этого он написал код, минимизирующий MSE. У этого подхода есть интересное свойство: при удалении точек, лежащих на кривой, MSE не меняется, поэтому та же кривая остается оптимальной.

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

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

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

Наконец, я закодировал номер группы как вектор статических функций f1,f2,f3 от 0 до 1 и экспортировал набор данных в формате CSV. Ура — теперь у нас есть данные для тестирования режима MSE модели EXTRA BOOST.