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');
