Выходная функция t-SNE

Описание Выходной функции t-SNE

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'Текущее встраивание

t-SNE Пользовательская Выходная функция

В этом примере показано, как использовать выходную функцию в 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');

Похожие темы