A tsne
output function является функцией, которая запускается после каждого 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' | Расхождение Куллбэка-Лейблера, измененное преувеличением в течение первых 99 итераций |
'grad' | Градиент расхождения Куллбэка-Лейблера, измененный преувеличением в течение первых 99 итераций |
'Exaggeration' | Значение параметра преувеличения, используемого в текущей итерации |
'Y' | Внедрение тока |
В этом примере показано, как использовать выходную функцию в tsne
.
Настраиваемая выходная функция
Следующий код является выходной функцией, которая выполняет эти задачи:
Сохраните историю расхождения Куллбэка-Лейблера и норму его градиента в переменной рабочей области.
Постройте график решения и истории по мере продолжения итераций.
Отобразите 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');