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.

kfoldPredict

Predecir etiquetas para observaciones no utilizadas para el entrenamiento

Descripción

ejemplo

Label = kfoldPredict(CVMdl) Devuelve etiquetas de clase validadas en cruz previstas por el modelo de clasificación lineal, binario y validado.CVMdl Es decir, para cada pliegue, predice las etiquetas de clase para las observaciones que se mantiene cuando se entrena utilizando todas las demás observaciones.kfoldPredict

contiene etiquetas de clase pronosticadas para cada resistencia de regularización en los modelos de clasificación lineal que componen.LabelCVMdl

ejemplo

[Label,Score] = kfoldPredict(CVMdl) también devuelve la validación cruzada para ambas clases. contiene puntuaciones de clasificación para cada fuerza de regularización en.puntuaciones de clasificaciónPuntuaciónCVMdl

Argumentos de entrada

expandir todo

Modelo de clasificación lineal, binario y validado mediante validación cruzada, especificado como objeto de modelo.ClassificationPartitionedLinear Puede crear un modelo utilizando y especificando cualquiera de los argumentos de combinación de validación cruzada, nombre-valor, por ejemplo,.ClassificationPartitionedLinearfitclinearCrossVal

Para obtener estimaciones, se aplican los mismos datos utilizados para validar el modelo de clasificación lineal (y).kfoldPredictXY

Argumentos de salida

expandir todo

Etiquetas de clase predichas de validación cruzada, devueltas como una matriz categórica o de caracteres, matriz lógica o numérica, o matriz de celdas de vectores de caracteres.

En la mayoría de los casos, es una-por-matriz del mismo tipo de datos que las etiquetas de clase observadas (véase) que se utilizan para crear.LabelnLYCVMdl (The software treats string arrays as cell arrays of character vectors.) es el número de observaciones en los Datos predictores (ver) y es el número de fortalezas de regularización en.nXLCVMdl.Trained{1}.Lambda Es decir Label(i,j) es la etiqueta de clase pronosticada para la observación i utilizando el modelo de clasificación lineal que tiene fuerza de regularización CVMdl.Trained{1}.Lambda(j).

Si es una matriz de caracteres y > 1, entonces es una matriz de celdas de etiquetas de clase.YLLabel

Validado de forma cruzada, devuelto como un array-por-2-por-numérico. es el número de observaciones en los Datos predictores que crearon (ver) y es el número de fortalezas de regularización en.puntuaciones de clasificaciónnLnCVMdlXLCVMdl.Trained{1}.Lambda Score(i,k,j) es la puntuación para clasificar la observación i en la clase k utilizando el modelo de clasificación lineal que tiene fuerza de regularización CVMdl.Trained{1}.Lambda(j). almacena el orden de las clases.CVMdl.ClassNames

Si es así, las puntuaciones de clasificación son probabilidades posteriores.CVMdl.Trained{1}.Learner'logistic'

Ejemplos

expandir todo

Cargue el conjunto de datos NLP.

load nlpdata

es una matriz dispersa de Datos predictores y es un vector categórico de etiquetas de clase.XY Hay más de dos clases en los datos.

Los modelos deben identificar si la palabra cuenta en una página web son de la documentación de estadísticas y machine learning Toolbox™. Por lo tanto, identifique las etiquetas que corresponden a las páginas web de documentación de estadísticas y machine learning Toolbox™.

Ystats = Y == 'stats';

Valide de forma cruzada un modelo de clasificación lineal y binario utilizando todo el conjunto de datos, que puede identificar si la palabra cuenta en una página web de documentación proceden de la documentación estadísticas y machine learning Toolbox™.

rng(1); % For reproducibility  CVMdl = fitclinear(X,Ystats,'CrossVal','on'); Mdl1 = CVMdl.Trained{1}
Mdl1 =    ClassificationLinear       ResponseName: 'Y'         ClassNames: [0 1]     ScoreTransform: 'none'               Beta: [34023x1 double]               Bias: -1.0008             Lambda: 3.5193e-05            Learner: 'svm'     Properties, Methods  

es un modelo.CVMdlClassificationPartitionedLinear De forma predeterminada, el software implementa la validación cruzada de 10 veces. Puede alterar el número de pliegues mediante el argumento de par nombre-valor.'KFold'

Predecir etiquetas para las observaciones que no se emplearon en el entrenamiento de los pliegues.fitclinear

label = kfoldPredict(CVMdl);

Dado que hay una fuerza de regularización en, es un vector de columna de predicciones que contiene tantas filas como observaciones.Mdl1EtiquetaX

Construya una matriz de confusión.

ConfusionTrain = confusionchart(Ystats,label);

El modelo clasifica erróneamente 15 páginas de documentación como fuera de la documentación de estadísticas y machine learning Toolbox, y clasifica erróneamente nueve páginas como páginas.'stats''stats'

Los modelos de clasificación lineal devuelven probabilidades posteriores solo para los alumnos de regresión logística.

Cargue el conjunto de datos NLP y preprocesarlo como en.Las etiquetas de validación cruzada de predicción se pliegank Transponer la matriz de Datos predictores.

load nlpdata Ystats = Y == 'stats'; X = X';

Valide los modelos de clasificación binaria y lineal mediante la validación cruzada de 5 veces. Optimice la función objetivo utilizando SpaRSA. Reduzca la tolerancia en el degradado de la función objetiva a.1e-8

rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',...     'KFold',5,'Learner','logistic','Solver','sparsa',...     'Regularization','lasso','GradientTolerance',1e-8);

Predecir las probabilidades de clase posterior para las observaciones que no se utilizan para entrenar cada pliegue.

[~,posterior] = kfoldPredict(CVMdl); CVMdl.ClassNames
ans = 2x1 logical array

   0
   1

