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