существует ли функция python (или matlab), которая достигает минимального MSE между заданным набором выходного вектора и вычисленным набором вектора?

#python #matlab #optimization

#python #matlab #оптимизация

Вопрос:

У меня есть несколько простых задач для решения, и интересно, есть ли какой-нибудь более умный / лучший способ добиться следующего:

Вот сценарий. У меня есть набор заданных векторов ‘h (x)’ и две функции, f (x, a) и g (x, b). Эти две функции принимают аргументы ‘a’ и ‘b’ и создают одномерные векторы. Теперь я хочу сравнить данный вектор ‘h (x)’ с вектором, созданным путем добавления f (x, a) и g (x, b). моя конечная цель — найти аргументы ‘a’ и ‘b’, которые дают минимальный MSE между вектором ‘h (x)’ и вектором f (x, a) g (x, b).

Каков наилучший способ добиться этого?

Текущее решение, которое я придумал, — это просто подметать аргументы ‘a’ и ‘b’ для некоторого произвольного диапазона, вручную вычислить MSE, затем найти ‘a’ и ‘b’, которые достигают минимального значения MSE.

Интересно, есть ли лучший / более удобный способ сделать это.

Спасибо,

Комментарии:

1. Это кажется довольно общим для решения в закрытой форме. Рассматривали ли вы gradient descent возможность выполнения после установления цели-fn? Это может быть вашим лучшим выбором

2. @SerialLazer спасибо за ваше предложение. Я смог решить проблему с помощью вашего комментария и ответа falopsy.

Ответ №1:

Вы можете создать целевую функцию, которая принимает a и b в качестве входных параметров и выводит меру соответствия (mse), а затем использовать одну из встроенных функций MATLAB, чтобы минимизировать ошибку, чтобы получить наилучшие a и b. Я быстро создал пример кода ниже. Вы можете его изменить. Подробнее о fmincon — это позволяет накладывать ограничения на решение и т.д.

 function [a,b] = optimize_ab(x, h,f,g)
% h= h(x) should take vector x and yield vector output
% f=f(x,a)
% g=g(x,b)
% x: input vector
% ========================================================
% Example: find a function to approximate f=x^2 with a*x^1.5 b*x^2.5
% x=1:4;
% h(x)=x.^2;
% f=@(x,a)a*x.^1.5;
% g(x)=g=@(x,b)b*x.^2.5;
% [a,b] = optimize_ab(x,h,f,g)
%=========================================================
h_=h(x);
N =length(x);
res = fmincon(@MSE, [0,0], [], []);
a=res(1);
b=res(2);

    function mse = MSE(x_)
        a_=x_(1);
        b_=x_(2);
        mse =sqrt(sum((h_-(f(x,a_) g(x,b_))).^2)/N);
    end
end
  

Комментарии:

1. очень ценю вашу помощь! этот код работал с незначительной модификацией: единственное внесенное мной изменение — это изменение последней строки функции mse на mse = norm(h_ — (f(x, a_) g(x, b_))); Я оставляю этот комментарий для дальнейшего использования. Спасибо!!!

2. Вы правы. Я где-то не туда поместил скобку — я ее исправил. У меня нет matlab на моем компьютере для тестирования. норма также работает. Я рад, что это помогает вам.