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.

kfoldLoss

Pérdida de regresión para observaciones no utilizadas en la formación

Descripción

Descripción

ejemplo

L = kfoldLoss(CVMdl) Devuelve el error cuadrado medio validado (MSE) obtenido por el modelo de regresión lineal validado en cruz.CVMdl Es decir, para cada pliegue, se estima la pérdida de regresión para las observaciones que se mantiene cuando se entrena utilizando todas las demás observaciones.kfoldLoss

contiene una pérdida de regresión para cada fuerza de regularización en los modelos de regresión lineal que componen.LCVMdl

ejemplo

L = kfoldLoss(CVMdl,Name,Value) utiliza opciones adicionales especificadas por uno o más argumentos de par.Name,Value Por ejemplo, indique qué pliegues utilizar para el cálculo de pérdidas o especifique la función de pérdida de regresión.

Argumentos de entrada

expandir todo

Modelo de regresión lineal validado mediante validación cruzada, especificado como objeto de modelo.RegressionPartitionedLinear Puede crear un modelo utilizando y especificando cualquiera de los argumentos de la validación cruzada, el par nombre-valor, por ejemplo,.RegressionPartitionedLinearfitrlinearCrossVal

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

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Pliegue los índices que se utilizarán para la predicción de respuesta, especificado como el par separado por comas que consta de un vector numérico de enteros positivos.'Folds' Los elementos de debe variar de a través.Folds1CVMdl.KFold

Ejemplo: 'Folds',[1 4 10]

Tipos de datos: single | double

Función de pérdida, especificada como el par separado por comas que consta de y un identificador de función o nombre de función de pérdida integrado.'LossFun'

  • La tabla siguiente enumera las funciones de pérdida disponibles. Especifique uno utilizando su vector de caracteres correspondiente o escalar de cadena. Además, en la tabla, f(x)=xβ+b.

    • es un vector de coeficientes.βp

    • es una observación de variables predictoras.xp

    • es el sesgo escalar.b

    ValorDescripción
    'epsiloninsensitive'Pérdida insensible a épsilon: [y,f(x)]=max[0,|yf(x)|ε]
    'mse'Mse: [y,f(x)]=[yf(x)]2

    es adecuado solo para los alumnos de SVM.'epsiloninsensitive'

  • Especifique su propia función utilizando la notación de identificador de función.

    Vamos a ser el número de observaciones en.nX La función debe tener esta firma

    lossvalue = lossfun(Y,Yhat,W)
    Dónde:

    • El argumento de salida es un escalar.lossvalue

    • Elija el nombre de la función (lossfun).

    • es un vector dimensional de las respuestas observadas.Yn kfoldLoss pasa el argumento de entrada para.YY

    • es un vector dimensional de las respuestas pronosticadas, que es similar a la salida de.YhatnPredecir

    • es un vector numérico de pesos de observación de-por-1.Wn

    Especifique la función mediante 'LossFun',@lossfun.

Tipos de datos: char | string | function_handle

Nivel de agregación de pérdidas, especificado como el par separado por comas que consta de y o.'Mode''average''individual'

ValorDescripción
'average'Devuelve las pérdidas promediadas sobre todos los pliegues
'individual'Devuelve pérdidas por cada pliegue

Ejemplo: 'Mode','individual'

Argumentos de salida

expandir todo

Pérdidas de regresión validadas en Cruz, devueltas como un escalar numérico, Vector o matriz. La interpretación de depende de.LLossFun

Dejar R ser el número de fortalezas de regularizaciones son los modelos con validación cruzada (almacenados en) ynumel(CVMdl.Trained{1}.Lambda) F ser el número de pliegues (almacenados en).CVMdl.KFold

  • Si es así, entonces es un 1-por-Mode'average'LR Vector. L(j) es la pérdida de regresión media sobre todos los pliegues del modelo validado por Cruz que utiliza la fuerza de regularización j.

  • De lo contrario, es unL FporR Matriz. L(i,j) es la pérdida de regresión para el pliegue i del modelo de validación cruzada que utiliza la fuerza de regularización j.

Para estimar, utiliza los datos que se crearon (ver y).LkfoldLossCVMdlXY

Ejemplos

expandir todo

Simular 10000 observaciones de este modelo

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
<mn>0</mn>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
<mn>0</mn>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mi>e</mi>
<mo>.</mo>
</mrow>
</math>

  • <math display="block">
    <mrow>
    <mi>X</mi>
    <mo>=</mo>
    <mo stretchy="false">{</mo>
    <msub>
    <mrow>
    <mi>x</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    <mo>,</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>,</mo>
    <msub>
    <mrow>
    <mi>x</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    <mn>0</mn>
    <mn>0</mn>
    <mn>0</mn>
    </mrow>
    </msub>
    <mo stretchy="false">}</mo>
    </mrow>
    </math>
    es una matriz dispersa 10000-by-1000 con un 10% de cero elementos normales estándar.

  • es un error normal aleatorio con la media 0 y la desviación estándar 0,3.e

