Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

predict

Predecir respuestas de un modelo de regresión lineal

Descripción

ejemplo

ypred = predict(mdl,Xnew) devuelve los valores de respuesta pronosticados del modelo de regresión lineal mdl a los puntos de Xnew.

[ypred,yci] = predict(mdl,Xnew) también devuelve intervalos de confianza para las respuestas en Xnew.

ejemplo

[ypred,yci] = predict(mdl,Xnew,Name,Value) especifica más opciones con uno o varios argumentos de par nombre-valor. Por ejemplo, puede especificar el nivel de confianza del intervalo de confianza y el tipo de predicción.

Ejemplos

contraer todo

Cree un modelo cuadrático del consumo de un vehículo como una función de ponderación a partir del conjunto de datos carsmall.

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

Cree respuestas pronosticadas a los datos.

ypred = predict(mdl,X);

Represente las respuestas originales y las respuestas pronosticadas para ver en qué difieren.

plot(X,y,'o',X,ypred,'x')
legend('Data','Predictions')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Predictions.

Ajuste un modelo de regresión lineal y guárdelo usando saveLearnerForCoder. Defina una función de punto de entrada que cargue el modelo utilizando loadLearnerForCoder y llame a la función predict del modelo ajustado. A continuación, use codegen (MATLAB Coder) para generar código C/C++. Tenga en cuenta que generar código C/C++ requiere MATLAB® Coder™.

En este ejemplo se explica brevemente el flujo de trabajo de generación de código para la predicción de modelos de regresión lineal en la línea de comandos. Para obtener más información, consulte Code Generation for Prediction of Machine Learning Model at Command Line. También puede generar código usando la app MATLAB Coder. Para obtener más detalles, consulte Code Generation for Prediction of Machine Learning Model Using MATLAB Coder App.

Entrenar un modelo

Cargue el conjunto de datos carsmall y ajuste el modelo de regresión cuadrático.

load carsmall
X = Weight;
y = MPG;
mdl = fitlm(X,y,'quadratic');

Guardar un modelo

Guarde el modelo cuadrático ajustado en el archivo QLMMdl.mat con saveLearnerForCoder.

saveLearnerForCoder(mdl,'QLMMdl');

Definir una función de punto de entrada

Defina una función de punto de entrada llamada mypredictQLM que realice las acciones siguientes:

  • Aceptar medidas correspondientes a X y argumentos de par nombre-valor opcionales válidos.

  • Cargar el modelo cuadrático ajustado en QLMMdl.mat.

  • Devolver predicciones y límites de intervalos de confianza.

function [yhat,ci] = mypredictQLM(x,varargin) %#codegen
%MYPREDICTQLM Predict response using linear model
%   MYPREDICTQLM predicts responses for the n observations in the n-by-1
%   vector x using the linear model stored in the MAT-file QLMMdl.mat, and
%   then returns the predictions in the n-by-1 vector yhat. MYPREDICTQLM
%   also returns confidence interval bounds for the predictions in the
%   n-by-2 vector ci.
CompactMdl = loadLearnerForCoder('QLMMdl');
[yhat,ci] = predict(CompactMdl,x,varargin{:});
end

Añada la directiva del compilador (o pragma) %#codegen a la función de punto de entrada después de la firma de la función para indicar que intenta generar código para el algoritmo de MATLAB. Añadir esta directiva indica al analizador de código de MATLAB que le ayude a diagnosticar y arreglar vulneraciones que darían como resultado errores durante la generación de código.

Nota: Si hace clic en el botón ubicado en la zona superior derecha de este ejemplo y abre el ejemplo en MATLAB®, MATLAB abrirá la carpeta de ejemplo. Esta carpeta incluye el archivo de función de punto de entrada.

Generar código

Genere código para la función de punto de entrada con codegen (MATLAB Coder). Dado que C y C++ son lenguajes de tipado estático, debe determinar las propiedades de todas las variables de la función de entrada en tiempo de compilación. Para especificar los tipos de datos y el tamaño de arreglo de entrada exacto, pase una expresión de MATLAB® que represente el conjunto de valores con un tipo de datos y un tamaño de arreglo determinado. Use coder.Constant (MATLAB Coder) para los nombres de los argumentos de par nombre-valor.

Si el número de observaciones no se conoce en el momento de la compilación, también puede especificar la entrada como tamaño variable utilizando coder.typeof (MATLAB Coder). Para obtener más detalles, consulte Specify Variable-Size Arguments for Code Generation y Specify Properties of Entry-Point Function Inputs (MATLAB Coder).

codegen mypredictQLM -args {X,coder.Constant('Alpha'),0.1,coder.Constant('Simultaneous'),true}
Code generation successful.

codegen genera la función MEX de mypredictQLM_mex con una extensión dependiente de la plataforma.

Verificar código generado

Compare predicciones e intervalos de confianza con predict y mypredictQLM_mex. Especifique argumentos de par nombre-valor en el mismo orden que en el argumento -args en la llamada a codegen.

Xnew = sort(X);
[yhat1,ci1] = predict(mdl,Xnew,'Alpha',0.1,'Simultaneous',true);
[yhat2,ci2] = mypredictQLM_mex(Xnew,'Alpha',0.1,'Simultaneous',true);

Los valores devueltos de mypredictQLM_mex pueden incluir diferencias de redondeo en comparación con los valores de predict. En este caso, compare los valores permitiendo una pequeña tolerancia.

