exponenta event banner

потеря

Класс: Элемент Выбор 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 аргументы пары.

Входные аргументы

развернуть все

Модель анализа компонентов окрестности для классификации, возвращенная как FeatureSelectionNCAClassification объект.

Значения предикторных переменных, определенные как матрица n-by-p, где n - количество наблюдений, а p - число предикторных переменных.

Типы данных: single | double

Метки класса, заданные как категориальный вектор, логический вектор, числовой вектор, строковый массив, массив ячеек символьных векторов длиной 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.

Тип функции потери, указанный как разделенная запятыми пара, состоящая из 'Loss Function' и одно из следующих.

  • 'classiferror' - Коэффициент неправильной классификации в десятичном выражении, определяемый как

    1n∑i=1nI (ki≠ti),

    где ki - прогнозируемый класс, а ti - истинный класс для наблюдения. I (ki≠ti) - индикатор для случая, когда ki не совпадает с ti.

  • 'quadratic' - Квадратичная функция потерь, определяемая как

    1n∑i=1n∑k=1c (pik I (i, k)) 2,

    где c - число классов, pik - оценочная вероятность того, что i-е наблюдение принадлежит классу k, а I (i, k) - индикатор того, что i-е наблюдение принадлежит классу k.

Пример: 'LossFunction','quadratic'

Выходные аргументы

развернуть все

Меньшая - лучшая мера точности для усвоенных весов элемента, возвращаемая как скалярное значение. Можно указать меру точности с помощью LossFunction аргумент пары имя-значение.

Примеры

развернуть все

Загрузите образцы данных.

load('twodimclassdata.mat');

Этот набор данных моделируется с использованием схемы, описанной в [1]. Это двухклассная проблема классификации в двух измерениях. Данные из первого класса (класс -1) берутся из двух двумерных нормальных распределений$N(\mu_1,\Sigma)$ или$N(\mu_2,\Sigma)$ с равной вероятностью, где,, $\mu_1 = [-0.75,-1.5]$$\mu_2 = [0.75,1.5]$и. $\Sigma = I_2$Аналогично, данные из второго класса (класс 1) извлекаются из двух двумерных нормальных распределений или$N(\mu_3,\Sigma)$ с $N(\mu_4,\Sigma)$равной вероятностью, где,, и. $\mu_3 = [1.5,-1.5]$$\mu_4 = [-1.5,1.5]$$\Sigma = I_2$Нормальные параметры распределения, используемые для создания этого набора данных, приводят к более жестким кластерам в данных, чем данные, используемые в [1].

Создайте график разброса данных, сгруппированных по классу.

figure
gscatter(X(:,1),X(:,2),y)
xlabel('x1')
ylabel('x2')

Добавьте 100 несущественных элементов в. $X$Сначала создайте данные из нормального распределения со средним значением 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 (параметр регуляризации,) $\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 не является хорошей.

Все веса очень близки к нулю, что указывает на то, что значение$\lambda$, используемое при обучении модели, слишком велико. Когда, $\lambda \to \infty$все элементы веса приближаются к нулю. Следовательно, в большинстве случаев важно настроить параметр регуляризации для обнаружения соответствующих признаков.

Пятикратная перекрестная проверка для настройки$\lambda$ выбора элементов с помощью fscnca. Настройка$\lambda$ означает поиск$\lambda$ значения, которое приведет к минимальной потере классификации. Настройка$\lambda$ с помощью перекрестной проверки:

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) для каждого$\lambda$ значения с помощью обучающего набора в каждой гибке.

3. Вычислите потери классификации для соответствующего тестового набора в гибке с помощью модели nca. Запишите значение потери.

4. Повторите этот процесс для всех складок и всех$\lambda$ значений.

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

Постройте график средних значений потерь складок по сравнению со$\lambda$ значениями. Если$\lambda$ значение, соответствующее минимальным потерям, попадает на границу испытываемых$\lambda$ значений, то диапазон$\lambda$ значений следует пересмотреть.

figure
plot(lambdavalues,mean(lossvalues,2),'ro-')
xlabel('Lambda values')
ylabel('Loss values')
grid on

Найдите$\lambda$ значение, соответствующее минимальной средней потере.

[~,idx] = min(mean(lossvalues,2)); % Find the index
bestlambda = lambdavalues(idx) % Find the best lambda value
bestlambda =

    0.0037

Поместите модель NCA во все данные, используя наилучшее$\lambda$ значение. Используйте решатель 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 года.

Представлен в R2016b