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.

cvpartition

Crear partición de validación cruzada para datos

Descripción

c = cvpartition(n,'KFold',k) construye un objeto de lac Clasecvpartition definir una partición no estratificada aleatoria para -fold validación cruzada en observaciones.kn La partición divide las observaciones en submuestras desarticuladas (ok ), elegidos aleatoriamente pero con aproximadamente el mismo tamaño.Pliegues El valor predeterminado de es .k10

c = cvpartition(n,'HoldOut',p) crea una partición no estratificada aleatoria para la validación de retenciones en observaciones.n Esta partición divide las observaciones en un conjunto de entrenamiento y una prueba (o ).Retención El parámetro debe ser un escalar.p Cuando < , selecciona aleatoriamente observaciones aproximadamente para el conjunto de pruebas.0p1cvpartitionp*n Cuando es un entero, selecciona aleatoriamente observaciones para el conjunto de pruebas.pcvpartitionp El valor predeterminado de es .p1/10

ejemplo

c = cvpartition(group,'KFold',k) crea una partición aleatoria para una validación cruzada estratificada -fold. es un vector numérico, matriz categórica, matriz de caracteres, matriz de cadenas o matriz de celdas de vectores de caracteres que indica la clase de cada observación.kgroup Cada submuestra tiene aproximadamente el mismo tamaño y aproximadamente las mismas proporciones de clase que en .group

Cuando se proporciona como primer argumento de entrada a , la función crea particiones de validación cruzada que no incluyen filas de observaciones correspondientes a los valores que faltan en .groupcvpartitiongroup

ejemplo

c = cvpartition(group,'KFold',k,'Stratify',stratifyOption) devuelve un objeto que define una partición aleatoria para -fold de validación cruzada.ck Cuando se proporciona como el primer argumento de entrada a , la función implementa la estratificación de forma predeterminada.groupcvpartition Si también especifica , la función crea particiones aleatorias no estratificadas.'Stratify',false

Solo puede especificar si el primer argumento de entrada es .'Stratify',truecvpartitiongroup

c = cvpartition(group,'HoldOut',p) divide aleatoriamente las observaciones en un conjunto de entrenamiento y un conjunto de retenciones (o pruebas) con estratificación, utilizando la información de clase en .group Tanto el entrenamiento como los conjuntos de pruebas tienen aproximadamente las mismas proporciones de clase que en .group

ejemplo

c = cvpartition(group,'HoldOut',p,'Stratify',stratifyOption) devuelve un objeto que define una partición aleatoria en un conjunto de entrenamiento y un conjunto de retención (o prueba).c Cuando se proporciona como el primer argumento de entrada a , la función implementa la estratificación de forma predeterminada.groupcvpartition Si también especifica , la función crea particiones aleatorias no estratificadas.'Stratify',false

c = cvpartition(n,'LeaveOut') crea una partición aleatoria para la validación cruzada de las observaciones.n Leave-one-out es un caso especial en el que el número de pliegues es igual al número de observaciones.'KFold'

c = cvpartition(n,'resubstitution') crea un objeto que no particiona los datos.c Tanto el conjunto de entrenamiento como el conjunto de pruebas contienen todas las observaciones originales.n

Ejemplos

expandir todo

Utilice la validación cruzada estratificada de 10 veces para calcular la tasa de clasificación incorrecta.

Cargue el conjunto de datos de iris de Fisher.

load fisheriris; y = species; X = meas;

Cree una partición aleatoria para una validación cruzada estratificada -fold.10

c = cvpartition(y,'KFold',10);

Cree una función que calcule el número de muestras de prueba mal clasificadas.

fun = @(xTrain,yTrain,xTest,yTest)(sum(~strcmp(yTest,...     classify(xTest,xTrain,yTrain)))); 

Devuelve la tasa de clasificación incorrecta estimada mediante la validación cruzada.

rate = sum(crossval(fun,X,y,'partition',c))...            /sum(c.TestSize)
rate = 0.0200 

Encuentre la proporción de cada clase en una partición no estratificada de 5 veces de los datos.fisheriris

Cargue el conjunto de datos de iris de Fisher.

load fisheriris;

Busque el número de instancias de cada clase en los datos.

[C,~,idx] = unique(species); C % Unique classes
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

n = accumarray(idx(:),1) % Number of instances for each class in species
n = 3×1

    50
    50
    50

Las tres clases se producen en la misma proporción.

Cree una partición aleatoria no estratificada de 5 veces.

cv = cvpartition(species,'KFold',5,'Stratify',false) 
cv =  K-fold cross validation partition    NumObservations: 150        NumTestSets: 5          TrainSize: 120  120  120  120  120           TestSize: 30  30  30  30  30 

Mostrar que las tres clases no se producen en la misma proporción para cada pliegue del conjunto de datos.

