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.

Aplicación de generación de código y clasificación de aprendizaje

El aprendizaje de clasificación es muy adecuado para elegir y entrenar modelos de clasificación de forma interactiva, pero no genera código de C/C++ que etiqueta los datos en función de un modelo entrenado. El botón de la sección de la aplicación de clasificación de aprendizaje genera código de MATLAB para entrenar un modelo, pero no genera código de C/C++.Generate FunctionExport En este ejemplo se muestra cómo generar código C a partir de una función que predice etiquetas mediante un modelo de clasificación exportado. El ejemplo construye un modelo que predice la calificación crediticia de un negocio dado diversos ratios financieros, de acuerdo con estos pasos:

  1. Utilice el conjunto de datos de calificación crediticia del archivo, que se incluye con.CreditRating_Historical.datStatistics and Machine Learning Toolbox™

  2. Reduzca la dimensionalidad de los datos utilizando el análisis de componentes principales (PCA).

  3. Entrenar un conjunto de modelos que admiten la generación de código para la predicción de etiquetas.

  4. Exporte el modelo con la precisión de clasificación de 5 veces y validación cruzada.

  5. Genere código C a partir de una función de punto de entrada que transforme los nuevos Datos predictores y, a continuación, predice las etiquetas correspondientes mediante el modelo exportado.

Cargue datos de muestra

Cargue datos de ejemplo e importe los datos en la aplicación clasificación de aprendizaje. Revise los datos con gráficos de dispersión y quite los predictores innecesarios.

Se usa para cargar el conjunto histórico de datos de calificación crediticia del archivo en una tabla.readtableCreditRating_Historical.dat

creditrating = readtable('CreditRating_Historical.dat'); 

En la pestaña, haga clic en.AppsClassification Learner

En el aprendizaje de clasificación, en la pestaña, en la sección, haga clic y seleccione.El alumno de clasificaciónFileNew SessionFrom Workspace

En el cuadro de diálogo nueva sesión, seleccione la tabla.creditrating Todas las variables, excepto la identificada como respuesta, son vectores numéricos de precisión doble. Haga clic para comparar los modelos de clasificación en función de la precisión de clasificación de 5 veces, validada en cruz.Start Session

El alumno de clasificación carga los datos y traza un gráfico de dispersión de las variables versus.WC_TAID Debido a que los números de identificación no son útiles para mostrar en un trazado, elija por debajo.RE_TAXPredictors

El gráfico de dispersión sugiere que las dos variables pueden separar las clases, y bastante bien.AAABBBBBCCC Sin embargo, las observaciones correspondientes a las clases restantes se mezclan en estas clases.

Los números de identificación no son útiles para la predicción. Por lo tanto, en la sección, haga clic y, a continuación, desactive la casilla de verificación.FeaturesSelección de característicasID También puede quitar predictores innecesarios desde el principio mediante las casillas de verificación en el cuadro de diálogo nueva sesión. En este ejemplo se muestra cómo quitar los predictores no utilizados para la generación de código cuando se han incluido todos los predictores.

Habilite el PCA

Habilite PCA para reducir la dimensionalidad de los datos.

En la sección, haga clic en y, a continuación, seleccione.FeaturesPCAHabilite el PCA Esta acción aplica PCA a los Datos predictores y, a continuación, transforma los datos antes de entrenar los modelos. El alumno de clasificación utiliza únicamente componentes que explican colectivamente el 95% de la variabilidad.

Entrenar modelos

Entrenar un conjunto de modelos que admiten la generación de código para la predicción de etiquetas.

Seleccione los siguientes modelos y opciones de clasificación, que admiten la generación de código para la predicción de etiquetas y, a continuación, realice la validación cruzada (para obtener más información, consulte).Soporte de generación de código, notas de uso y limitaciones Para seleccionar cada modelo, en la sección, haga clic en la flecha y, a continuación, haga clic en el modelo.Model TypeShow more Después de seleccionar un modelo y especificar cualquier opción, cierre los menús abiertos y, a continuación, haga clic en la sección.TrainTraining

Modelos y opciones para seleccionarDescripción
En, seleccioneÁrboles de decisiónAll TreesLos árboles de clasificación de diversas complejidades
En, seleccioneMáquinas de vectores de soporteAll SVMsSVMs de diversas complejidades y el uso de varios núcleos. Los SVMs complejos requieren tiempo para adaptarse.
En, seleccione.Los clasificadores de EnsembleBoosted Trees En la sección, haga clic en.Model TypeAdvanced Reduzca y aumente a.Maximum number of splits5Number of learners100Conjunto potenciado de árboles de clasificación
En, seleccione.Los clasificadores de EnsembleBagged Trees En la sección, haga clic en.Model TypeAdvanced Aumentar y aumentar a.Maximum number of splits50Number of learners100Bosque aleatorio de árboles de clasificación

Después de la validación cruzada de cada tipo de modelo, el explorador de datos muestra cada modelo y su precisión de clasificación de 5 veces, validada entre sí y resalta el modelo con la mejor precisión.

Seleccione el modelo que produce la precisión máxima de clasificación de 5 veces y validada, que es el modelo de códigos de salida de corrección de errores (ECOC) de los alumnos de SVM de gaussiana fino. Con PCA habilitado, el alumno de clasificación utiliza dos predictores de seis.

En la sección, haga clic en.PlotsConfusion Matrix

El modelo hace bien distinguir entre, y las clases.ABC Sin embargo, el modelo no distingue entre niveles particulares dentro de esos grupos, los niveles B inferiores en particular.

