Класс: FeatureSelectionNCAClassification
Переоборудуйте модель анализа компонента окружения (NCA) для классификации
mdlrefit = refit(mdl,Name,Value)
переоборудует модель mdlrefit = refit(mdl,Name,Value)mdl, с измененными параметрами, заданными одним или несколькими аргументами пары Name,Value.
mdl — Аналитическая модель компонента окружения для классификацииFeatureSelectionNCAClassificationАналитическая модель компонента окружения или классификация, заданная как объект FeatureSelectionNCAClassification.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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 (Бройден Флетчер Голдфарб Шэнно) алгоритм (алгоритм 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 |> 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),:);
Вычислите misclassification ошибку без выбора функции.
nca = fscnca(Xtrain,ytrain,'FitMethod','none','Standardize',true, ... 'Solver','lbfgs'); loss_nofs = loss(nca,Xval,yval)
loss_nofs =
0.5165
Опция 'FitMethod','none' использует веса по умолчанию (вся 1 с), что означает, что все функции одинаково важны.
На этот раз выполните выбор функции с помощью анализа компонента окружения для классификации, с
.
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')

Вычислите misclassification ошибку с выбором функции.
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.