for i = 1:cv.NumTestSets     disp(['Fold ',num2str(i)])     testClasses = species(cv.test(i));     [C,~,idx] = unique(testClasses);     C % Unique classes     nCount = accumarray(idx(:),1) % Number of instances for each class in a fold end
Fold 1 
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

nCount = 3×1

     8
    13
     9

Fold 2 
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

nCount = 3×1

    10
    11
     9

Fold 3 
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

nCount = 3×1

    10
     8
    12

Fold 4 
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

nCount = 3×1

    12
     8
    10

Fold 5 
C = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

nCount = 3×1

    10
    10
    10

Dado que es una partición aleatoria no estratificada de los datos, no se garantiza que las proporciones de clase en cada uno de los cinco pliegues sean iguales a las proporciones de clase en .cvfisheririsspecies Es decir, las clases no se producen por igual en cada pliegue, como lo hacen en .species La validación cruzada produce aleatoriedad en los resultados, por lo que el número de instancias de cada clase en un pliegue puede variar de los que se muestran.

Compare el número de instancias para cada clase en un conjunto de retención no estratificado con un conjunto de retención estratificado de una matriz alta.

Al realizar cálculos en matrices altas, MATLAB® utiliza un grupo paralelo (predeterminado si tiene Parallel Computing Toolbox™) o la sesión local de MATLAB. Si desea ejecutar el ejemplo utilizando la sesión local de MATLAB cuando tiene Parallel Computing Toolbox, puede cambiar el entorno de ejecución global mediante la función.mapreducer

Cree un vector numérico de dos clases, donde la clase y la clase se producen en la relación.121:10

group = [ones(20,1);2*ones(200,1)]
group = 220×1

     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
      ⋮

Cree una matriz alta a partir de .group

tgroup = tall(group)
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 4).  tgroup =    220x1 tall double column vector       1      1      1      1      1      1      1      1      :      : 

es la única opción que se admite para matrices altas.Holdoutcvpartition Cree una partición de retención aleatoria y no estratificada.

CV0 = cvpartition(tgroup,'Holdout',1/4,'Stratify',false)  
CV0 =  Hold-out cross validation partition    NumObservations: [1x1 tall]        NumTestSets: 1          TrainSize: [1x1 tall]           TestSize: [1x1 tall] 

Devuelve el resultado de la memoria mediante la función.CV0.testgather

testIdx0 = gather(CV0.test);
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 3.4 sec Evaluation completed in 3.5 sec 

Busque el número de veces que se produce cada clase en el conjunto de retenciones.

accumarray(group(testIdx0),1) % Number of instances for each class in the holdout set
ans = 2×1

     5
    51

produce aleatoriedad en los resultados, por lo que el número de instancias para cada clase puede variar de los que se muestran.cvpartition

Dado que es una partición no estratificada, no se garantiza que la clase y la clase del conjunto de retención se produzcan en la misma proporción que en .CV012tgroup Sin embargo, debido a la aleatoriedad inherente en , a veces puede obtener un conjunto de retenciones para el que las clases se producen en la misma proporción que lo hacen en aunque especifique .cvpartitiontgroup'Stratify',false Se puede ilustrar un resultado similar para el conjunto de entrenamiento.

Devuelve el resultado de la memoria.CV0.training

trainIdx0 = gather(CV0.training);
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 2.8 sec Evaluation completed in 2.8 sec 

Encuentre el número de veces que se produce cada clase en el conjunto de entrenamiento.

accumarray(group(trainIdx0),1) % Number of instances for each class in the training set
ans = 2×1

    15
   149

No se garantiza que las clases del conjunto de entrenamiento no estratificado se produzcan en la misma proporción que en .tgroup

Cree una partición de retención aleatoria y estratificada.

CV1 = cvpartition(tgroup,'Holdout',1/4)  
CV1 =  Hold-out cross validation partition    NumObservations: [1x1 tall]        NumTestSets: 1          TrainSize: [1x1 tall]           TestSize: [1x1 tall] 

Devuelve el resultado de la memoria.CV1.test

testIdx1 = gather(CV1.test);
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 1 sec Evaluation completed in 1.1 sec 

Busque el número de veces que se produce cada clase en el conjunto de retenciones.

accumarray(group(testIdx1),1) % Number of instances for each class in the holdout set
ans = 2×1

     4
    48

En el caso de la partición de retención estratificada, la relación de clases en el conjunto de retenciones y la relación de clase s in son las mismas.tgroup(1:10)

Algoritmos

  • Si proporciona como primer argumento de entrada a , la función crea particiones de validación cruzada que no incluyen filas de observaciones correspondientes a los valores que faltan en .groupcvpartitiongroup

  • Cuando se proporciona como el primer argumento de entrada a , la función implementa la estratificación de forma predeterminada.groupcvpartition Puede especificar la creación de particiones aleatorias no estratificadas.'Stratify',false

  • Solo puede especificar si el primer argumento de entrada es .'Stratify',truecvpartitiongroup

Capacidades ampliadas

Consulte también

|

Introducido en R2008a