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.

Selección de entidades para clasificar datos de alta dimensión

En este ejemplo se muestra cómo seleccionar entidades para clasificar datos de alta dimensión. Más específicamente, muestra cómo realizar la selección secuencial de entidades, que es uno de los algoritmos de selección de características más populares. También muestra cómo utilizar la retención y la validación cruzada para evaluar el rendimiento de las entidades seleccionadas.

Reducir el número de características (dimensionalidad) es importante en el aprendizaje estadístico. Para muchos conjuntos de datos con un gran número de características y un número limitado de observaciones, como datos bioinformáticos, por lo general muchas características no son útiles para producir un resultado de aprendizaje deseado y las observaciones limitadas pueden llevar al algoritmo de aprendizaje a sobreajustarse al ruido. La reducción de características también puede ahorrar tiempo de almacenamiento y cálculo y aumentar la comprensión.

Hay dos enfoques principales para reducir las entidades: selección de entidades y transformación de entidades. Los algoritmos de selección de entidades seleccionan un subconjunto de entidades del conjunto de entidades original; los métodos de transformación de entidades transforman los datos del espacio de entidades de alta dimensión original a un nuevo espacio con una dimensionalidad reducida.

Carga de los datos

El diagnóstico del patrón proteómico sérico se puede utilizar para diferenciar las observaciones de pacientes con y sin enfermedad. Los patrones de perfil se generan utilizando espectrometría de masas de proteínas de desorción láser mejorada en superficie e ionización (SELDI). Estas características son niveles de intensidad iónial es superior a valores de carga/masa específicos.

Los datos de este ejemplo son del archivo .Banco de Datos del Programa de Proteómica Clínica FDA-NCI En este ejemplo se utiliza el conjunto de datos de cáncer de ovario de alta resolución que se generó mediante la matriz de proteínas WCX2. Después de algunos pasos de preprocesamiento, similares a los que se muestran en Bioinformatics Toolbox™ ejemplo, el conjunto de datos tiene dos variables y .Pre-procesamiento de datos de espectrometría de masas en brutoobsgrp La variable consta de 216 observaciones con 4000 entidades.obs Cada elemento de define el grupo al que pertenece la fila correspondiente.grpobs

load ovariancancer; whos 
  Name        Size                Bytes  Class     Attributes    grp       216x1                 26784  cell                   obs       216x4000            3456000  single                

Dividir datos en un conjunto de entrenamiento y un conjunto de pruebas

Algunas de las funciones utilizadas en este ejemplo llaman a MATLAB® funciones de generación de números aleatorias integradas. Para duplicar los resultados exactos que se muestran en este ejemplo, ejecute el siguiente comando para establecer el generador de números aleatorios en un estado conocido. De lo contrario, los resultados pueden diferir.

rng(8000,'twister'); 

El rendimiento de los datos de entrenamiento (rendimiento de la sustitución) no es una buena estimación para el rendimiento de un modelo en un conjunto de pruebas independiente. Por lo general, el rendimiento de la resustitución será demasiado optimista. Para predecir el rendimiento de un modelo seleccionado, debe evaluar su rendimiento en otro conjunto de datos que no se usó para compilar el modelo. Aquí, usamos para dividir los datos en un conjunto de entrenamiento de tamaño 160 y un conjunto de prueba de tamaño de tamaño 56.cvpartition Tanto el conjunto de entrenamiento como el conjunto de pruebas tienen aproximadamente las mismas proporciones de grupo que en .grp Seleccionamos funciones utilizando los datos de entrenamiento y juzgamos el rendimiento de las características seleccionadas en los datos de prueba. Esto se denomina a menudo validación de retención. Otro método simple y ampliamente utilizado para evaluar y seleccionar un modelo es la validación cruzada, que se ilustrará más adelante en este ejemplo.

holdoutCVP = cvpartition(grp,'holdout',56) 
 holdoutCVP =   Hold-out cross validation partition    NumObservations: 216        NumTestSets: 1          TrainSize: 160           TestSize: 56 
dataTrain = obs(holdoutCVP.training,:); grpTrain = grp(holdoutCVP.training); 

El problema de clasificar los datos utilizando todas las características

Sin reducir primero el número de características, algunos algoritmos de clasificación producirían un error en el conjunto de datos utilizado en este ejemplo, ya que el número de entidades es mucho mayor que el número de observaciones. En este ejemplo, usamos Quadratic Discriminant Analysis (QDA) como algoritmo de clasificación. Si aplicamos QDA en los datos utilizando todas las características, como se muestra a continuación, obtendremos un error porque no hay suficientes muestras en cada grupo para estimar una matriz de covarianza.

