Подгонка сплайна к данным с дубликатом x с использованием scipy (Python)

Я пытаюсь подогнать сплайн к своим данным, имеющим 5700 выборок данных (с повторяющимися значениями x, т.е. x: горизонтальная ось), используя функцию «interp1d» из пакета «scipy» в python. Я пробовал использовать сплайн более низкого порядка (k=1) и квадратичный сплайн (k=2), кубический сплайн (k=3). И я потрясен, увидев странную реакцию «сплайна» на мои данные. Хотя сплайн при «k = 1» имел некоторый смысл, но до смешного переоснащает его (квадратичные и кубические сплайны работают слишком плохо). В моем первом испытании я использовал Полиномиальная аппроксимация данных и результатов была обнадеживающей. Я ожидал, что подбор сплайнов даст лучшие результаты, чем полиномиальный подбор.Это результат с сплайны. Подскажите пожалуйста, где я не прав?


person B Singh    schedule 09.01.2017    source источник


Ответы (1)


Если в наборе данных есть отдельные точки с уникальными значениями для каждого значения X, эффективный вес каждой точки данных равен 1,0. Однако, если одна точка данных в этом наборе данных дублируется или копируется, как только эта единственная точка данных будет иметь эффективный вес 2,0.

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

Если некоторые точки данных в этом наборе данных имеют уникальные значения X, а некоторые появляются более одного раза, один из подходов состоит в том, чтобы усреднить значения Y для «повторяющихся» точек данных, чтобы каждая точка снова имела эффективный вес 1,0. Иногда это может работать в конкретном случае, который я описываю.

person James Phillips    schedule 10.01.2017
comment
Спасибо, Джеймс, я удалил дубликаты с их средним значением. и теперь сплайн на k = 1 такой же, как k = 2 такой же, как k = 3. Разве я не должен ожидать, что производительность «квадратичного», «кубического» сплайна лучше, чем «линейного»? или есть какая-то другая проблема? - person B Singh; 10.01.2017
comment
Я предлагаю несколько простых тестов, легко программируемых. Извлеките меньший набор данных со значениями min(x), max(x), mean(x) и несколькими другими точками, которые должны работать должным образом. Затем попробуйте набор данных с каждой сотой точкой данных, затем с каждой 10-й, а затем по одному с каждой второй точкой данных. Анализ заключается в определении влияния количества точек данных на результаты. Это займет очень мало времени и должно быть информативным. Глядя на ваш график, я подозреваю, что сплайны работают правильно и сглаживают шум в данных. - person James Phillips; 11.01.2017