Класс: FeatureSelectionNCAClassification
Преобразуйте модель анализа соседних компонентов (NCA) для классификации
mdlrefit = refit(mdl,Name,Value)
обновляет модель mdlrefit = refit(mdl,Name,Value)mdl, с измененными параметрами, заданными одним или несколькими Name,Value аргументы в виде пар.
mdl - Модель анализа компонентов окрестностей для классификацииFeatureSelectionNCAClassification объектМодель анализа компонентов окрестностей или классификация, заданная как FeatureSelectionNCAClassification объект.
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'FitMethod' - Метод подбора кривой моделиmdl.FitMethod (по умолчанию) | 'exact' | 'none' | 'average'Метод для подбора кривой модели, заданный как разделенная запятыми пара, состоящая из 'FitMethod' и одно из следующих.
'exact' - Выполняет подбор кривой, используя все данные.
'none' - Никакого подбора кривой. Используйте эту опцию, чтобы вычислить ошибку обобщения модели NCA с помощью начальных весов функций, предоставленных в вызове fscnca.
'average' - Функция разделяет данные на разделы (подмножества), подходит для каждого раздела с помощью exact метод и возвращает среднее значение весов функций. Вы можете задать количество разделов, используя NumPartitions аргумент пары "имя-значение".
Пример: 'FitMethod','none'
'Lambda' - Параметр регуляризацииmdl.Lambda (по умолчанию) | неотрицательное скалярное значениеПараметр регуляризации, заданный как разделенная разделенными запятой парами, состоящая из 'Lambda' и неотрицательное скалярное значение.
Для n наблюдений лучшая Lambda значение, которое минимизирует ошибку обобщения модели NCA, как ожидается, будет кратным 1/ n
Пример: 'Lambda',0.01
Типы данных: double | single
'Solver' - Тип решателяmdl.Solver (по умолчанию) | 'lbfgs' | 'sgd' | 'minibatch-lbfgs'Тип решателя для оценки весов функций, заданный как разделенная разделенными запятой парами, состоящая из 'Solver' и одно из следующих.
'lbfgs' - Алгоритм BFGS с ограниченной памятью (алгоритм Broyden-Fletcher-Goldfarb-Shanno) (алгоритм LBFGS)
'sgd' - Стохастический градиентный спуск
'minibatch-lbfgs' - Стохастический градиентный спуск с алгоритмом LBFGS, применяемым к мини-пакетам
Пример: 'solver','minibatch-lbfgs'
'InitialFeatureWeights' - Начальные веса функцийmdl.InitialFeatureWeights (по умолчанию) | p вектор -by-1 действительных положительных скалярных значенийНачальные веса функций, заданные как разделенная разделенными запятой парами, состоящая из 'InitialFeatureWeights' и вектор p -by-1 действительных положительных скалярных значений.
Типы данных: double | single
'Verbose' - Индикатор уровня подробностейmdl.Verbose (по умолчанию) | 0 | 1 | >Индикатор уровня подробностей для итогового отображения сходимости, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose' и одно из следующих.
0 - Нет сводных данных сходимости
1 - сводные данные сходимости, включающая число итерации, норму градиента и значение целевой функции.
> 1 - Больше информации о сходимости в зависимости от алгоритма аппроксимации
При использовании 'minibatch-lbfgs' решателя и уровень подробностей > 1, информация о сходимости включает в себя журнал итерации от промежуточных подгонок LBFGS для минибатов.
Пример: 'Verbose',2
Типы данных: double | single
'GradientTolerance' - Относительный допуск сходимостиmdl.GradientTolerance (по умолчанию) | положительное действительное скалярное значениеОтносительный допуск сходимости по норме градиента для lbfgs решателя, заданная как разделенная разделенными запятой парами, состоящая из 'GradientTolerance' и положительное действительное скалярное значение.
Пример: 'GradientTolerance',0.00001
Типы данных: double | single
'InitialLearningRate' - Начальная скорость обучения для решателя sgdmdl.InitialLearningRate (по умолчанию) | положительное действительное скалярное значениеНачальная скорость обучения для sgd решателя, заданная как разделенная разделенными запятой парами, состоящая из 'InitialLearningRate' и положительная скалярная величина значение.
При использовании типа решателя 'sgd', скорость обучения затухает над итерациями, начиная со значения, заданного для 'InitialLearningRate'.
Пример: 'InitialLearningRate',0.8
Типы данных: double | single
'PassLimit' - Максимальное количество проходов для решателя 'sgd'mdl.PassLimit (по умолчанию) | положительное целое значение Максимальное количество проходов для решателя 'sgd' (стохастический градиентный спуск), заданный как разделенная разделенными запятой парами, состоящая из 'PassLimit' и положительное целое число. Каждый проходной процесс size(mdl.X,1) наблюдения.
Пример: 'PassLimit',10
Типы данных: double | single
'IterationLimit' - Максимальное количество итерацийmdl.IterationLimit (по умолчанию) | положительное целое значениеМаксимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'IterationLimit' и положительное целое число.
Пример: 'IterationLimit',250
Типы данных: double | single
mdlrefit - Модель анализа компонентов окрестностей для классификацииFeatureSelectionNCAClassification объектМодель анализа компонентов окрестностей для классификации, возвращенная как FeatureSelectionNCAClassification объект. Можно либо сохранить результаты как новую модель, либо обновить существующую модель как mdl = refit(mdl,Name,Value).
Сгенерируйте шахматные данные с помощью generateCheckerBoardData.m функция.
rng(2016,'twister'); % For reproducibility pps = 1375; [X,y] = generateCheckerBoardData(pps); X = X + 2;
Постройте график данных.
figure plot(X(y==1,1),X(y==1,2),'rx') hold on plot(X(y==-1,1),X(y==-1,2),'bx') [n,p] = size(X)
n =
22000
p =
2