try    yhat = classify(obs(test(holdoutCVP),:), dataTrain, grpTrain,'quadratic'); catch ME    display(ME.message); end 
The covariance matrix of each group in TRAINING must be positive definite. 

Selección de entidades mediante un enfoque de filtro simple

Nuestro objetivo es reducir la dimensión de los datos mediante la búsqueda de un pequeño conjunto de características importantes que pueden dar un buen rendimiento de clasificación. Los algoritmos de selección de características se pueden agrupar aproximadamente en dos categorías: métodos de filtro y métodos de contenedor. Los métodos de filtro se basan en las características generales de los datos para evaluar y seleccionar los subconjuntos de características sin incluir el algoritmo de aprendizaje elegido (QDA en este ejemplo). Los métodos del wrapper utilizan el rendimiento del algoritmo de aprendizaje elegido para evaluar cada subconjunto de entidades candidatas. Los métodos del wrapper buscan características que se ajusten mejor al algoritmo de aprendizaje elegido, pero pueden ser significativamente más lentos que los métodos de filtro si el algoritmo de aprendizaje tarda mucho tiempo en ejecutarse. Los conceptos de "filtros" y "envoltorios" se describen en John G. Kohavi R. (1997) "Wrappers for feature subset selection", Artificial Intelligence, Vol.97, No.1-2, pp.272-324. En este ejemplo se muestra una instancia de un método de filtro y una instancia de un método contenedor.

Los filtros se utilizan generalmente como un paso de preprocesamiento, ya que son simples y rápidos. Un método de filtro ampliamente utilizado para los datos bioinformáticos es aplicar un criterio univariado por separado en cada entidad, suponiendo que no hay interacción entre las entidades.

Por ejemplo, podríamos aplicar la -prueba en cada entidad y comparar -valor (o los valores absolutos de -statistics) para cada entidad como una medida de lo eficaz que es en la separación de grupos.tpt

dataTrainG1 = dataTrain(grp2idx(grpTrain)==1,:); dataTrainG2 = dataTrain(grp2idx(grpTrain)==2,:); [h,p,ci,stat] = ttest2(dataTrainG1,dataTrainG2,'Vartype','unequal'); 

Para tener una idea general de lo bien separados que están los dos grupos por cada entidad, trazamos la función de distribución acumulativa empírica (CDF) de los -valores:p

ecdf(p); xlabel('P value'); ylabel('CDF value') 

Hay alrededor del 35% de las entidades que tienen -valores cercanos a cero y más del 50% de las entidades que tienen -valores menores a 0,05, lo que significa que hay más de 2500 características entre las 5000 características originales que tienen un fuerte poder de discriminación.pp Se pueden ordenar estas entidades según sus valores (o los valores absolutos de la estadística) y seleccionar algunas entidades de la lista ordenada.pt Sin embargo, normalmente es difícil decidir cuántas características se necesitan a menos que uno tenga algún conocimiento del dominio o el número máximo de características que se pueden considerar se ha dictado de antemano en función de restricciones externas.

Una forma rápida de decidir el número de entidades necesarias es trazar el MCE (error de clasificación incorrecta, es decir, el número de observaciones clasificadas erróneamente divididas por el número de observaciones) en el conjunto de pruebas en función del número de entidades. Dado que sólo hay 160 observaciones en el conjunto de entrenamiento, el mayor número de características para aplicar QDA es limitado, de lo contrario, puede que no haya suficientes muestras en cada grupo para estimar una matriz de covarianza. En realidad, para los datos utilizados en este ejemplo, la partición de retención y los tamaños de dos grupos dictan que el mayor número permitido de características para aplicar QDA es de aproximadamente 70. Ahora calculamos MCE para varios números de entidades entre 5 y 70 y mostramos la gráfica de MCE en función del número de entidades. Para estimar razonablemente el rendimiento del modelo seleccionado, es importante utilizar las 160 muestras de entrenamiento para ajustarse al modelo QDA y calcular el MCE en las 56 observaciones de prueba (marcas circulares azules en la siguiente gráfica). Para ilustrar por qué el error de resustitución no es una buena estimación de error del error de prueba, también mostramos la resustitución MCE utilizando marcas triangulares rojas.

[~,featureIdxSortbyP] = sort(p,2); % sort the features testMCE = zeros(1,14); resubMCE = zeros(1,14); nfs = 5:5:70; classf = @(xtrain,ytrain,xtest,ytest) ...              sum(~strcmp(ytest,classify(xtest,xtrain,ytrain,'quadratic'))); resubCVP = cvpartition(length(grp),'resubstitution') for i = 1:14    fs = featureIdxSortbyP(1:nfs(i));    testMCE(i) = crossval(classf,obs(:,fs),grp,'partition',holdoutCVP)...        /holdoutCVP.TestSize;    resubMCE(i) = crossval(classf,obs(:,fs),grp,'partition',resubCVP)/...        resubCVP.TestSize; end  plot(nfs, testMCE,'o',nfs,resubMCE,'r^');  xlabel('Number of Features');  ylabel('MCE');  legend({'MCE on the test set' 'Resubstitution MCE'},'location','NW');  title('Simple Filter Feature Selection Method'); 
 resubCVP =   Resubstitution (no partition of data)    NumObservations: 216        NumTestSets: 1          TrainSize: 216           TestSize: 216 

