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 con Stateflow

En este ejemplo se muestra cómo usar un gráfico de® de Stateflow para la predicción de etiquetas. El ejemplo entrena un modelo de análisis discriminante para el conjunto de datos de iris de Fisher mediante, y define una función para la generación de código que carga el modelo entrenado y predice las etiquetas para los nuevos datos.fitcdiscr El gráfico Stateflow de este ejemplo acepta datos de streaming y predice etiquetas mediante la función que defina.

El conjunto de datos de iris de Fisher, que se incluye en estadísticas y machine learning Toolbox™, contiene especies () y mediciones () en longitud sépalo, ancho sépalo, longitud de pétalo y anchura de pétalo para 150 muestras de iris.speciesmeas El conjunto de datos contiene 50 ejemplares de cada una de las tres especies: setosa, versicolor y virginica.

Cargue el conjunto de datos de iris de Fisher.

load fisheriris 

Convertir a un vector de índice donde 1, 2, y 3 corresponden a setosa, versicolor, y virginica, respectivamente.species

species = grp2idx(species); 

Particionar los datos en un conjunto de entrenamiento y un conjunto de pruebas.

rng('default') % For reproducibility idx1 = randperm(150,75)'; idx2 = setdiff((1:150)',idx1); X = meas(idx1,:); Y = species(idx1,:); trainX = meas(idx2,:); trainY = species(idx2,:); 

Utilice y para entrenar un modelo, y utilizar y para probar el modelo entrenado.trainXtrainYXY

Entrenar un modelo de análisis de discriminante cuadrático.

Mdl = fitcdiscr(trainX,trainY,'DiscrimType','quadratic'); 

es un modelo.MdlClassificationDiscriminant 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 para la generación de código.Mdl Prepárese para cargarse dentro de la función utilizando.MdlsaveCompactModel

saveCompactModel(Mdl,'DiscrIris'); 

compacte y lo guarda en el archivo MAT.saveCompactModelMdlDiscrIris.mat

Para mostrar las especies previstas en el cuadro de visualización del modelo Stateflow®, defina una clase de enumeración utilizando un bloque en el archivo MATLAB.classdefIrisSpecies.m

 classdef IrisSpecies < Simulink.IntEnumType   enumeration     Setosa(1)     Versicolor(2)     Virginica(3)   end end  

Para obtener más información sobre los datos enumerados, consulte.Define Enumerated Data Types (Stateflow)

Defina una función denominada que predice las especies de iris de los nuevos datos de medición utilizando el modelo entrenado.mypredict.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 de medición de iris. Los datos deben ser coherentes con X, excepto el número de filas.

  • Carga usando.DiscrIris.matloadCompactModel

  • Devuelven especies de iris predichas.

 function label  = mypredict(X) %#codegen %MYPREDICT Predict species of iris flowers using discriminant model %   mypredict predicts species of iris flowers using the compact %   discriminant model in the file DiscrIris.mat. Rows of X correspond to %   observations and columns correspond to predictor variables. label is %   the predicted species. mdl = loadCompactModel('DiscrIris'); labelTemp = predict(mdl,X); label = IrisSpecies(labelTemp); end  

Abra el modelo de® de Simulink.sf_countflowers.slx

sfName = 'sf_countflowers'; open_system(sfName); 

Las figuras muestran el modelo de® de Simulink y el gráfico de flujo contenido en el gráfico de® de Stateflow. Cuando el nodo de entrada detecta datos de medición, dirige los datos al gráfico. El gráfico entonces predice una especie de flor de iris y cuenta el número de flores para cada especie. El gráfico devuelve la especie pronosticada al espacio de trabajo y muestra la especie dentro del modelo, una a la vez. El bloque de memoria del almacén de datos almacena el número de flores para cada especie.NumFlowers

El gráfico espera recibir datos de entrada como una matriz de estructura llamada que contiene estos campos:fisheririsInput

  • -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 a 74. La orientación de debe corresponder a las observaciones en los Datos predictores.time 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.signalsvaluesdimensions El campo es una matriz de Datos predictores.values El campo es el número de variables predictoras.dimensions

Cree una matriz de estructura adecuada para las mediciones de flores de iris.

fisheririsInput.time = [0:74]'; fisheririsInput.signals.dimensions = 4; fisheririsInput.signals.values = X; 

Puede cambiar el nombre de fisheririsInput y, a continuación, especifique el nuevo nombre en el modelo. Sin embargo, Stateflow® espera que la matriz de estructura contenga los nombres de campo descritos. Para obtener más información, consulte.Loading Data Structures to Root-Level Inputs (Simulink)

Simular el modelo.

sim(sfName) 

La figura muestra el modelo después de que procesa todas las observaciones en, uno a la vez.fisheririsInput La especie pronosticada de es virginica.X(75,:) El número de setosa, versicolor, y virginica en es 22, 22, y 31, respectivamente.X

La variable aparece en el espacio de trabajo. es un objeto que contiene la especie pronosticada.logsoutlogsoutSimulinkData.Dataset Extraiga los datos de las especies previstas del registro de simulación.

labelSF = logsout.getElement(1).Values.Data; 

Predecir especies en la línea de comandos utilizando.predict

labelCMD = predict(Mdl,X); 

Compare las especies previstas devueltas por las devueltas llamando a la línea de comandos.sf_countflowersPredecir

isequal(labelCMD,labelSF) 
 ans =    logical     1  

Devuelve Logical 1 () si todas las entradas son iguales.isequaltrue Esta comparación confirma que devuelve los resultados esperados.sf_countflowers

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

Consulte también

| | |

Temas relacionados