rng(1) % For reproducibility n = 1e4; d = 1e3; nz = 0.1; X = sprandn(n,d,nz); Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Validar de forma cruzada un modelo de regresión lineal mediante los alumnos de SVM.

rng(1); % For reproducibility  CVMdl = fitrlinear(X,Y,'CrossVal','on');

es un modelo.CVMdlRegressionPartitionedLinear 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'

Estimar el promedio de las MSEs de prueba-muestra.

mse = kfoldLoss(CVMdl)
mse = 0.1735 

Como alternativa, puede obtener los MSEs por pliegue especificando el par nombre-valor en.'Mode','individual'kfoldLoss

Simular datos como en.Estimación-pliegue de error cuadrado mediok

rng(1) % For reproducibility n = 1e4; d = 1e3; nz = 0.1; X = sprandn(n,d,nz);  Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1); X = X'; % Put observations in columns for faster training 

Valide de forma cruzada un modelo de regresión lineal mediante la validación cruzada de 10 veces. Optimice la función objetivo utilizando SpaRSA.

CVMdl = fitrlinear(X,Y,'CrossVal','on','ObservationsIn','columns',...     'Solver','sparsa');

es un modelo.CVMdlRegressionPartitionedLinear Contiene la propiedad, que es una matriz de celdas de 10 por 1 que sostiene modelos que el software entrenado utilizando el conjunto de entrenamiento.TrainedRegressionLinear

Crear una función anónima que mide la pérdida de Huber (

<math display="block">
<mrow>
<mi>δ</mi>
</mrow>
</math>
= 1), es decir,

<math display="block">
<mrow>
<mrow>
<mi>L</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mrow>
<mo></mo>
<mrow>
<mrow>
<msub>
<mrow>
<mi>w</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</mrow>
</mrow>
</mrow>
</mfrac>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>n</mi>
</mrow>
</munderover>
<mrow>
<mrow>
<msub>
<mrow>
<mi>w</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow>
<msub>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</mrow>
<mo>,</mo>
</mrow>
</mrow>
</math>

Dónde