Para mayor comodidad, se define como una función anónima.classf Se ajusta a QDA en el conjunto de entrenamiento dado y devuelve el número de muestras mal clasificadas para el conjunto de pruebas dado. Si estaba desarrollando su propio algoritmo de clasificación, es posible que desee ponerlo en un archivo independiente, como se indica a continuación:

%  function err = classf(xtrain,ytrain,xtest,ytest) %       yfit = classify(xtest,xtrain,ytrain,'quadratic'); %        err = sum(~strcmp(ytest,yfit)); 

La resustitución MCE es demasiado optimista. Disminuye constantemente cuando se utilizan más entidades y cae a cero cuando se utilizan más de 60 entidades. Sin embargo, si el error de prueba aumenta mientras el error de resustitución sigue disminuyendo, es posible que se haya producido un sobreajuste. Este sencillo método de selección de características de filtro obtiene el MCE más pequeño en el conjunto de pruebas cuando se utilizan 15 entidades. El trazado muestra que el sobreajuste comienza a producirse cuando se utilizan 20 o más entidades. El MCE más pequeño en el conjunto de pruebas es 12.5%:

testMCE(3) 
 ans =      0.1250  

Estas son las primeras 15 características que alcanzan el MCE mínimo:

featureIdxSortbyP(1:15) 
 ans =    Columns 1 through 6          2814        2813        2721        2720        2452        2645    Columns 7 through 12          2644        2642        2650        2643        2731        2638    Columns 13 through 15          2730        2637        2398  

Aplicación de selección secuencial de entidades

El algoritmo de selección de características anterior no tiene en cuenta la interacción entre entidades; Además, las características seleccionadas de la lista en función de su clasificación individual también pueden contener información redundante, por lo que no se necesitan todas las características. Por ejemplo, el coeficiente de correlación lineal entre la primera entidad seleccionada (columna 2814) y la segunda entidad seleccionada (columna 2813) es casi 0,95.

corr(dataTrain(:,featureIdxSortbyP(1)),dataTrain(:,featureIdxSortbyP(2))) 
 ans =    single      0.9447  

Este tipo de procedimiento de selección de características simple se utiliza generalmente como un paso de preprocesamiento, ya que es rápido. Los algoritmos de selección de características más avanzados mejoran el rendimiento. La selección secuencial de entidades es una de las técnicas más utilizadas. Selecciona un subconjunto de entidades agregando secuencialmente (búsqueda hacia delante) o eliminando (búsqueda hacia atrás) hasta que se cumplen ciertas condiciones de detención.

En este ejemplo, usamos la selección de entidades secuenciales de avance en forma de contenedor para encontrar entidades importantes. Más específicamente, puesto que el objetivo típico de la clasificación es minimizar el MCE, el procedimiento de selección de características realiza una búsqueda secuencial usando el MCE del algoritmo de aprendizaje QDA en cada subconjunto de características candidatas como el indicador de rendimiento para eso Subconjunto. El conjunto de entrenamiento se utiliza para seleccionar las entidades y ajustarse al modelo QDA, y el conjunto de pruebas se utiliza para evaluar el rendimiento de la entidad finalmente seleccionada. Durante el procedimiento de selección de características, para evaluar y comparar el rendimiento de cada subconjunto de entidades candidatas, aplicamos la validación cruzada estratificada 10 veces al conjunto de entrenamiento. Más adelante ilustraremos por qué es importante aplicar la validación cruzada al conjunto de entrenamiento.

Primero generamos una partición estratificada de 10 veces para el conjunto de entrenamiento:

tenfoldCVP = cvpartition(grpTrain,'kfold',10) 
 tenfoldCVP =   K-fold cross validation partition    NumObservations: 160        NumTestSets: 10          TrainSize: 144  144  144  144  144  144  144  144  144  144           TestSize: 16  16  16  16  16  16  16  16  16  16 

A continuación, usamos los resultados del filtro de la sección anterior como un paso de preprocesamiento para seleccionar entidades. Por ejemplo, seleccionamos 150 características aquí:

fs1 = featureIdxSortbyP(1:150); 

