Что такое R-эквивалент функции Matlab fminunc? - PullRequest
11 голосов
/ 27 октября 2011

Для расчета оптимальной тета, например в логистической регрессии я должен создать функцию costFunction (функцию, которую нужно минимизировать), которая затем передается в fminunc для получения оптимальной тета-функции. Кроме того, если можно вычислить градиент costFunction, я установил для параметра 'GradObj' значение 'on', используя

options = optimset('GradObj','on');

и закодируйте функцию costFunction, чтобы она возвращала в качестве второго выходного аргумента значение градиента g из X. Тогда я даю

[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

где X - матрица данных, а y - ответ. Как я могу реализовать вышеизложенное в R?

Ответы [ 2 ]

10 голосов
/ 27 октября 2011

Посмотрите на функцию optim. Он может выполнять минимизацию без ограничений, используя method = 'L-BFGS-B', и вы также можете указать аналитическую функцию для вычисления градиента

EDIT. Как правильно указал Бен, fminunc выполняет оптимизацию без ограничений, что также может быть достигнуто с помощью функции optim с выбором Nelder-Mead или BFGS. Кроме того, я также заметил из документации fminunc, что она выполняет крупномасштабную оптимизацию, используя trust методы области. Существует пакет R trust, который, по моему мнению, делает то же самое. Я бы порекомендовал взглянуть на optimization представление задачи из R.

1 голос
/ 20 марта 2016

В R вы можете использовать функцию nlminb в R, чтобы выполнить ограниченную оптимизацию!

nlminb(start, objective, gradient = NULL, hessian = NULL, ..., scale = 1, control = list(), lower = -Inf, upper = Inf)

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

...