Я выполняю логистическую регрессию в MATLAB с регуляцией L2 по текстовым данным. Моя программа хорошо работает для небольших наборов данных. Для больших наборов он работает бесконечно.MATLAB fminunc() не заполняется для больших наборов данных. Работает для меньших
Я видел потенциально дублированный вопрос (matlab fminunc not quitting (running indefinitely)). В этом вопросе стоимость начальной теты была NaN, и на консоли была ошибка. Для моей реализации я получаю реальную стоимость и нет ошибки даже при выполнении подробных параметров fminunc(). Поэтому я считаю, что этот вопрос может быть не дубликат.
Мне нужна помощь в масштабировании его на большие наборы. Размер учебных данных, над которыми я работаю в настоящее время, составляет примерно 10 тыс. * 12 тыс. (Текстовые файлы 10 тыс. Кумулятивно содержат 12 тыс. Слов). Таким образом, у меня есть примеры обучения m = 10k и n = 12k.
Моя функция стоимость определяется следующим образом: функция
function [J gradient] = costFunction(X, y, lambda, theta)
[m n] = size(X);
g = inline('1.0 ./ (1.0 + exp(-z))');
h = g(X*theta);
J =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h))+ (lambda/(2*m))*norm(theta(2:end))^2;
gradient(1) = (1/m)*sum((h-y) .* X(:,1));
for i = 2:n
gradient(i) = (1/m)*sum((h-y) .* X(:,i)) - (lambda/m)*theta(i);
end
end
Я выполняю оптимизацию использования fminunc MATLAB в(). Параметры Перехожу к fminunc() являются:
options = optimset('LargeScale', 'on', 'GradObj', 'on', 'MaxIter', MAX_ITR);
theta0 = zeros(n, 1);
[optTheta, functionVal, exitFlag] = fminunc(@(t) costFunction(X, y, lambda, t), theta0, options);
Я бегу этот код на машине с этими спецификациями:
функцияMacbook Pro i7 2.8GHz/8GB RAM/MATLAB R2011b
Стоимость, кажется, правильно себя вести. Для начального тета я получаю приемлемые значения J и градиента.
K>> theta0 = zeros(n, 1);
K>> [j g] = costFunction(X, y, lambda, theta0);
K>> j
j =
0.6931
K>> max(g)
ans =
0.4082
K>> min(g)
ans =
-2.7021e-05
Программа занимает невероятно долгое время. Я начал профилирование, сохраняя MAX_ITR = 1 для fminunc(). С помощью одной итерации программа не завершила выполнение даже после того, как прошло несколько часов. Мои вопросы:
Я делаю что-то неправильно математически?
Должен ли я использовать любой другой оптимизатор вместо fminunc()? При использовании LargeScale = on fminunc() использует алгоритмы доверия домена.
Является ли эта проблема кластерной шкалой и не должна запускаться на одной машине?
Любые другие общие советы будут оценены. Благодаря!
Это помогло решить проблему: я был в состоянии получить эту работу, установив флаг LargeScale на «выключено» в fminunc(). Из того, что я собираю, LargeScale = 'on' использует алгоритмы области доверия, в то время как при его отключении используются квази-новые методы. Использование квази-ньютоновских методов и передача градиента работали намного быстрее для этой конкретной задачи и дали очень хорошие результаты.
Проблема довольно маленькая, где-то рядом с кластерным масштабом. Однако использование универсального решателя, такого как 'fminunc', является излишним. Вероятно, вам лучше использовать другой решатель. Рассматривали ли вы другие методы (например, линейный SVM, который, как известно, очень хорошо подходит для классификации текста)? Чтобы дать вам идею, небольшая проблема, подобная этой, может быть решена за считанные секунды с помощью линейного SVM. –
Ну, режим профилирования/отладки, безусловно, замедлит его. Вы пытались установить опцию '' Display'' на '' iter'', используя 'optimset'? посмотреть, что делает 'fminunc'? На небольших наборах данных, где он работает, что такое 'exitflag', описывающий условие выхода? Кроме того, почему у вас есть встроенное уравнение в вашей функции затрат? Это можно заменить на [анонимную функцию] (http://www.mathworks.com/help/matlab/matlab_prog/anonymous-functions.html) ('g = @ (z) 1 ./ (1 + exp (- z))) или полностью удалены ('h = 1 ./ (1 + exp (-X * theta))). – horchler
@MarcClaesen Спасибо Marc. Я хотел бы специально попробовать логистическую регрессию для этой проблемы. Вы упомянули, что лучше попробовать другой решатель. Вы бы рекомендовали какой-либо конкретный решатель для этой цели? –