Аппроксимация полиномиальной кривой

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

Можете ли вы поделиться какими-либо ресурсами (MATLAB / C ++), которые могли бы предоставить некоторую помощь в том, как реализовать подгонку кривой без встроенной функции? Я мог найти только те, которые использовали устранение гауссии - это то же самое, что и метод наименьших квадратов?


person Sim    schedule 07.09.2017    source источник
comment
Вы не обязаны оправдываться, но это могло бы (или не могло) помочь респондентам дать информативные ответы, если бы они знали, почему вы хотите избежать метода наименьших квадратов. Ваш вопрос имеет широкий смысл, поэтому немного больше мотивации может сузить круг вопросов, чтобы предложить хороший и разумный ответ.   -  person thb    schedule 08.09.2017
comment
@thb Добавил мои причины :)   -  person Sim    schedule 08.09.2017


Ответы (3)


Исключение Гаусса - это не то же самое, что аппроксимация методом наименьших квадратов. В том смысле, что это не то же самое, что подгонка по методу наименьших квадратов, напоминает то, в каком смысле бензин - это не то же самое, что вождение.

Исключение Гаусса - это метод решения линейной системы. Метод наименьших квадратов решает линейную систему и выполняет некоторые другие действия, поэтому он может использовать исключение Гаусса.

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

Я понимаю, что это, вероятно, не тот ответ, который вы хотели, но я верю, что это ответ. Если вы узнаете иначе, дайте нам знать.

person thb    schedule 07.09.2017

аппроксимация полиномиальной кривой - это первый шаг к обучению «машинному обучению». Я советую сначала попробовать метод наименьших квадратов, а затем понять вероятностную трактовку аппроксимации кривой. Вы можете найти это в (Книга епископа). В итоге вы можете предположить, что целевое значение (t) для входного значения (x) происходит из гауссовского распределения. Таким образом, ошибку можно минимизировать, взяв максимальную вероятность целевого значения. Вначале это выглядит легко, но интуитивный смысл имеет много озарений. Я бы порекомендовал вам попробовать это с помощью Matlab или r.

person Abul KM Rajib Hasan    schedule 28.09.2017

Реализация полиномиальной регрессии на C ++ в GitHub с открытым исходным кодом доступна здесь. Он поддерживает стандартные контейнеры STL для ввода, отдельные типы для данных и вычислений (подача и чтение uint8_t при выполнении регрессии 64-й степени с __float128), может дифференцировать, интегрировать и вычислять остатки. Несложно использовать:

  std::vector<float> x, y; // provide data
  auto polynomial = polynomial_regression<2>(x, y);  // second degree polynomial

  // Interpolate at 0.5:
  std::cout << "f(0.5) = " << polynomial(0.5) << std::endl;

  // Coefficients:
  for (auto a: polynomial) {
    std::cout << a << std::endl;
  }
person Audrius Meskauskas    schedule 22.08.2020