Добавьте нерелевантные предикторы к данным.
Q = 98; Xrnd = unifrnd(0,4,n,Q); Xobs = [X,Xrnd];
Эта часть кода создает 98 дополнительных предикторов, все равномерно распределенных между 0 и 4.
Разделите данные на обучающие и тестовые наборы. Чтобы создать стратифицированные разделы, чтобы каждый раздел имел одинаковую долю классов, используйте y вместо length(y) как критерий разбиения.
cvp = cvpartition(y,'holdout',2000);
cvpartition случайным образом выбирает 2000 наблюдений для добавления к тестовому набору и остальную часть данных для добавления к набору обучающих данных. Создайте наборы обучения и валидации с помощью назначений, хранящихся в cvpartition cvp объекта .
Xtrain = Xobs(cvp.training(1),:); ytrain = y(cvp.training(1),:); Xval = Xobs(cvp.test(1),:); yval = y(cvp.test(1),:);
Вычислите ошибку классификации без выбора признаков.
nca = fscnca(Xtrain,ytrain,'FitMethod','none','Standardize',true, ... 'Solver','lbfgs'); loss_nofs = loss(nca,Xval,yval)
loss_nofs =
0.5165
'FitMethod','none' опция использует веса по умолчанию (все 1s), что означает, что все функции одинаково важны.
На этот раз выполните выбор признаков, используя анализ компонентов окрестностей для классификации, с.
w0 = rand(100,1); n = length(ytrain) lambda = 1/n; nca = refit(nca,'InitialFeatureWeights',w0,'FitMethod','exact', ... 'Lambda',lambda,'solver','sgd');
n =
20000
Постройте график значения целевой функции от числа итерации.
figure() plot(nca.FitInfo.Iteration,nca.FitInfo.Objective,'ro') hold on plot(nca.FitInfo.Iteration,movmean(nca.FitInfo.Objective,10),'k.-') xlabel('Iteration number') ylabel('Objective value')

Вычислите ошибку классификации с выбором признаков.
loss_withfs = loss(nca,Xval,yval)
loss_withfs =
0.0115
Постройте график выбранных функций.
figure semilogx(nca.FeatureWeights,'ro') xlabel('Feature index') ylabel('Feature weight') grid on

Выберите функции, используя веса функций и относительный порог.
tol = 0.15; selidx = find(nca.FeatureWeights > tol*max(1,max(nca.FeatureWeights)))
selidx =
1
2
Выбор признаков улучшает результаты и fscnca определяет правильные две функции.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.