Как выбрать модель для многомерной полиномиальной регрессии?

У меня есть такие образцы данных:

1.5  2.3  4.2  0.9
1.2  0.3  1.2  0.3
0.5  1.3  2.2  1.5
4.2  2.5  3.2  6.2

Определим

x1 = {1.5  2.3  4.2  0.9}

и x11 = 1.5, x12 = 2.3, x13 = 4.2, y1 = 0.9 (каждое право удержания является образцом).


Теперь мне нужно применить полиномиальную регрессию к этим данным, скажем, используя x fit y.

Я знаю модель для одной переменной x (одномерная):

a*x1^3 + b*x1^2 + c*x1 + d = y

В моем случае это будет:

a*(x11, x12, x13, x14)^3 + b*(x11, x12, x13, x14)^2 + c*(x11, x12, x13, x14) + d = y

Проблема в том, как расширить (x11, x12, x13, x14)^3, если y одномерный?


person WoooHaaaa    schedule 19.07.2013    source источник


Ответы (2)


(Заявление об ограничении ответственности: я не математик и определенно не эксперт в этом вопросе.)

Краткая версия: я думаю, что это невозможно.

Более длинная версия:

Насколько я понимаю, вы пытаетесь возвести в степень векторы (например, (x11,x12,x13,x14)^3).

Векторы - это матрицы - здесь четырехмерные векторы можно рассматривать как 4x1 матрицы. Насколько мне известно, возведение в степень матриц «разрешено» только для квадратичных матриц (nxn). Причина в том, что коммутативное свойство (A*B = B*A) является не выполняется для неквадратичных матриц.

То, что вы ищете, может быть что-то вроде «регрессии векторных функций» и / или «аппроксимации поверхности».

Надеюсь, это немного помогло.

* Йост

person Jost    schedule 19.07.2013
comment
Извините, но этот ответ бесполезен. Вы приняли единственное неверное заявление MrRoy и ответили бессмысленным тоном, но не добрались до реальной сути вопроса, а именно о моделировании. - person ; 19.07.2013

Моделирование

В качестве проблемы моделирования вы должны выбрать между тем, как перейти от четырехмерного пространства к одномерному. Вам нужна функция проекции: p: - R 4 -> R

Функция проецирования отметит часть ваших знаний о вашей проблеме. Если вы знаете, что первые параметры имеют гораздо большее значение, чем другие, вы можете перейти к функции p: (x, y, z, t) -> x и забыть о других параметрах. В общем, у вас нет этих знаний. Поэтому мы используем бритву Оккама (это часть машинного обучения в этой моделирующей части задачи. ), и сделайте модель как можно более простой, но не более того:

Я выбираю для примера: (1) p: (x, y, z, t) -> x + y + z + t

поэтому каждый параметр образца будет одинаково влиять на результат; Другим решением может быть: (2) * p: (x, y, z, t) -> x * y * z * t *

Но с преобразованием журнала на (2) вы получите что-то похожее на (1).

Вы выбираете функцию обучения: f (x) -> a * x ^ 3 + b * x ^ 2 + c * x + d. Вы должны позаботиться о том, как применять проекцию к функции обучения. Применение буквы p к модели не дает:

f(x,y,z,t) -> 
  a*(x + y + z + y)^3 +
  b*(x + y + z + y)^2 +
  c*(x + y + z + y)^1 +
  d*(x + y + z + y)^0

но :

f(x,y,z,t) ->
  a*(x)^3 + b*(x)^2 + c*(x) + d +
  a*(y)^3 + b*(y)^2 + c*(y) + d +
  a*(z)^3 + b*(z)^2 + c*(z) + d +
  a*(t)^3 + b*(t)^2 + c*(t) + d

Это свойство независимости ваших параметров: вы применяете функцию обучения к каждому параметру. Знание того, что параметры связываются как уже закодированные, как часть выбора оператора '+' между каждым параметром.

Итак, решение проблемы изучения параметров (a1, b1, c1, d1) должно подойти для вашей модели:

f(x,y,z,t) ->
  a1*(x^3 + y^3 + z^3 + t^3) +
  b1*(x^2 + y^2 + z^2 + t^2) +
  c1*(x + y + z + t) +
  d1

Решение

При работе с gnuplot эти проблемы можно решить с помощью функция соответствия (глава 7).

f(x,y,z,t) = a1*(x**3 + y**3 + z**3 + t**3) + b1*(x**2 + y**2 + z**2 + t**2) + c1*(x + y + z + t) + d1
fit f(x,y,t,u) 'mydata.dat' using 1:2:3:4 via a1, b1, c1, d1

NB1: при использовании подгонки имя переменной 'z' зарезервировано для чего-то другого (помощь подгонки); поэтому вы должны переименовать переменную при использовании 'fit'.

NB2: mydata.dat содержит образцы, в которых каждый столбец разделен таблицей. Вы также должны добавить известное значение y для каждого образца. Итак, в mydata.dat есть 5 столбцов. (и имя файла должно заканчиваться на '.dat').

Итак, вот файл mydata.dat, который я использую:

1.5 2.3 4.2 0.9 1.0
1.2 0.3 1.2 0.3 2.0
0.5 1.3 2.2 1.5 3.0
4.2 2.5 3.2 6.2 4.0

Как видите, я добавил столбцы «y», которые дают ожидаемое значение для каждого образца. Затем запустите инструмент в консоли:

gnuplot> f(x,y,z,t) = a1*(x**3 + y**3 + z**3 + t**3) + b1*(x**2 + y**2 + z**2 + t**2) + c1*(x + y + z + t) + d1
gnuplot> fit f(x,y,t,u) 'mydata.dat' using 1:2:3:4 via a1, b1, c1, d1

[many lines]

After 9 iterations the fit converged.
final sum of squares of residuals : 8.7617e-31
abs. change during last iteration : -2.9774e-30


Exactly as many data points as there are parameters.
In this degenerate case, all errors are zero by definition.

Final set of parameters 
======================= 

a1              = 0.340413       
b1              = -2.7489        
c1              = 6.44678        
d1              = -4.86178

Итак, проблема решена.

Gnuplot - это открытый исходный код, поэтому просмотр исходного кода может стать хорошей отправной точкой, если вы хотите написать его самостоятельно. Вы также можете начать с "help fit" в gnuplot; речь идет о нелинейном (NLLS) алгоритме Марквардта-Левенберга нелинейных наименьших квадратов. .

Реализация эквивалентных алгоритмов на самом деле не требует всех этих математических знаний (математика нужна только для скорости). Все, что вам нужно сделать, это алгоритмы поиска (например, генетика; изменяет параметры a1-d1 случайным образом после их записи в двоичном формате), где критерием оптимизированного поиска является метод наименьших квадратов ошибок с обучающими выборками.

person Galigator    schedule 19.07.2013