Класс: FeatureSelectionNCAClassification
Оцените точность изученных весов функции на тестовых данных
err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)
вычисляет misclassification ошибку модели err = loss(mdl,X,Y)mdl, для предикторов в X и класс помечает в Y.
вычисляет ошибку классификации с дополнительными опциями, заданными одним или несколькими err = loss(mdl,X,Y,Name,Value)Name,Value парные аргументы.
mdl — Аналитическая модель компонента окружения для классификацииFeatureSelectionNCAClassification объектАналитическая модель компонента окружения для классификации, возвращенной как FeatureSelectionNCAClassification объект.
X — Значения переменного предиктораЗначения переменного предиктора, заданные как n-by-p матрица, где n является количеством наблюдений и p, являются количеством переменных предикторов.
Типы данных: single | double
Y — Метки классаМетки класса, заданные как категориальный вектор, логический вектор, числовой вектор, массив строк, массив ячеек из символьных векторов длины n или символьная матрица со строками n, где n является количеством наблюдений. Элемент i или строка i Y метка класса, соответствующая строке i X (наблюдение i).
Типы данных: single | double | logical | char | string | cell | categorical
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'LossFunction' — Тип функции потерь'classiferror' (значение по умолчанию) | 'quadratic'Тип функции потерь, заданный как разделенная запятой пара, состоящая из 'Loss Function' и одно из следующих.
'classiferror' — Ошибка Misclassification, заданная как
где предсказанный класс и истинный класс для наблюдения i. индикатор для когда не то же самое как .
'quadratic' — Квадратичная функция потерь, заданная как
где c является количеством классов, оценочная вероятность, что i th наблюдение принадлежит, чтобы классифицировать k, и индикатор, что i th наблюдение принадлежит, чтобы классифицировать k.
Пример: 'LossFunction','quadratic'
err — Меньше-лучшая мера по точности для изученных весов функцииМеньше-лучшая мера по точности для изученных весов функции, возвращенных как скалярное значение. Можно задать меру точности с помощью LossFunction аргумент пары "имя-значение".
Загрузите выборочные данные.
load(fullfile(matlabroot,'examples','stats','twodimclassdata.mat'));
Этот набор данных симулирован с помощью схемы, описанной в [1]. Это - проблема классификации 2D классов в двух измерениях. Данные из первого класса (класс-1) чертятся от двух двумерных нормальных распределений
или
с равной вероятностью, где
, и
. Точно так же данные из второго класса (класс 1) чертятся от двух двумерных нормальных распределений
или
с равной вероятностью, где
, и
. Параметры нормального распределения раньше создавали этот результат набора данных в более высоких кластерах в данных, чем данные, используемые в [1].
Создайте график рассеивания данных, сгруппированных классом.
figure gscatter(X(:,1),X(:,2),y) xlabel('x1') ylabel('x2')

Добавьте 100 несоответствующих опций к
. Сначала сгенерируйте данные из Нормального распределения со средним значением 0 и отклонением 20.
n = size(X,1);
rng('default')
XwithBadFeatures = [X,randn(n,100)*sqrt(20)];
Нормируйте данные так, чтобы все точки были между 0 и 1.
XwithBadFeatures = bsxfun(@rdivide,... bsxfun(@minus,XwithBadFeatures,min(XwithBadFeatures,[],1)), ... range(XwithBadFeatures,1)); X = XwithBadFeatures;
Подбирайте модель анализа компонента окружения (NCA) к данным с помощью Lambda по умолчанию (параметр регуляризации
) значение. Используйте решатель LBFGS и отобразите информацию о сходимости.
ncaMdl = fscnca(X,y,'FitMethod','exact','Verbose',1, ... 'Solver','lbfgs');
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 0 | 9.519258e-03 | 1.494e-02 | 0.000e+00 | | 4.015e+01 | 0.000e+00 | YES |
| 1 | -3.093574e-01 | 7.186e-03 | 4.018e+00 | OK | 8.956e+01 | 1.000e+00 | YES |
| 2 | -4.809455e-01 | 4.444e-03 | 7.123e+00 | OK | 9.943e+01 | 1.000e+00 | YES |
| 3 | -4.938877e-01 | 3.544e-03 | 1.464e+00 | OK | 9.366e+01 | 1.000e+00 | YES |
| 4 | -4.964759e-01 | 2.901e-03 | 6.084e-01 | OK | 1.554e+02 | 1.000e+00 | YES |
| 5 | -4.972077e-01 | 1.323e-03 | 6.129e-01 | OK | 1.195e+02 | 5.000e-01 | YES |
| 6 | -4.974743e-01 | 1.569e-04 | 2.155e-01 | OK | 1.003e+02 | 1.000e+00 | YES |
| 7 | -4.974868e-01 | 3.844e-05 | 4.161e-02 | OK | 9.835e+01 | 1.000e+00 | YES |
| 8 | -4.974874e-01 | 1.417e-05 | 1.073e-02 | OK | 1.043e+02 | 1.000e+00 | YES |
| 9 | -4.974874e-01 | 4.893e-06 | 1.781e-03 | OK | 1.530e+02 | 1.000e+00 | YES |
| 10 | -4.974874e-01 | 9.404e-08 | 8.947e-04 | OK | 1.670e+02 | 1.000e+00 | YES |
Infinity norm of the final gradient = 9.404e-08
Two norm of the final step = 8.947e-04, TolX = 1.000e-06
Relative infinity norm of the final gradient = 9.404e-08, TolFun = 1.000e-06
EXIT: Local minimum found.
Постройте веса функции. Веса несоответствующих функций должны быть очень близко к нулю.
figure semilogx(ncaMdl.FeatureWeights,'ro') xlabel('Feature index') ylabel('Feature weight') grid on

