Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Ajustar el parámetro de regularización para detectar características mediante NCA para la clasificación

En este ejemplo se muestra cómo ajustar el parámetro de regularización en el uso de la validación cruzada.fscnca Ajustar el parámetro de regularización ayuda a detectar correctamente las características relevantes de los datos.

Cargue los datos de ejemplo.

load('twodimclassdata.mat'); 

Este conjunto de datos se simula utilizando el esquema descrito en [1]. Se trata de un problema de clasificación de dos clases en dos dimensiones. Los datos de la primera clase se dibujan a partir de dos distribuciones normales bivariadas O con la misma probabilidad, donde , Y . Del mismo modo, los datos de la segunda clase se dibujan a partir de dos distribuciones normales bivariadas O con la misma probabilidad, donde , Y . Los parámetros de distribución normales utilizados para crear este conjunto de datos da como resultado clústeres más estrictos en los datos que los datos utilizados en [1].

Cree un gráfico de dispersión de los datos agrupados por la clase.

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

Agregue 100 características irrelevantes para . Primero genere los datos de una distribución normal con una media de 0 y una varianza de 20.

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

Normalizar los datos para que todos los puntos estén entre 0 y 1.

XwithBadFeatures = bsxfun(@rdivide,...     bsxfun(@minus,XwithBadFeatures,min(XwithBadFeatures,[],1)),...     range(XwithBadFeatures,1)); X = XwithBadFeatures; 

Ajuste un modelo NCA a los datos utilizando el valor predeterminado (parámetro de regularización,Lambda valor. Utilice el solucionador LBFGS y visualice la información de convergencia.

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. 

Trace los pesos de las entidades. Los pesos de las entidades irrelevantes deben estar muy próximos a cero.

figure semilogx(ncaMdl.FeatureWeights,'ro'); xlabel('Feature index'); ylabel('Feature weight'); grid on; 

Todos los pesos son muy cercanos a cero. Esto indica que el valor de utilizado en el entrenamiento del modelo es demasiado grande. Cuando , todos los pesos de características se acercan a cero. Por lo tanto, es importante ajustar el parámetro de regularización en la mayoría de los casos para detectar las características relevantes.

Utilice la validación cruzada de cinco veces para sintonizar para la selección de características utilizando.fscnca Sintonización significa encontrar el valor que producirá la pérdida mínima de clasificación. Estos son los pasos para ajustar mediante la validación cruzada:

1. Primero particionar los datos en cinco pliegues. Para cada pliegue, asigna el 4/5º de los datos como un conjunto de entrenamiento, y 1/5º de los datos como un conjunto de prueba.cvpartition

cvp           = cvpartition(y,'kfold',5); numtestsets   = cvp.NumTestSets; lambdavalues  = linspace(0,2,20)/length(y); lossvalues    = zeros(length(lambdavalues),numtestsets); 

2. Entrenar el modelo de análisis de componentes de vecindad (NCA) para cada valor utilizando el conjunto de entrenamiento en cada pliegue.

3. Calcule la pérdida de clasificación para el conjunto de pruebas correspondiente en el pliegue utilizando el modelo NCA. Registre el valor de pérdida.

4. Repite esto para todos los pliegues y todos los Valores.

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 

Graficar los valores medios de pérdida de los pliegues frente al Valores.

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

Encuentra la valor que corresponde a la pérdida media mínima.

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

Ajuste el modelo NCA a todos los datos utilizando la mejor Valor. Utilice el solucionador LBFGS y visualice la información de convergencia.

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. 

Trace los pesos de las entidades.

figure semilogx(ncaMdl.FeatureWeights,'ro'); xlabel('Feature index'); ylabel('Feature weight'); grid on; 

se señala correctamente que las dos primeras características son relevantes y el resto no lo son.fscnca Tenga en cuenta que las dos primeras características no son individualmente informativas, pero cuando se toman juntos resultan en un modelo de clasificación preciso.

References

1. Yang, W., K. Wang, W. Zuo. "Selección de características de componentes de vecindad para datos de alta dimensión." .Journal of Computers Vol. 7, número 1, enero, 2012.