predict

Класс: FeatureSelectionNCAClassification

Предскажите ответы с помощью классификатора анализа компонента окружения (NCA)

Синтаксис

[labels,postprobs,classnames] = predict(mdl,X)

Описание

[labels,postprobs,classnames] = predict(mdl,X) вычисляет предсказанные метки, labels, соответствие строкам X, использование модели mdl.

Входные параметры

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

Аналитическая модель компонента окружения для классификации, заданной как FeatureSelectionNCAClassification объект.

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

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

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

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

Предсказанные метки класса, соответствующие строкам X, возвращенный как категориальный, логический, или числовой вектор, массив ячеек из символьных векторов длины n или символьный массив со строками n. n является количеством наблюдений. Тип labels совпадает с Y используемый в обучении.

Апостериорные вероятности, возвращенные как n-by-c матрица, где n является количеством наблюдений и c, являются количеством классов. Апостериорная вероятность, postprobs(i,:), представляет членство наблюдения в X(i,:) в классах 1 через c.

Имена классов, соответствующие апостериорным вероятностям, возвращенным как массив ячеек из символьных векторов. Каждый вектор символов является именем класса, соответствующим столбцу postprobs.

Примеры

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

Загрузите выборочные данные.

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