2013-07-19 4 views
0

У меня есть образцы данных, как это:Как выбрать модель для многомерной многочленной регрессии?

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.2y1 = 0.9, (каждый селезенка образец).


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

Я знаю, что модель для одной x переменных (1-измерения):

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 является одноразмерным?

ответ

0

(Отказ от ответственности: Я не математик, и, безусловно, не является экспертом в этой вещи.)

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

Longer версия:

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

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

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

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

* Jost

+2

Извините, но этот ответ бесполезен. Вы приняли одно неверное заявление MrRoy и отреагировали таким образом, что это не имеет смысла, не доходя до реальной точки вопроса, а именно о моделировании. –

0

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

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

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

Я выбираю для примера: (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. Вы должны позаботиться о том, как вы применяете проекцию к функции обучения. Appling «р» модели не дает:

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 

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

Таким образом, решение проблемы обучения параметров (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 этой проблемы можно решить с fit function (глава 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: при использовании установите имя переменной «г» зарезервирован для чего-то другого (помощь подходят); поэтому вы должны переименовать переменную при использовании «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) Marquardt-Levenberg algorithm.

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

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