Почему нормальное уравнение дает неправильные результаты с определенным набором функций? - PullRequest
0 голосов
/ 04 января 2019

Моя обычная реализация уравнения дает очень точные результаты как для одного измерения, так и для некоторых конфигураций многомерных задач, включая высокую степень, но она способна решать только те уравнения, где характеристики не умножаются друг на друга.Как только я задействую умножение объектов, результаты получаются неверными.

Количество объектов принимается автоматически, основываясь на входных данных.Размер задается вручную.Если размер задан выше, чем в оценочной функции, избыточные веса становятся очень маленькими, поэтому они не влияют на окончательное решение.

Пример:

F1.x1 + x1 ^ 2 + x1 ^ 3 - решено правильно

F2.x1 + x2 + x3 - решено правильно

F3.x1 + x2 + x3 + x1 ^ 2 + x2 ^ 2 + x3 ^ 2 - решено правильно

F4.x1 + x2 + x3 + x1 ^ 2 + x2 ^ 2 + x3 ^ 2 + x1 * x2 + x2 * x3 + x1 * x3 - неверные результаты

Важно:

Если я попытаюсьРешите F2 с помощью нормального уравнения, настроенного для более высоких измерений, как в F3, решение все еще точное, поскольку ненужные веса просто очень малы - около 10 ^ -12.

НО

Когда я пытаюсь использовать конфигурацию F4 в задаче F3, избыточные веса не минимизируются, как следует ожидать.Все веса функций очень велики и не соответствуют решению.

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

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

weights = matmult(getMatrixInverse(matmult(transposed_x, train_set_x)), 
matmult(transposed_x, expected_outputs))

Я подготовил несколько примеров данных:

1 2 2 22,28

4 2 3 37,97

5 3 3 49,17

6 4 6 66,94

где последний номер - правильный выход - сумма умножений входов и весов.Они были подготовлены с параметрами (первое значение является пороговым значением - не связано ни с одним признаком. В примере это 0.): 0 4,5 6,7 2,19

В конфигурации F1, где аппроксимация найдена правильно, веса составляют: [[0.0], [4.499999999999982], [6.699999999999999], [2.190000000000026]] *

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

В конфигурации F2, где приближение найдено правильно, весовые коэффициенты составляют: [[-9.094947017729282e-13], [4.500000000000059], [6.70000000000141], [2.1899999999996],[-1.8207657603852567e-14], [-3.410605131648481e-13], [-5.684341886080802e-14]]

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

В конфигурации f3:

[[5924.943766734235], [-1322.797113801977], [-953.6679353156687], [-1461.4574242834683], [50.307836789253993996995253995253995995993996000000000000000000000000000000000000000000.], [113.07309358853317], [65.41037286567017], [107.23349570429868], [105.6503964716471]]

Здесь даже порог огромный, не говоря уже о избыточных значениях.Необходимые веса также слишком велики.Сумма умножений даже не близка к решению.

Что может вызвать такую ​​проблему?Как аппроксимировать функции, которые описываются умножением x с использованием нормального уравнения?

...