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.

Clasificación subespacial aleatoria

Este ejemplo muestra cómo utilizar un conjunto subespacial aleatorio para aumentar la precisión de la clasificación. También muestra cómo usar la validación cruzada para determinar los parámetros buenos para la plantilla de aprendizaje débil y el conjunto.

Cargue los datos

Cargue los datos.ionosphere Estos datos tienen 351 respuestas binarias a 34 predictores.

load ionosphere; [N,D] = size(X)
N = 351 
D = 34 
resp = unique(Y)
resp = 2x1 cell array
    {'b'}
    {'g'}

Elija el número de vecinos más cercanos

Busque una buena opción para el número de vecinos más cercanos en el clasificador, mediante la validación cruzada.k Elija el número de vecinos aproximadamente espaciados uniformemente en una escala logarítmica.

rng(8000,'twister') % for reproducibility K = round(logspace(0,log10(N),10)); % number of neighbors  cvloss = zeros(numel(K),1); for k=1:numel(K)     knn = fitcknn(X,Y,...         'NumNeighbors',K(k),'CrossVal','On');     cvloss(k) = kfoldLoss(knn); end figure; % Plot the accuracy versus k semilogx(K,cvloss); xlabel('Number of nearest neighbors'); ylabel('10 fold classification error'); title('k-NN classification');

Se produce el error de validación cruzada más bajo.k = 2

Crea los conjuntos

Cree conjuntos para la clasificación de vecinos más cercanos con varios números de dimensiones y examine la pérdida validada entre los conjuntos resultantes.2

Este paso lleva mucho tiempo. Para realizar un seguimiento del progreso, imprima un mensaje a medida que finalice cada dimensión.

NPredToSample = round(linspace(1,D,10)); % linear spacing of dimensions cvloss = zeros(numel(NPredToSample),1); learner = templateKNN('NumNeighbors',2); for npred=1:numel(NPredToSample)    subspace = fitcensemble(X,Y,'Method','Subspace','Learners',learner, ...        'NPredToSample',NPredToSample(npred),'CrossVal','On');    cvloss(npred) = kfoldLoss(subspace);    fprintf('Random Subspace %i done.\n',npred); end
Random Subspace 1 done. Random Subspace 2 done. Random Subspace 3 done. Random Subspace 4 done. Random Subspace 5 done. Random Subspace 6 done. Random Subspace 7 done. Random Subspace 8 done. Random Subspace 9 done. Random Subspace 10 done. 
figure; % plot the accuracy versus dimension plot(NPredToSample,cvloss); xlabel('Number of predictors selected at random'); ylabel('10 fold classification error'); title('k-NN classification with Random Subspace');

Los conjuntos que usan cinco y ocho predictores por alumno tienen el error de validación cruzada más bajo. La tasa de error de estos conjuntos es de aproximadamente 0,06, mientras que los otros conjuntos tienen tasas de error validadas entre sí que son aproximadamente 0,1 o más.

Encuentra un buen tamaño de conjunto

Encuentra el número más pequeño de estudiantes en el conjunto que todavía dan una buena clasificación.

ens = fitcensemble(X,Y,'Method','Subspace','Learners',learner, ...        'NPredToSample',5,'CrossVal','on'); figure; % Plot the accuracy versus number in ensemble plot(kfoldLoss(ens,'Mode','Cumulative')) xlabel('Number of learners in ensemble'); ylabel('10 fold classification error'); title('k-NN classification with Random Subspace');

No parece haber ninguna ventaja en un conjunto con más de 50 o tan estudiantes. Es posible que 25 estudiantes dan buenas predicciones.

Crea un conjunto final

Construye un conjunto final con 50 alumnos. Compacte el conjunto y ver si la versión compactada guarda una cantidad apreciable de memoria.

ens = fitcensemble(X,Y,'Method','Subspace','NumLearningCycles',50,...     'Learners',learner,'NPredToSample',5); cens = compact(ens); s1 = whos('ens'); s2 = whos('cens'); [s1.bytes s2.bytes] % si.bytes = size in bytes
ans = 1×2

     1747024     1517536

El conjunto compacto es un 10% más pequeño que el conjunto completo. Ambos dan las mismas predicciones.

Consulte también

| | | |

Temas relacionados