output function tsne является функцией, которая выполняется после каждой оптимизации NumPrint итерации t-SNE алгоритма. Выходная функция может создать графики или данные логов к файлу или к переменной рабочей области. Функция не может изменить прогресс алгоритма, но может остановить итерации.
Установите выходные функции с помощью аргумента пары "имя-значение" Options функции tsne. Установите Options на структуру, созданную с помощью 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 в функции, смотрите Функции Параметризации (MATLAB).
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');
