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 características para clasificar datos de alta cota

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

La reducción del número de entidades (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, tales 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 conducir el algoritmo de aprendizaje para sobreajustar al ruido. La reducción de características también puede ahorrar tiempo de almacenamiento y computación y aumentar la comprensibilidad.

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

La carga de datos

Los diagnósticos de patrones proteómicos séricos se pueden utilizar para diferenciar las observaciones de pacientes con y sin enfermedad. Los patrones de perfil se generan mediante la espectrometría de masas de proteínas de desorción y ionización por láser (SELDI) mejorada por superficie. Estas características son niveles de intensidad de iones con valores de masa/carga específicos.

Los datos de este ejemplo proceden de.Programa de proteómica clínica FDA-NCI de Databank Este ejemplo 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 pre-procesamiento, similares a los mostrados en el ejemplo de Toolbox™ Bioinformatics, el conjunto de datos tiene dos variables y.Pre-procesamiento de datos de espectrometría de masas RAWobsgrp La variable consta de 216 observaciones con 4000 características.obs Cada elemento 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 aleatorios integradas. Para duplicar los resultados exactos que se muestran en este ejemplo, ejecute el comando siguiente para establecer el generador de números aleatorios en un estado conocido. De lo contrario, sus resultados pueden diferir.

rng(8000,'twister'); 

El rendimiento de los datos de entrenamiento (rendimiento de reenvío) no es una buena estimación para el rendimiento de un modelo en un conjunto de pruebas independiente. Por lo general, el rendimiento de reenvío 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í, utilizamos 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 entidades utilizando los datos de entrenamiento y juzgamos el rendimiento de las entidades seleccionadas en los datos de prueba. Esto a menudo se denomina validación de exclusión. Otro método sencillo 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 datos utilizando todas las características

Sin primero reducir el número de entidades, algunos algoritmos de clasificación fallarían 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 el análisis de discriminante cuadrático (QDA) como el algoritmo de clasificación. Si aplicamos QDA en los datos utilizando todas las características, como se muestra a continuación, se obtendrá 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 características 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 en dos categorías: métodos de filtro y métodos de envoltura. 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 involucrar el algoritmo de aprendizaje elegido (QDA en este ejemplo). Los métodos de contenedor utilizan el rendimiento del algoritmo de aprendizaje elegido para evaluar cada subconjunto de características candidatas. Los métodos de envoltura buscan características que se adapten 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) "envolturas para la selección de subconjuntos de características", inteligencia artificial, 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 pre-procesamiento 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 haya interacción entre las entidades.

Por ejemplo, podríamos aplicar la prueba en cada entidad y comparar-valor (o los valores absolutos de-estadística) para cada característica como una medida de cuán eficaz es en separar los 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 cuán bien separados están los dos grupos por cada característica, 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 características que tienen valores cercanos a cero y más del 50% de las características que tienen valores menores que 0,05, lo que significa que hay más de 2500 características entre las características originales de 5000 que tienen un fuerte poder de discriminación.pp Se pueden ordenar estas características de acuerdo con sus valores (o los valores absolutos de la-estadística) y seleccionar algunas características de la lista ordenada.pt Sin embargo, suele ser difícil decidir cuántas características son necesarias a menos que uno tenga algún conocimiento de dominio o el número máximo de características que se pueden considerar se ha dictado de antemano en función de las restricciones externas.

Una forma rápida de decidir el número de características necesarias es trazar el MCE (error de clasificación errónea, es decir, el número de observaciones mal clasificadas dividido por el número de observaciones) en el conjunto de pruebas como una función del número de entidades. Dado que solo 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 exclusió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 características entre 5 y 70 y mostramos la trama de MCE como una función del número de características. Con el fin de estimar razonablemente el rendimiento del modelo seleccionado, es importante utilizar las muestras de formación 160 para ajustarse al modelo QDA y calcular el MCE en las observaciones de la prueba 56 (marcas circulares azules en la siguiente gráfica). Para ilustrar por qué el error de reenvío no es una buena estimación de error del error de prueba, también mostramos la representació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)); 

El MCE de reenvío es demasiado optimista. Disminuye constantemente cuando se utilizan más características y cae a cero cuando se utilizan más de 60 entidades. Sin embargo, si el error de prueba aumenta mientras el error de reenvío sigue disminuyendo, puede que se haya producido un sobreajuste. Este método de selección de características de filtro simple obtiene el MCE más pequeño en el conjunto de pruebas cuando se utilizan 15 características. La gráfica 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 prueba es 12,5%:

testMCE(3) 
 ans =      0.1250  

Estas son las primeras 15 características que logran 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  

Aplicando la selección secuencial de características

El algoritmo de selección de características anterior no considera 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 operación seleccionada (columna 2814) y la segunda operación 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 pre-procesamiento ya que es rápido. Los algoritmos de selección de características más avanzados mejoran el rendimiento. La selección secuencial de características es una de las técnicas más utilizadas. Selecciona un subconjunto de entidades agregando secuencialmente (búsqueda directa) o quitando (búsqueda hacia atrás) hasta que se cumplan ciertas condiciones de detención.

En este ejemplo, se utiliza la selección de características secuenciales de reenvío de forma envolvente para encontrar características importantes. Más concretamente, dado 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 utilizando el MCE del algoritmo de aprendizaje QDA en cada subconjunto de características candidatas como indicador de rendimiento para ese Subconjunto. El conjunto de entrenamiento se utiliza para seleccionar las entidades y ajustar el modelo QDA, y el conjunto de pruebas se utiliza para evaluar el rendimiento de la característica seleccionada finalmente. 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 de 10 veces estratificada al conjunto de entrenamiento. Ilustraremos más adelante 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 procesamiento previo para seleccionar entidades. Por ejemplo, seleccionamos 150 características aquí:

fs1 = featureIdxSortbyP(1:150); 

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

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

Las características 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 muestras de prueba 56.

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

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

Es posible que el algoritmo se haya detenido prematuramente. A veces un MCE más pequeño es alcanzable buscando el mínimo de la validación cruzada MCE sobre un rango razonable del número de características. Por ejemplo, dibujamos la trama de la validación cruzada MCE como una función del número de características para hasta 50 características.

[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 sobre 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 se produce un sobreajuste allí.

Por lo general, es preferible tener menos características, por lo que aquí recogemos 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 características en el orden en el que se seleccionan en el procedimiento de reenvío secuencial, encontramos la fila en la que primero se hacen realidad 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. Hasta ahora, se obtiene el valor MCE más pequeño:

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

Es interesante observar la trama de representación de los valores MCE en el conjunto de entrenamiento (es decir, sin realizar la validación cruzada durante el procedimiento de selección de características) como una 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 reenvío son excesivamente optimistas aquí. La mayoría son menores que los valores MCE de validación cruzada y la representación MCE pasa a cero cuando se utilizan 16 entidades. Podemos calcular el valor MCE de estas 16 características en el conjunto de prueba 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 representació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 (elegida por 10 veces la validación cruzada durante el procedimiento de selección de características) en el conjunto de pruebas.testMCEResubfor16testMCECVfor10 De nuevo, indica que el error de reenvío generalmente no es una buena estimación del rendimiento para evaluar y seleccionar entidades. Es posible que queramos evitar el uso de un error de reenvío, no solo durante el paso de evaluación final, sino también durante el procedimiento de selección de características.