Предскажите классы с помощью модели NCA и вычислите матрицу беспорядка.
ypred = predict(ncaMdl,X); confusionchart(y,ypred);

Матрица беспорядка показывает, что 40 из данных, которые находятся в классе-1, предсказаны, как принадлежащий классу-1. 60 данных из класса-1 предсказаны, чтобы быть в классе 1. Точно так же 94 из данных из класса 1 предсказаны, чтобы быть от класса 1 и 6 их, предсказаны, чтобы быть от класса-1. Точность прогноза для класса-1 не хороша.
Все веса очень близко к нулю, который указывает, что значение
используемых в обучении модель является слишком большим. Когда
, все веса функций приближаются к нулю. Следовательно, важно настроить параметр регуляризации в большинстве случаев, чтобы обнаружить соответствующие функции.
Используйте пятикратную перекрестную проверку, чтобы настроиться
для выбора признаков при помощи fscnca. Настройка
означает находить
значение, которое произведет минимальную потерю классификации. Настроить
перекрестную проверку использования:
1. Разделите данные в пять сгибов. Для каждого сгиба, cvpartition присвоения четыре пятых данных как набор обучающих данных и одна пятая данных как набор тестов. Снова для каждого сгиба, cvpartition создает стратифицированный раздел, где каждый раздел имеет примерно ту же пропорцию классов.
cvp = cvpartition(y,'kfold',5);
numtestsets = cvp.NumTestSets;
lambdavalues = linspace(0,2,20)/length(y);
lossvalues = zeros(length(lambdavalues),numtestsets);
2. Обучите анализ компонента окружения (nca) модель для каждого
значения с помощью набора обучающих данных в каждом сгибе.
3. Вычислите потерю классификации для соответствующего набора тестов в сгибе с помощью nca модели. Запишите значение потерь.
4. Повторите этот процесс для всех сгибов и всех
значений.
for i = 1:length(lambdavalues) for k = 1:numtestsets % Extract the training set from the partition object Xtrain = X(cvp.training(k),:); ytrain = y(cvp.training(k),:); % Extract the test set from the partition object Xtest = X(cvp.test(k),:); ytest = y(cvp.test(k),:); % Train an NCA model for classification using the training set ncaMdl = fscnca(Xtrain,ytrain,'FitMethod','exact', ... 'Solver','lbfgs','Lambda',lambdavalues(i)); % Compute the classification loss for the test set using the NCA % model lossvalues(i,k) = loss(ncaMdl,Xtest,ytest, ... 'LossFunction','quadratic'); end end
Постройте средние значения потерь сгибов по сравнению со
значениями. Если
значение, которое соответствует минимальным потерям, падает на контур протестированных
значений, область значений
значений должна быть пересмотрена.
figure plot(lambdavalues,mean(lossvalues,2),'ro-') xlabel('Lambda values') ylabel('Loss values') grid on