find(abs(yhat1-yhat2) > 1e-6)
ans =

  0x1 empty double column vector
find(abs(ci1-ci2) > 1e-6)
ans =

  0x1 empty double column vector

La comparación confirma que los valores devueltos son iguales dentro de la tolerancia 1e–6.

Represente los valores devueltos para su comparación.

h1 = plot(X,y,'k.');
hold on
h2 = plot(Xnew,yhat1,'ro',Xnew,yhat2,'gx');
h3 = plot(Xnew,ci1,'r-','LineWidth',4);
h4 = plot(Xnew,ci2,'g--','LineWidth',2);
legend([h1; h2; h3(1); h4(1)], ...
    {'Data','predict estimates','MEX estimates','predict CIs','MEX CIs'});
xlabel('Weight');
ylabel('MPG');

Figure contains an axes object. The axes object with xlabel Weight, ylabel MPG contains 7 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, predict estimates, MEX estimates, predict CIs, MEX CIs.

Argumentos de entrada

contraer todo

Objeto de modelo de regresión lineal, especificado como un objeto LinearModel creado utilizando fitlm o stepwiselm, o un objeto CompactLinearModel creado utilizando compact.

Nuevos valores predictores de entrada, especificados como una tabla, un arreglo de conjunto de datos o una matriz. Cada fila de Xnew corresponde a una observación y cada columna, a una variable.

  • Si Xnew es una tabla o un arreglo de conjuntos de datos, debe contener predictores que tengan los mismos nombres de predictor que en la propiedad PredictorNames de mdl.

  • Si Xnew es una matriz, debe tener el mismo número de variables (columnas) y en el mismo orden que la entrada de predictores utilizada para crear mdl. Tenga en cuenta que Xnew también debe contener las variables predictoras que no se utilicen como predictores en el modelo ajustado. Además, todas las variables empleadas en la creación de mdl deben ser numéricas. Para tratar predictores numéricos como variables categóricas, identifique los predictores mediante el argumento de par nombre-valor 'CategoricalVars' al crear mdl.

Tipos de datos: single | double | table

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name entre comillas.

Ejemplo: [ypred,yci] = predict(Mdl,Xnew,'Alpha',0.01,'Simultaneous',true) devuelve el intervalo de confianza yci con un nivel de confianza del 99%, calculado de manera simultánea para todos los valores de predicción.

Nivel de significación para el intervalo de confianza, especificado como el par separado por comas que consta de 'Alpha' y un valor numérico en el rango [0,1]. El nivel de confianza de yci es igual a 100(1 – Alpha)%. Alpha es la probabilidad de que el intervalo de confianza no contenga el valor real.

Ejemplo: 'Alpha',0.01

Tipos de datos: single | double

Tipo de predicción, especificado como el par separado por comas que consta de 'Prediction' y 'curve' u 'observation'.

Un modelo de regresión para las variables predictoras X y la variable de respuesta y tiene la forma

y = f(X) + ε,

donde f es una función de regresión ajustada y ε es un término de ruido aleatorio.

  • Si 'Prediction' es 'curve', predict predice límites de confianza para f(Xnew), las respuestas ajustadas en Xnew.

  • Si 'Prediction' es 'observation', predict predice límites de confianza para y, las observaciones de respuesta en Xnew.

Los límites para y son más amplios que los límites para f(X) debido a la variabilidad adicional del término de ruido.

Ejemplo: 'Prediction','observation'

Indicador para calcular límites de confianza simultáneos, especificado como el par separado por comas que consta de 'Simultaneous' y true o false.

  • true: predict calcula los límites de confianza para la curva de valores de respuesta correspondientes a todos los valores de predicción de Xnew utilizando el método de Scheffé. El rango entre el límite superior e inferior contiene la curva que consta de valores de respuesta reales con una confianza del 100(1 – α)%.

  • false: predict calcula los límites de confianza para el valor de respuesta en cada observación de Xnew. El intervalo de confianza para un valor de respuesta en un valor de predicción específico contiene el valor de respuesta real con una confianza del 100(1 – α)%.

Los límites simultáneos son más amplios que los límites separados porque requerir que la curva completa de valores de respuesta quede dentro de los límites es más estricto que requerir que el valor de respuesta de un único valor de predicción quede dentro de los límites.

Ejemplo: 'Simultaneous',true

Argumentos de salida

contraer todo

Valores de respuesta pronosticados evaluados en Xnew, devueltos como un vector numérico.

Intervalos de confianza para las respuestas, devueltos como una matriz de dos columnas donde cada fila proporciona un intervalo. El significado del intervalo de confianza depende de la configuración de los argumentos de par nombre-valor 'Alpha', 'Prediction' y 'Simultaneous'.

Funcionalidad alternativa

  • feval devuelve las mismas predicciones que predict. La función feval acepta múltiples argumentos de entrada, con una entrada para cada variable predictora, que es más sencillo de utilizar con un modelo creado a partir de una tabla o un arreglo de conjunto de datos. Tenga en cuenta que la función feval no proporciona intervalos de confianza en sus predicciones.

  • random devuelve predicciones con ruido añadido.

  • Utilice plotSlice para crear una figura que contenga una serie de gráficas, cada una de las cuales representa una porción de la superficie de regresión pronosticada. Cada gráfica muestra los valores de respuesta ajustados como una función de una única variable predictora, mientras las otras variables predictoras se mantienen constantes.

Capacidades ampliadas

Historial de versiones

Introducido en R2012a