Debido a que hay una fuerza de regularización en, es una matriz con 2 columnas y filas iguales al número de observaciones.CVMdlposterior La columna contiene probabilidades posteriores de una observación determinada.iMdl.ClassNames(i)

Obtener tasas positivas falsas y verdaderas, y estimar el AUC. Especifique que la segunda clase es la clase positiva.

[fpr,tpr,~,auc] = perfcurve(Ystats,posterior(:,2),CVMdl.ClassNames(2)); auc
auc = 0.9989 

El AUC es, que indica un modelo que predice bien.0.9990

Trace una curva ROC.

figure; plot(fpr,tpr) h = gca; h.XLim(1) = -0.1; h.YLim(2) = 1.1; xlabel('False positive rate') ylabel('True positive rate') title('ROC Curve')

La curva ROC indica que el modelo se clasifica casi perfectamente.

Para determinar una buena resistencia a la penalización de lazo para un modelo de clasificación lineal que utiliza un aprendizaje de regresión logística, compare los valores de AUC validados de forma cruzada.

Cargue el conjunto de datos NLP. Preprocese los datos como en.Estimación: dobla las probabilidades de la clase posterior de validación cruzadak

load nlpdata Ystats = Y == 'stats'; X = X';

Hay 9471 observaciones en la muestra de prueba.

Cree un conjunto de 11 fortalezas de regularización logarmicamente espaciadas de

<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>6</mn>
</mrow>
</msup>
</mrow>
</math>
a través de
<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
</mrow>
</msup>
</mrow>
</math>
.

Lambda = logspace(-6,-0.5,11);

Valide de forma cruzada los modelos de clasificación lineal y binaria que utilizan cada una de las fortalezas de regularización y la validación cruzada de 5 veces. Optimice la función objetivo utilizando SpaRSA. Reduzca la tolerancia en el degradado de la función objetiva a.1e-8

rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',...     'KFold',5,'Learner','logistic','Solver','sparsa',...     'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl =    classreg.learning.partition.ClassificationPartitionedLinear     CrossValidatedModel: 'Linear'            ResponseName: 'Y'         NumObservations: 31572                   KFold: 5               Partition: [1×1 cvpartition]              ClassNames: [0 1]          ScoreTransform: 'none'     Properties, Methods  
Mdl1 = CVMdl.Trained{1}
Mdl1 =    ClassificationLinear       ResponseName: 'Y'         ClassNames: [0 1]     ScoreTransform: 'logit'               Beta: [34023×11 double]               Bias: [-13.2904 -13.2904 -13.2904 -13.2904 -9.9357 -7.0782 -5.4335 -4.5473 -3.4223 -3.1649 -2.9795]             Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162]            Learner: 'logistic'     Properties, Methods  

es un objeto de modelo.Mdl1ClassificationLinear Porque es una secuencia de fortalezas de regularización, se puede pensar en como 11 modelos, uno para cada fuerza de regularización en.LambdaMdl1Lambda

Predecir las etiquetas validadas en cruz y las probabilidades de clase posterior.

[label,posterior] = kfoldPredict(CVMdl); CVMdl.ClassNames; [n,K,L] = size(posterior)
n = 31572 
K = 2 
L = 11 
posterior(3,1,5)
ans = 1.0000 

es una matriz de 31572 por 11 de etiquetas pronosticadas.Etiqueta Cada columna corresponde a las etiquetas pronosticadas del modelo entrenado utilizando la fuerza de regularización correspondiente. es una matriz 31572-por-2-por-11 de probabilidades de clase posterior.posterior Las columnas corresponden a las clases y las páginas corresponden a las fortalezas de regularización. Por ejemplo, indica que la probabilidad posterior de que la primera clase (etiqueta) se asigne a la observación 3 por el modelo que utiliza como fuerza de regularización es 1,0000.posterior(3,1,5)0Lambda(5)

Para cada modelo, calcule el AUC. Designe la segunda clase como clase positiva.

auc = 1:numel(Lambda);  % Preallocation for j = 1:numel(Lambda)     [~,~,~,auc(j)] = perfcurve(Ystats,posterior(:,2,j),CVMdl.ClassNames(2)); end

Valores más altos de plomo a la dispersión variable predictora, que es una buena calidad de un clasificador.Lambda Para cada fuerza de regularización, entrenar un modelo de clasificación lineal utilizando todo el conjunto de datos y las mismas opciones que cuando se entrenó el modelo. Determine el número de coeficientes distintos de cero por modelo.

Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',...     'Learner','logistic','Solver','sparsa','Regularization','lasso',...     'Lambda',Lambda,'GradientTolerance',1e-8); numNZCoeff = sum(Mdl.Beta~=0);

En la misma figura, trace las tasas de error de muestreo de prueba y la frecuencia de coeficientes distintos de cero para cada fuerza de regularización. Trace todas las variables en la escala de registro.

figure; [h,hL1,hL2] = plotyy(log10(Lambda),log10(auc),...     log10(Lambda),log10(numNZCoeff + 1));  hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} AUC') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') title('Cross-Validated Statistics') hold off

Elija el índice de la fuerza de regularización que equilibra la dispersión variable predictora y el alto AUC. En este caso, un valor entre

<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>3</mn>
</mrow>
</msup>
</mrow>
</math>
Para
<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</msup>
</mrow>
</math>
debería ser suficiente.

idxFinal = 9;

Seleccione el modelo con la fuerza de regularización elegida.Mdl

MdlFinal = selectModels(Mdl,idxFinal);

es un modelo que contiene una fuerza de regularización.MdlFinalClassificationLinear Para estimar las etiquetas de las nuevas observaciones, pasar y los nuevos datos a.MdlFinalPredecir

Más acerca de

expandir todo

Introducido en R2016a