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