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

Clase: cvpartition

Cree una partición de validación cruzada para los datos

Descripción

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

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

ejemplo

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

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

ejemplo

c = cvpartition(group,'KFold',k,'Stratify',stratifyOption) Devuelve un objeto que define una partición aleatoria para la validación cruzada.ck Cuando se suministra como primer argumento de entrada, 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 exclusión (o prueba) con estratificación, utilizando la información de clase en.group Tanto los conjuntos de entrenamiento como los de prueba 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 exclusión (o prueba).c Cuando se suministra como primer argumento de entrada, 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 Leave-One-out en las observaciones.n Leave-One-out es un caso especial en el que el número de pliegues equivale 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 de 10 veces estratificada para calcular la tasa de clasificación errónea.

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 de plegado estratificado.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)))); 

Devuelva la tasa de clasificación errónea estimada mediante 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 ocurren en igual 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

Debido a que es una partición aleatoria no estratificada de los datos, las proporciones de clase en cada uno de los cinco pliegues no se garantiza que sean iguales a las proporciones de clase en.cvfisheririsspecies Es decir, las clases no ocurren 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 mostrados.

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

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 exclusión aleatoria 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] 

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

testIdx0 = gather(CV0.test);
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.35 sec 

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

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

     5
    50

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

Porque es una partición no estratificada, clase y clase en el conjunto de exclusión no se garantiza que se produzcan en la misma proporción que hacen en.CV012tgroup Sin embargo, debido a la aleatoriedad inherente en, a veces se puede obtener un conjunto de exclusión para el que las clases se producen en la misma proporción que lo hacen, incluso si se especifica.cvpartitiontgroup'Stratify',false Un resultado similar se puede ilustrar para el conjunto de entrenamiento.

Devuelva el resultado de la memoria.CV0.training

trainIdx0 = gather(CV0.training);
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.066 sec 

Encuentra 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
   150

No se garantiza que las clases del conjunto de formación no estratificada se produzcan en la misma proporción en la que se encuentran.tgroup

Cree una partición de exclusión aleatoria estratificada.

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

Devuelva el resultado de la memoria.CV1.test

testIdx1 = gather(CV1.test);
Evaluating tall expression using the Parallel Pool 'local': Evaluation completed in 0.084 sec 

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

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

     5
    50

En el caso de la partición de exclusión estratificada, la relación de clase en el conjunto de exclusión y la proporción de clase en son las mismas.tgroup(1:10)

Algoritmos

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

  • Cuando se suministra como primer argumento de entrada, 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