Класс: Элемент Выбор NCAClassification
Оценка точности усвоенных весов характеристик на тестовых данных
err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)
вычисляет ошибку неправильной классификации модели 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' - Коэффициент неправильной классификации в десятичном выражении, определяемый как
),
где - прогнозируемый класс, а - истинный класс для наблюдения. ) - индикатор для случая, когда ki не совпадает с ti.
'quadratic' - Квадратичная функция потерь, определяемая как
k)) 2,
где c - число классов, - оценочная вероятность того, что i-е наблюдение принадлежит классу k, а k) - индикатор того, что i-е наблюдение принадлежит классу k.
Пример: 'LossFunction','quadratic'
err - меньший - лучший показатель точности для усвоенных весов элементов;Меньшая - лучшая мера точности для усвоенных весов элемента, возвращаемая как скалярное значение. Можно указать меру точности с помощью LossFunction аргумент пары имя-значение.
Загрузите образцы данных.
load('twodimclassdata.mat');
Этот набор данных моделируется с использованием схемы, описанной в [1]. Это двухклассная проблема классификации в двух измерениях. Данные из первого класса (класс -1) берутся из двух двумерных нормальных распределений
или
с равной вероятностью, где,, ![$\mu_1 = [-0.75,-1.5]$](../examples/stats/win64/PredictClassLabelsUsingNCAModelExample_eq03336482581861985583.png)
и.
Аналогично, данные из второго класса (класс 1) извлекаются из двух двумерных нормальных распределений или
с
равной вероятностью, где,, и. ![$\mu_3 = [1.5,-1.5]$](../examples/stats/win64/PredictClassLabelsUsingNCAModelExample_eq02369827013796961285.png)
![$\mu_4 = [-1.5,1.5]$](../examples/stats/win64/PredictClassLabelsUsingNCAModelExample_eq10119612338443584655.png)
Нормальные параметры распределения, используемые для создания этого набора данных, приводят к более жестким кластерам в данных, чем данные, используемые в [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] Ян, У., К. Ван, У. Цзо. «Выбор компонентов соседства для высокоразмерных данных». Журнал компьютеров. Том 7, номер 1, январь 2012 года.
FeatureSelectionNCAClassification | fscnca | predict | refit
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.