2016-02-22 5 views
1

Я хотел экстраполировать некоторые данные, которые у меня были, как показано на рисунке ниже. Синяя линия - это исходные данные, а красная линия - экстраполяция, которую я хотел.Почему я получаю непересекающиеся данные, когда я пытаюсь экстраполировать после использования полиномиальной регрессии

enter image description here

Для использования регрессионного анализа, я использовал функцию polyfit:

sizespecial = size(i_C); 
endgoal = sizespecial(2); 
plothelp = 1:endgoal; 

reg1 = polyfit(plothelp,i_C,2); 
reg2 = polyfit(plothelp,i_D,2); 

Где i_C и i_D являются векторы, которые представляют собой исходные данные. Я расширил данные, используя этот код:

plothelp=1:endgoal+11; 

for in = endgoal+1:endgoal+11 
    i_C(in) = (reg1(1)*(in^2))+(reg1(2)*in)+reg1(3); 
    i_D(in) = (reg2(1)*(in^2))+(reg2(2)*in)+reg2(3); 
end 

Однако выходной график я сейчас:

enter image description here

Я не понимаю, почему дополнительный надрез вводится (обведено красным). Не стесняйтесь просить меня прояснить любую деталь по этим вопросам и поблагодарить вас за все ваши ответы.

+0

Трудно сказать без ввода ввода для 'i_C' и' i_D'. Также обратите внимание, что вы можете использовать 'polyval' вместо цикла' for'. –

+1

Я предлагаю построить подходящий полином над реальными значениями, чтобы увидеть, подходит ли то, что вы ожидаете от него. Похоже, что он соответствует полиноминалу второй степени (третий аргумент 'polyfit'). Если вы посмотрите на данные, добавленные значения, похоже, имеют смысл для полинома второй степени. Как уже сказал @ItamarKatz, лучше использовать ['polyval'] (http://www.mathworks.com/help/matlab/ref/polyval.html) для оценки. – Matt

+2

Ваши данные, вероятно, не очень хорошо подходят для квадратиков (вы увидите, что это вы принимаете предложение Мэтта и замышляете полный регрессированный полином над вашими исходными данными).Таким образом, вы можете либо увеличить порядок полинома, либо рассмотреть альтернативу, например, кубическую сплайн-интерполяцию с экстраполяцией (http://www.mathworks.com/help/matlab/ref/interp1.html). В противном случае это зависит от вашего проблемного домена), но может иметь смысл скорее провести линейную регрессию по последним точкам данных 'x' в вашей серии. Вы можете настроить 'x' в качестве параметра. – Dan

ответ

3

enter image description here

Что я представляю себе, что происходит в том, что вы пытаетесь уместить полином второго порядка над всеми вашими данными. Я предполагаю, что этот многочлен будет очень похож на кривую, которую я нарисовал оранжевым. Если вы следуете рекомендациям Мэтта из его комментариев и запишите свой регрессированный полином над вашими исходными данными (а не только экстраполированную часть), вы должны это подтвердить.

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

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

Другой вариант может состоять в том, чтобы скорее подогнать кривую сплайна и экстраполировать на нее. Вы можете использовать функцию interp1, указав 'spline' или 'pchip'.

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

+0

Используйте только полиномы более высокого порядка, если это действительно имеет смысл делать это, когда рассматриваются базовые данные. – Bernhard

+0

Не могли бы вы рассказать о методе сплайновой кривой, о котором вы говорите? –

+1

@SharanDuggirala Документы для 'interp1' должны объяснить все, что вам нужно знать. Сплайны - это метод интерполяции, который сопоставляет естественные кривые * через * все ваши точки данных (т. Е. Кривая будет проходить непосредственно через каждую точку ваших данных), и поэтому это отличная концепция от регрессии. Тем не менее, это также позволяет вам экстраполировать, чтобы он мог быть для вас ... – Dan

 Смежные вопросы

  • Нет связанных вопросов^_^