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

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

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

load('twodimclassdata.mat')

Этот набор данных симулирован с помощью схемы, описанной в [1]. Это - проблема классификации 2D классов в двух измерениях. Данные из первого класса чертятся от двух двумерных нормальных распределений 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')

Добавьте 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

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

Используйте пятикратную перекрестную проверку, чтобы настроиться λ для выбора признаков с помощью 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

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

[~,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 правильно выясняет, что первые две функции релевантны, и остальные не. Обратите внимание на то, что первые две функции весьма отдельным образом информативны, но, когда взято вместе приводят к модели точной классификации.

Ссылки

1. Ян, W., К. Ван, В. Цзо. "Выбор признаков компонента окружения для высоко-размерных данных". Журнал компьютеров. Издание 7, номер 1, январь 2012.

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

| | | |

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте