потеря

Класс: FeatureSelectionNCAClassification

Оцените точность изученных весов функции на тестовых данных

Синтаксис

err = loss(mdl,X,Y)
err = loss(mdl,X,Y,Name,Value)

Описание

err = loss(mdl,X,Y) вычисляет misclassification ошибку модели 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 должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

  • 'classiferror' — Ошибка Misclassification, заданная как

    1ni=1nI(kiti),

    где ki предсказанный класс и ti истинный класс для наблюдения i. I(kiti) индикатор для когда ki не то же самое как ti.

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

    1ni=1nk=1c(pikI(i,k))2,

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

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

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

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

Меньше-лучшая мера по точности для изученных весов функции, возвращенных как скалярное значение. Можно задать меру точности с помощью аргумента пары "имя-значение" 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.

Смотрите также

| | |

Введенный в R2017b