Exportar modelo a espacio de trabajo

Exporte el modelo al espacio de trabajo y guarde el modelo utilizando.MATLAB®saveCompactModel

En la sección, haga clic en y, a continuación, seleccione.ExportExport ModelExport Compact Model Haga clic en el cuadro de diálogo.OK

La estructura aparece en el espacio de trabajo.trainedModelMATLAB El campo contiene el modelo compacto.ClassificationSVMtrainedModel

En la línea de comandos, guarde el modelo compacto en un archivo llamado en la carpeta actual.ClassificationLearnerModel.mat

saveCompactModel(trainedModel.ClassificationSVM,'ClassificationLearnerModel')

Generar código C para predicción

La predicción mediante las funciones de objeto requiere un objeto de modelo entrenado, pero la opción de no acepta dichos objetos.-argscodegen Trabaje en torno a esta limitación utilizando y.saveCompactModelloadCompactModel Guarde un modelo entrenado utilizando.saveCompactModel A continuación, defina una función de punto de entrada que cargue el modelo guardado mediante y llame a la función.loadCompactModelPredecir Por último, se usa para generar código para la función de punto de entrada.codegen

Preprocesar datos

Preprocese los datos nuevos de la misma manera que preprocesa los datos de entrenamiento.

Para preprocesar, necesita los siguientes tres parámetros de modelo:

  • — Vector de columna de la mayoría de los elementos que identifican índices de variables para eliminar de los datos, donde está el número de variables predictoras en los datos sin procesarremoveVarspp

  • — Vector de fila de centros exactamente PCApcaCentersq

  • —-por-matriz de los coeficientes PCA, donde es a lo máspcaCoefficientsqrrq

Especifique los índices de las variables predictoras que eliminó al seleccionar los datos en el aprendizaje de clasificación.Selección de características Extraiga las estadísticas PCA de.trainedModel

removeVars = 1; pcaCenters = trainedModel.PCACenters; pcaCoefficients = trainedModel.PCACoefficients; 

Guarde los parámetros del modelo en un archivo con nombre en la carpeta actual.ModelParameters.mat

save('ModelParameters.mat','removeVars','pcaCenters','pcaCoefficients');

Definir función de punto de entrada

Una función de punto de entrada es una función que se define para la generación de código. Dado que no se puede llamar a ninguna función en el nivel superior mediante, debe definir una función de punto de entrada que llama a las funciones habilitadas para generación de código y, a continuación, generar código de C/C++ para la función de punto de entrada mediante CODEGEN.codegen

En la carpeta actual, defina una función denominada así:mypredictCL.m

  • Acepta una matriz numérica () de observaciones sin procesar que contiene las mismas variables predictoras que las pasadas a la clasificación LearnerX

  • Carga el modelo de clasificación y los parámetros del modelo enClassificationLearnerModel.matModelParameters.mat

  • Elimina las variables predictoras correspondientes a los índices enremoveVars

  • Transforma los datos de predictor restantes utilizando los centros PCA () y los coeficientes () estimados por el alumno de clasificaciónpcaCenterspcaCoefficients

  • Devuelve las etiquetas previstas mediante el modelo

Generar código

Dado que C y C++ son lenguajes con tipos estáticos, debe determinar las propiedades de todas las variables en la función de punto de entrada en tiempo de compilación. Especificar argumentos de tamaño variable mediante y generar código mediante los argumentos.coder.typeof

Cree una matriz de doble precisión llamada para la generación de código mediante.xcoder.typeof Especifique que el número de filas de es arbitrario, pero que debe tener columnas.xxp

p = size(creditrating,2) - 1; x = coder.typeof(0,[Inf,p],[1 0]);

Para obtener más información sobre cómo especificar argumentos de tamaño variable, vea.Especifique argumentos de tamaño variable para la generación de código

Genere una función MEX desde.mypredictCL.m Utilice la opción para especificar como argumento.-argsx

codegen mypredictCL -args x

genera el archivo MEX en la carpeta actual.codegenmypredictCL_mex.mexw64 La extensión de archivo depende de su plataforma.

Compruebe que el código generado

Compruebe que la función MEX devuelva las etiquetas esperadas.

Quite la variable de respuesta del conjunto de datos original y, a continuación, dibuje aleatoriamente 15 observaciones.

rng('default'); % For reproducibility m = 15; testsampleT = datasample(creditrating(:,1:(end - 1)),m);

Predecir las etiquetas correspondientes mediante el modelo de clasificación entrenado por el alumno de clasificación.predictFcn

testLabels = trainedModel.predictFcn(testsampleT);

Convierta la tabla resultante en una matriz.

testsample = table2array(testsampleT);

Las columnas de corresponden a las columnas de los Datos predictores cargados por el alumno de clasificación.testsample

Transfiera los datos de prueba a.mypredictCL La función predice las etiquetas correspondientes mediante el uso y el modelo de clasificación entrenado por el alumno de clasificación.mypredictCLPredecir

testLabelsPredict = mypredictCL(testsample);

Predecir las etiquetas correspondientes mediante el uso de la función MEX generada.mypredictCL_mex

testLabelsMEX = mypredictCL_mex(testsample);

Compare los conjuntos de predicciones.

isequal(testLabels,testLabelsMEX,testLabelsPredict)
ans =    logical     1

Devuelve Logical 1 (true) si todas las entradas son iguales. , y la función MEX devuelven los mismos valores.isequalpredictFcnmypredictCL

Consulte también

| | | |

Temas relacionados