Найдите
значение, которое соответствует минимальной средней потере.
[~,idx] = min(mean(lossvalues,2)); % Find the index bestlambda = lambdavalues(idx) % Find the best lambda value
bestlambda =
0.0037
Подбирайте модель NCA ко всем данным с помощью
оптимального значения. Используйте решатель LBFGS и отобразите информацию о сходимости.
ncaMdl = fscnca(X,y,'FitMethod','exact','Verbose',1, ... 'Solver','lbfgs','Lambda',bestlambda);
o Solver = LBFGS, HessianHistorySize = 15, LineSearchMethod = weakwolfe
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 0 | -1.246913e-01 | 1.231e-02 | 0.000e+00 | | 4.873e+01 | 0.000e+00 | YES |
| 1 | -3.411330e-01 | 5.717e-03 | 3.618e+00 | OK | 1.068e+02 | 1.000e+00 | YES |
| 2 | -5.226111e-01 | 3.763e-02 | 8.252e+00 | OK | 7.825e+01 | 1.000e+00 | YES |
| 3 | -5.817731e-01 | 8.496e-03 | 2.340e+00 | OK | 5.591e+01 | 5.000e-01 | YES |
| 4 | -6.132632e-01 | 6.863e-03 | 2.526e+00 | OK | 8.228e+01 | 1.000e+00 | YES |
| 5 | -6.135264e-01 | 9.373e-03 | 7.341e-01 | OK | 3.244e+01 | 1.000e+00 | YES |
| 6 | -6.147894e-01 | 1.182e-03 | 2.933e-01 | OK | 2.447e+01 | 1.000e+00 | YES |
| 7 | -6.148714e-01 | 6.392e-04 | 6.688e-02 | OK | 3.195e+01 | 1.000e+00 | YES |
| 8 | -6.149524e-01 | 6.521e-04 | 9.934e-02 | OK | 1.236e+02 | 1.000e+00 | YES |
| 9 | -6.149972e-01 | 1.154e-04 | 1.191e-01 | OK | 1.171e+02 | 1.000e+00 | YES |
| 10 | -6.149990e-01 | 2.922e-05 | 1.983e-02 | OK | 7.365e+01 | 1.000e+00 | YES |
| 11 | -6.149993e-01 | 1.556e-05 | 8.354e-03 | OK | 1.288e+02 | 1.000e+00 | YES |
| 12 | -6.149994e-01 | 1.147e-05 | 7.256e-03 | OK | 2.332e+02 | 1.000e+00 | YES |
| 13 | -6.149995e-01 | 1.040e-05 | 6.781e-03 | OK | 2.287e+02 | 1.000e+00 | YES |
| 14 | -6.149996e-01 | 9.015e-06 | 6.265e-03 | OK | 9.974e+01 | 1.000e+00 | YES |
| 15 | -6.149996e-01 | 7.763e-06 | 5.206e-03 | OK | 2.919e+02 | 1.000e+00 | YES |
| 16 | -6.149997e-01 | 8.374e-06 | 1.679e-02 | OK | 6.878e+02 | 1.000e+00 | YES |
| 17 | -6.149997e-01 | 9.387e-06 | 9.542e-03 | OK | 1.284e+02 | 5.000e-01 | YES |
| 18 | -6.149997e-01 | 3.250e-06 | 5.114e-03 | OK | 1.225e+02 | 1.000e+00 | YES |
| 19 | -6.149997e-01 | 1.574e-06 | 1.275e-03 | OK | 1.808e+02 | 1.000e+00 | YES |
|====================================================================================================|
| ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT |
|====================================================================================================|
| 20 | -6.149997e-01 | 5.764e-07 | 6.765e-04 | OK | 2.905e+02 | 1.000e+00 | YES |
Infinity norm of the final gradient = 5.764e-07
Two norm of the final step = 6.765e-04, TolX = 1.000e-06
Relative infinity norm of the final gradient = 5.764e-07, TolFun = 1.000e-06
EXIT: Local minimum found.
Постройте веса функции.
figure semilogx(ncaMdl.FeatureWeights,'ro') xlabel('Feature index') ylabel('Feature weight') grid on

fscnca правильно выясняет, что первые две функции релевантны и что остальные не. Первые две функции весьма отдельным образом информативны, но, когда взято вместе приводят к модели точной классификации.
Предскажите классы с помощью новой модели и вычислите точность.
ypred = predict(ncaMdl,X); confusionchart(y,ypred);

Матрица беспорядка показывает, что точность прогноза для класса-1 улучшилась. 88 из данных из класса-1 предсказаны, чтобы быть от –1, и 12 из них предсказаны, чтобы быть от класса 1. 92 данных из класса 1, предсказаны, чтобы быть от класса 1 и 8 их, предсказаны, чтобы быть от класса-1.
Ссылки
[1] Ян, W., К. Ван, В. Цзо. "Выбор признаков компонента окружения для высоко-размерных данных". Журнал компьютеров. Издание 7, номер 1, январь 2012.
FeatureSelectionNCAClassification | fscnca | predict | refit
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.