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.

Predecir etiquetas de clase mediante el bloque de funciones de MATLAB

Este ejemplo muestra cómo añadir un bloque de función de MATLAB a un® de Simulink para la predicción de etiquetas. El bloque function de MATLAB acepta datos de streaming y predice la puntuación de etiqueta y clasificación mediante un modelo de clasificación de máquina de vectores de soporte (SVM) entrenado. Para obtener más información sobre el uso del bloque function de MATLAB, consulte.Create Custom Functionality Using MATLAB Function Block (Simulink)

El conjunto de datos, que se incluye en el cuadro de herramientas estadísticas y aprendizaje automático™, contiene cualidades de retorno por radar () y Datos predictores ().ionosphereYX Los retornos de radar son de buena calidad () o de mala calidad ().'g''b'

Cargue el conjunto de datos.ionosphere Determine el tamaño de la muestra.

load ionosphere n = numel(Y) 
 n =     351  

El bloque function de MATLAB no puede devolver matrices de celdas. Por lo tanto, convertir la variable de respuesta a un vector lógico cuyos elementos son si las devoluciones de radar son buenas, y de lo contrario.10

Y = strcmp(Y,'g'); 

Supongamos que las devoluciones del radar se detectan en secuencia, y usted tiene las primeras 300 observaciones, pero usted no ha recibido el último 51 todavía. Particionar los datos en muestras presentes y futuras.

prsntX = X(1:300,:); prsntY = Y(1:300); ftrX = X(301:end,:); ftrY = Y(301:end); 

Entrenar un modelo SVM utilizando todos los datos actualmente disponibles. Especifique la estandarización de Datos predictores.

Mdl = fitcsvm(prsntX,prsntY,'Standardize',true); 

es un modelo.MdlClassificationSVM En la línea de comando, puede utilizar para realizar predicciones para nuevas observaciones.Mdl Sin embargo, no se puede usar como argumento de entrada en una función destinada a la generación de código.Mdl

Prepárese para cargarse dentro de la función utilizando.MdlsaveCompactModel

saveCompactModel(Mdl,'SVMIonosphere'); 

compacte y, a continuación, lo guarda en el archivo MAT.saveCompactModelMdlSVMIonosphere.mat

Defina una función de punto de entrada denominada que predice si un retorno de radar es de buena calidad.svmIonospherePredict.m La función debe:

  • Incluya la Directiva de generación de código en algún lugar de la función.%#codegen

  • Acepte Datos predictores de retorno por radar. Los datos deben ser proporcionales a excepción del número de filas.X

  • Carga usando.SVMIonosphere.matloadCompactModel

  • Devuelva las etiquetas pronosticadas y las puntuaciones de clasificación para predecir la calidad del retorno del radar como buena (es decir, la puntuación de clase positiva).

 function [label,score] = svmIonospherePredict(X) %#codegen %svmIonospherePredict Predict radar-return quality using SVM model %   svmIonospherePredict predicts labels and estimates classification %   scores of the radar returns in the numeric matrix of preditor data X %   using the compact SVM model in the file SVMIonosphere.mat.  Rows of X %   correspond to observations and columns to predictor variables.  label %   is the predicted label and score is the confidence measure for %   classifying the radar-return quality as good. % % Copyright 2016 The MathWorks Inc. Mdl = loadCompactModel('SVMIonosphere'); [label,bothscores] = predict(Mdl,X); score = bothscores(:,2); end  

Nota: Si pulsa el botón situado en la sección superior derecha de esta página y abre este ejemplo en MATLAB®, MATLAB abre la carpeta de ejemplo. Esta carpeta incluye el archivo de función de punto de entrada.

Cargue el modelo® de Simulink.slexSVMIonospherePredictExample.slx

SimMdlName = 'slexSVMIonospherePredictExample'; open_system(SimMdlName); 

La figura muestra el modelo de® de Simulink. Cuando el nodo de entrada detecta un retorno de radar, dirige esa observación al bloque de función de MATLAB que se envía a.svmIonospherePredict.m Después de predecir la etiqueta y la puntuación, el modelo devuelve estos valores al área de trabajo y muestra los valores dentro del modelo uno a la vez. Cuando se carga, MATLAB® también carga el conjunto de datos que necesita llamar.slexSVMIonospherePredictExample.slxradarReturnInput Sin embargo, en este ejemplo se muestra cómo construir el conjunto de datos necesario.

El modelo espera recibir datos de entrada como una matriz de estructura llamada que contiene estos campos:radarReturnInput

  • -Los puntos en el tiempo en que las observaciones entran en el modelo.time En el ejemplo, la duración incluye los enteros de 0 aunque 50. La orientación debe corresponder a las observaciones de los Datos predictores. Por lo tanto, para este ejemplo, debe ser un vector de columna.time

  • -Una matriz de estructura 1 por 1 que describe los datos de entrada, y que contiene los campos y. es una matriz de Datos predictores. es el número de variables predictoras.signalsvaluesdimensionsvaluesdimensions

Cree una matriz de estructura adecuada para futuras devoluciones de radar.

radarReturnInput.time = (0:50)'; radarReturnInput.signals(1).values = ftrX; radarReturnInput.signals(1).dimensions = size(ftrX,2); 

Puede cambiar el nombre y, a continuación, especifique el nuevo nombre en el modelo.radarReturnInput Sin embargo, Simulink® espera que la matriz de estructura contenga los nombres de campo descritos.

Simular el modelo utilizando los datos mantenidos fuera del entrenamiento, es decir, los datos en.radarReturnInput

sim(SimMdlName); 

La figura muestra el modelo después de que procesa todas las observaciones en uno a la vez.radarReturnInput La etiqueta pronosticada de is y su puntuación de clase positiva es.X(351,:)11.431 Las variables, y aparecen en el espacio de trabajo. y son objetos que contienen las etiquetas y puntuaciones previstas.toutyoutsvmlogsoutyoutsvmlogsoutSimulinkData.Dataset Para obtener más información, consulte.Data Format for Logged Simulation Data (Simulink)

Extraiga los datos de simulación del registro de simulación.

labelsSL = svmlogsout.getElement(1).Values.Data; scoresSL = svmlogsout.getElement(2).Values.Data; 

es un vector numérico de 51 por 1 de las etiquetas pronosticadas. = significa que el modelo SVM predice que el retorno de radar en la muestra futura es de buena calidad, y significa lo contrario. es un vector numérico de 51 por 1 de puntuaciones de clase positiva, es decir, distancias firmadas desde el límite de decisión.labelsSLlabelsSL(j)1j0scoresSL Las puntuaciones positivas corresponden a las etiquetas pronosticadas y las puntuaciones negativas corresponden a las etiquetas pronosticadas de.10

Predecir etiquetas y puntuaciones de clase positiva en la línea de comandos utilizando.predict

[labelCMD,scoresCMD] = predict(Mdl,ftrX); scoresCMD = scoresCMD(:,2); 

y son proporcionales y.labelCMDscoresCMDlabelsSLscoresSL

Compare las puntuaciones de las futuras muestras y las de clase positiva devueltas a las devueltas llamando a la línea de comandos.slexSVMIonospherePredictExamplePredecir

err = sum((scoresCMD - scoresSL).^2); err < eps 
 ans =    logical     1  

La suma de las desviaciones cuadradas entre los conjuntos de puntuaciones es insignificante.

Si también tiene una licencia de Simulink® Coder™, puede generar código C desde Simulink® o desde la línea de comandos.slexSVMIonospherePredictExample.slxrtwbuild Para obtener más información, consulte.Generate C Code for a Model (Simulink Coder)

Consulte también

| | | |

Temas relacionados