<math display="block">
<mrow>
<mtable columnalign="left">
<mtr>
<mtd>
<mrow></mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mrow>
<msub>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mo>=</mo>
<mrow>
<mo>{</mo>
<mrow>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mrow>
<msup>
<mrow>
<munderover accent="true">
<mrow>
<msub>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow></mrow>
<mrow>
<mo>ˆ</mo>
</mrow>
</munderover>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
<mo>;</mo>
</mrow>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mrow>
<mo>|</mo>
<mrow>
<munderover accent="true">
<mrow>
<msub>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow></mrow>
<mrow>
<mo>ˆ</mo>
</mrow>
</munderover>
</mrow>
<mo>|</mo>
</mrow>
<mo>-</mo>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mo>;</mo>
<mspace width="0.2777777777777778em"></mspace>
<mspace width="0.2777777777777778em"></mspace>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
<mtable columnalign="center center center center center center center center center center center center center center center center center center center center">
<mtr>
<mtd>
<mrow>
<mrow>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mrow></mrow>
</mrow>
</mstyle>
</mrow>
<mspace width="0.2777777777777778em"></mspace>
<mspace width="0.2777777777777778em"></mspace>
<mrow>
<mrow>
<mo>|</mo>
<mrow>
<munderover accent="true">
<mrow>
<msub>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow></mrow>
<mrow>
<mo>ˆ</mo>
</mrow>
</munderover>
</mrow>
<mo>|</mo>
</mrow>
</mrow>
<mo></mo>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mrow>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mrow></mrow>
</mrow>
</mstyle>
</mrow>
<mspace width="0.2777777777777778em"></mspace>
<mspace width="0.2777777777777778em"></mspace>
<mrow>
<mrow>
<mo>|</mo>
<mrow>
<munderover accent="true">
<mrow>
<msub>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow></mrow>
<mrow>
<mo>ˆ</mo>
</mrow>
</munderover>
</mrow>
<mo>|</mo>
</mrow>
</mrow>
<mo>></mo>
<mn>1</mn>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</mrow>
<mo>.</mo>
</mrow>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

<math display="inline">
<mrow>
<munderover accent="true">
<mrow>
<msub>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
<mrow></mrow>
<mrow>
<mo>ˆ</mo>
</mrow>
</munderover>
</mrow>
</math>
es el residuo para la observación.j Las funciones de pérdida personalizadas deben escribirse en un formulario determinado. Para obtener reglas sobre cómo escribir una función de pérdida personalizada, vea el argumento de par nombre-valor.'LossFun'

huberloss = @(Y,Yhat,W)sum(W.*((0.5*(abs(Y-Yhat)<=1).*(Y-Yhat).^2) + ...     ((abs(Y-Yhat)>1).*abs(Y-Yhat)-0.5)))/sum(W);

Estimar la pérdida media de Huber sobre los pliegues. También, obtener la pérdida de Huber para cada pliegue.

mseAve = kfoldLoss(CVMdl,'LossFun',huberloss)
mseAve = -0.4447 
mseFold = kfoldLoss(CVMdl,'LossFun',huberloss,'Mode','individual')
mseFold = 10×1

   -0.4454
   -0.4473
   -0.4452
   -0.4469
   -0.4434
   -0.4427
   -0.4471
   -0.4430
   -0.4438
   -0.4426

Para determinar una buena fuerza de penalización de lazo para un modelo de regresión lineal que utiliza mínimos cuadrados, implemente la validación cruzada de 5 veces.

Simular 10000 observaciones de este modelo

<math display="block">
<mrow>
<mi>y</mi>
<mo>=</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
<mn>0</mn>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
<mn>0</mn>
<mn>0</mn>
</mrow>
</msub>
<mo>+</mo>
<mi>e</mi>
<mo>.</mo>
</mrow>
</math>

  • <math display="block">
    <mrow>
    <mi>X</mi>
    <mo>=</mo>
    <mo stretchy="false">{</mo>
    <msub>
    <mrow>
    <mi>x</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    </mrow>
    </msub>
    <mo>,</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>.</mo>
    <mo>,</mo>
    <msub>
    <mrow>
    <mi>x</mi>
    </mrow>
    <mrow>
    <mn>1</mn>
    <mn>0</mn>
    <mn>0</mn>
    <mn>0</mn>
    </mrow>
    </msub>
    <mo stretchy="false">}</mo>
    </mrow>
    </math>
    es una matriz dispersa 10000-by-1000 con un 10% de cero elementos normales estándar.

  • es un error normal aleatorio con la media 0 y la desviación estándar 0,3.e

rng(1) % For reproducibility n = 1e4; d = 1e3; nz = 0.1; X = sprandn(n,d,nz); Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Cree un conjunto de 15 puntos fuertes de regularización logarmicamente espaciados de

<math display="block">
<mrow>
<mn>1</mn>
<msup>
<mrow>
<mn>0</mn>
</mrow>
<mrow>
<mo>-</mo>
<mn>5</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>1</mn>
</mrow>
</msup>
</mrow>
</math>
.

Lambda = logspace(-5,-1,15);

Valide los modelos en cruz. Para aumentar la velocidad de ejecución, transponer los Datos predictores y especificar que las observaciones se encuentran en columnas. Optimice la función objetivo utilizando SpaRSA.

X = X';  CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','KFold',5,'Lambda',Lambda,...     'Learner','leastsquares','Solver','sparsa','Regularization','lasso');  numCLModels = numel(CVMdl.Trained)
numCLModels = 5 

es un modelo.CVMdlRegressionPartitionedLinear Porque implementa la validación cruzada 5 veces, contiene 5 modelos que el software entrena en cada pliegue.fitrlinearCVMdlRegressionLinear

Visualice el primer modelo de regresión lineal entrenado.

Mdl1 = CVMdl.Trained{1}
Mdl1 =    RegressionLinear          ResponseName: 'Y'     ResponseTransform: 'none'                  Beta: [1000x15 double]                  Bias: [1x15 double]                Lambda: [1x15 double]               Learner: 'leastsquares'     Properties, Methods  

es un objeto de modelo. construido por el entrenamiento en los primeros cuatro pliegues.Mdl1RegressionLinearfitrlinearMdl1 Porque es una secuencia de fortalezas de regularización, se puede pensar en como 15 modelos, uno para cada fuerza de regularización en.LambdaMdl1Lambda

Estime el MSE validado en cruz.

mse = kfoldLoss(CVMdl);

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

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...     'Learner','leastsquares','Solver','sparsa','Regularization','lasso'); numNZCoeff = sum(Mdl.Beta~=0);

En la misma figura, trace el MSE validado en cruz y la frecuencia de los 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(mse),...     log10(Lambda),log10(numNZCoeff));  hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} MSE') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') hold off

Elija el índice de la fuerza de regularización que equilibra la dispersión variable predictora y el MSE bajo (por ejemplo,).Lambda(10)

idxFinal = 10;

Extraiga el modelo con correspondiente al MSE mínimo.

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal =    RegressionLinear          ResponseName: 'Y'     ResponseTransform: 'none'                  Beta: [1000x1 double]                  Bias: -0.0050                Lambda: 0.0037               Learner: 'leastsquares'     Properties, Methods  
idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff = 2×1

   100
   200

EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff = 2×1

    1.0051
    1.9965

es un modelo con una fuerza de regularización.MdlFinalRegressionLinear Los coeficientes distintos de cero están cerca de los coeficientes que simulan los datos.EstCoeff

Introducido en R2016a