Моделирование
Как проблему 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 после их написания в бинарном режиме), где оптимизированный критерий поиска - это наименьшие квадраты ошибок с образцами обучения.
Извините, но этот ответ бесполезен. Вы приняли одно неверное заявление MrRoy и отреагировали таким образом, что это не имеет смысла, не доходя до реальной точки вопроса, а именно о моделировании. –