Aplicamos la selección de entidades secuenciales hacia delante en estas 150 entidades. La función proporciona una forma sencilla (la opción predeterminada) para decidir cuántas entidades se necesitan.sequentialfs Se detiene cuando se encuentra el primer mínimo local del MCE de validación cruzada.

 fsLocal = sequentialfs(classf,dataTrain(:,fs1),grpTrain,'cv',tenfoldCVP); 

Las operaciones seleccionadas son las siguientes:

fs1(fsLocal) 
 ans =          2337         864        3288  

Para evaluar el rendimiento del modelo seleccionado con estas tres características, calculamos el MCE en las 56 muestras de prueba.

testMCELocal = crossval(classf,obs(:,fs1(fsLocal)),grp,'partition',...     holdoutCVP)/holdoutCVP.TestSize 
 testMCELocal =      0.0714  

Con sólo tres características seleccionadas, el MCE es sólo un poco más de la mitad del MCE más pequeño utilizando el método de selección de características de filtro simple.

El algoritmo puede haberse detenido prematuramente. A veces un MCE más pequeño es alcanzable buscando el mínimo del MCE de validación cruzada sobre un rango razonable de características. Por ejemplo, dibujamos la gráfica del MCE de validación cruzada en función del número de entidades para un máximo de 50 entidades.

[fsCVfor50,historyCV] = sequentialfs(classf,dataTrain(:,fs1),grpTrain,...     'cv',tenfoldCVP,'Nf',50); plot(historyCV.Crit,'o'); xlabel('Number of Features'); ylabel('CV MCE'); title('Forward Sequential Feature Selection with cross-validation'); 

El MCE de validación cruzada alcanza el valor mínimo cuando se utilizan 10 entidades y esta curva permanece plana en el rango de 10 entidades a 35 entidades. Además, la curva sube cuando se utilizan más de 35 entidades, lo que significa que el sobreajuste se produce allí.

Por lo general es preferible tener menos características, por lo que aquí elegimos 10 características:

fsCVfor10 = fs1(historyCV.In(10,:)) 
 fsCVfor10 =    Columns 1 through 6          2814        2721        2720        2452        2650        2731    Columns 7 through 10          2337        2658         864        3288  

Para mostrar estas 10 entidades en el orden en que se seleccionan en el procedimiento de reenvío secuencial, encontramos la fila en la que se convierten primero en verdaderas en la salida:historyCV

[orderlist,ignore] = find( [historyCV.In(1,:); diff(historyCV.In(1:10,:) )]' ); fs1(orderlist) 
 ans =    Columns 1 through 6          2337         864        3288        2721        2814        2658    Columns 7 through 10          2452        2731        2650        2720  

Para evaluar estas 10 características, calculamos su MCE para QDA en el conjunto de pruebas. Obtenemos el valor MCE más pequeño hasta ahora:

testMCECVfor10 = crossval(classf,obs(:,fsCVfor10),grp,'partition',...     holdoutCVP)/holdoutCVP.TestSize 
 testMCECVfor10 =      0.0357  

Es interesante ver la gráfica de valores MCE de resustitución en el conjunto de entrenamiento (es decir, sin realizar la validación cruzada durante el procedimiento de selección de características) en función del número de características:

[fsResubfor50,historyResub] = sequentialfs(classf,dataTrain(:,fs1),...      grpTrain,'cv','resubstitution','Nf',50); plot(1:50, historyCV.Crit,'bo',1:50, historyResub.Crit,'r^'); xlabel('Number of Features'); ylabel('MCE'); legend({'10-fold CV MCE' 'Resubstitution MCE'},'location','NE'); 

Una vez más, los valores mcE de resustitución son demasiado optimistas aquí. La mayoría son más pequeños que los valores MCE de validación cruzada, y el MCE de la resustitución va a cero cuando se utilizan 16 características. Podemos calcular el valor MCE de estas 16 características en el conjunto de pruebas para ver su rendimiento real:

fsResubfor16 = fs1(historyResub.In(16,:)); testMCEResubfor16 = crossval(classf,obs(:,fsResubfor16),grp,'partition',...     holdoutCVP)/holdoutCVP.TestSize 
 testMCEResubfor16 =      0.0714  

, el rendimiento de estas 16 características (elegidas por la resustitución durante el procedimiento de selección de características) en el conjunto de pruebas, es aproximadamente el doble que para , el rendimiento de las 10 características (elegido por 10 veces la validación cruzada durante el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características) en el procedimiento de selección de características conjunto de pruebas.testMCEResubfor16testMCECVfor10 De nuevo indica que el error de resustitución generalmente no es una buena estimación de rendimiento para evaluar y seleccionar características. Es posible que deseemos evitar el uso de un error de sustitución, no solo durante el paso de evaluación final, sino también durante el procedimiento de selección de características.

Consulte también

Temas relacionados