A tsne output function является функцией, которая выполняется после каждого NumPrint итерации оптимизации t-SNE алгоритма. Выходная функция может создать графики или данные логов к файлу или к переменной рабочей области. Функция не может изменить прогресс алгоритма, но может остановить итерации.
Установите выходные функции с помощью Options аргумент пары "имя-значение" tsne функция. Установка опций к структуре, созданной с помощью statset или struct. Установите 'OutputFcn' поле Options структура к указателю на функцию или cell-массиву указателей на функцию.
Например, чтобы установить выходную функцию под названием outfun.m, используйте следующие команды.
opts = statset('OutputFcn',@outfun); Y = tsne(X,'Options',opts);
Запишите выходную функцию с помощью следующего синтаксиса.
function stop = outfun(optimValues,state) stop = false; % do not stop by default switch state case 'init' % Set up plots or open files case 'iter' % Draw plots or update variables case 'done' % Clean up plots or files end
tsne передает state и optimValues переменные к вашей функции. state берет значения 'init', 'iter', или 'done' как показано во фрагменте кода.
tsne optimValues Структура| Поле optimValues | Описание |
|---|---|
'iteration' | Номер итерации |
'fval' | Расхождение Kullback-Leibler, измененное преувеличением во время первых 99 итераций |
'grad' | Градиент расхождения Kullback-Leibler, измененного преувеличением во время первых 99 итераций |
'Exaggeration' | Значение параметра преувеличения в использовании в текущей итерации |
'Y' | Текущее встраивание |
В этом примере показано, как использовать выходную функцию в tsne.
Пользовательская выходная функция
Следующий код является выходной функцией, которая выполняет эти задачи:
Сохраните историю расхождения Kullback-Leibler и норму его градиента в переменной рабочей области.
Постройте решение и историю, в то время как итерации продолжают.
Отобразите Stop кнопка на графике остановить итерации рано, не теряя информации.
Выходная функция имеет дополнительную входную переменную, species, это включает его графикам показать правильную классификацию данных. Для получения информации о включении дополнительных параметров, таких как species в функции смотрите Функции Параметризации.
function stop = KLLogging(optimValues,state,species) persistent h kllog iters stopnow switch state case 'init' stopnow = false; kllog = []; iters = []; h = figure; c = uicontrol('Style','pushbutton','String','Stop','Position', ... [10 10 50 20],'Callback',@stopme); case 'iter' kllog = [kllog; optimValues.fval,log(norm(optimValues.grad))]; assignin('base','history',kllog) iters = [iters; optimValues.iteration]; if length(iters) > 1 figure(h) subplot(2,1,2) plot(iters,kllog); xlabel('Iterations') ylabel('Loss and Gradient') legend('Divergence','log(norm(gradient))') title('Divergence and log(norm(gradient))') subplot(2,1,1) gscatter(optimValues.Y(:,1),optimValues.Y(:,2),species) title('Embedding') drawnow end case 'done' % Nothing here end stop = stopnow; function stopme(~,~) stopnow = true; end end
Используйте пользовательскую выходную функцию
Отобразите на графике ирисовые данные Фишера, 4-D набор данных, в двух измерениях с помощью tsne. Существует понижение значения Расхождения в итерации 100, потому что расхождение масштабируется значением преувеличения для более ранних итераций. Встраивание остается в основном неизменным для последних нескольких сотен итераций, таким образом, можно сэкономить время путем нажатия на Stop кнопка во время итераций.
load fisheriris rng default % for reproducibility opts = statset('OutputFcn',@(optimValues,state) KLLogging(optimValues,state,species)); Y = tsne(meas,'Options',opts,'Algorithm','exact');
