exponenta event banner

Настройка параметра регуляризации для обнаружения функций с помощью NCA для классификации

В этом примере показано, как настроить параметр регуляризации в fscnca с использованием перекрестной проверки. Настройка параметра регуляризации помогает правильно определить соответствующие функции в данных.

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

load('twodimclassdata.mat')

Этот набор данных моделируется с использованием схемы, описанной в [1]. Это двухклассная проблема классификации в двух измерениях. Данные из первого класса берутся из двух двумерных нормальных распределений N (μ1,Σ) или N (μ2,Σ) с равной вероятностью, где мк1 = [-0,75, -1,5], мк2 = [0,75,1,5] и Λ = I2. Аналогично, данные второго класса берутся из двух двумерных нормальных распределений N (μ3,Σ) или N (μ4,Σ) с равной вероятностью, где мк3 = [1,5, -1,5], мк4 = [-1,5,1,5] и Λ = I2. Нормальные параметры распределения, используемые для создания этого набора данных, приводят к более жестким кластерам в данных, чем данные, используемые в [1].

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

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent -1, 1.

Добавьте 100 несущественных элементов к X. Сначала создайте данные из нормального распределения со средним значением 0 и дисперсией 20.

n = size(X,1);
rng('default')
XwithBadFeatures = [X,randn(n,100)*sqrt(20)];

Нормализуйте данные таким образом, чтобы все точки находились в диапазоне от 0 до 1.

XwithBadFeatures = (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

Figure contains an axes. The axes contains an object of type line.

Все веса очень близки к нулю. Это указывает на то, что значение λ, используемое при обучении модели, слишком велико. При λ→∞ веса всех элементов приближаются к нулю. Следовательно, в большинстве случаев важно настроить параметр регуляризации для обнаружения соответствующих признаков.

Используйте пятикратную перекрестную проверку для настройки λ для выбора элементов с помощью fscnca. Настройка λ означает поиск значения λ, которое приведет к минимальной потере классификации. Ниже приведены шаги настройки λ с использованием перекрестной проверки:

1. Сначала разбейте данные на пять складок. Для каждой складки, cvpartition присваивает 4/5 данных в качестве обучающего набора и 1/5 данных в качестве тестового набора.

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

Figure contains an axes. The axes contains an object of type line.

Найдите значение λ, соответствующее минимальным средним потерям.

[~,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

Figure contains an axes. The axes contains an object of type line.

fscnca правильно определяет, что первые два признака являются релевантными, а остальные - нет. Обратите внимание, что первые два признака не являются индивидуально информативными, но, когда они вместе взяты, приводят к точной модели классификации.

Ссылки

1. Ян, У., К. Ван, У. Цзо. «Выбор компонентов соседства для высокоразмерных данных». Журнал компьютеров. Том 7, номер 1, январь 2012 года.

См. также

| | | |

Связанные темы