Home | Develop | Download | Contact
Namespaces
Funciones Pds::Regression

Funciones para trabajar con nonlinear regression: Pds::Regression::FitModel(), etc. Más...

Namespaces

namespace  Pds
 Nombre de espacio para Pds (Procesamiento Digital de Senales)
 
namespace  Pds::Regression
 Nombre de espacio para Regression.
 

Regression no linear

Pds::Vector Pds::Regression::FitModel (const Pds::Matrix &X, const Pds::Vector &Y, double(*Func)(const Pds::Vector &, const Pds::Vector &), Pds::Vector(*DcFunc)(const Pds::Vector &, const Pds::Vector &), Pds::Vector c0, double Lambda=0.01, double MinError=1.0e-5, unsigned int MaxIter=2048)
 Esta función encaja un modelo multidimensional $y= Func(\mathbf{x};\mathbf{c})~:~\mathbb{R}^{N} \rightarrow \mathbb{R}$ com parametros $\mathbf{c}$ en un conjunto de muestras $\{\mathbf{x}_l,y_l\}$. Más...
 

Descripción detallada

Funciones para trabajar con nonlinear regression: Pds::Regression::FitModel(), etc.

#include <Pds/FuncMatrixRegressionMse>

Documentación de las funciones

◆ FitModel()

Pds::Vector Pds::Regression::FitModel ( const Pds::Matrix X,
const Pds::Vector Y,
double(*)(const Pds::Vector &, const Pds::Vector &)  Func,
Pds::Vector(*)(const Pds::Vector &, const Pds::Vector &)  DcFunc,
Pds::Vector  c0,
double  Lambda = 0.01,
double  MinError = 1.0e-5,
unsigned int  MaxIter = 2048 
)

Esta función encaja un modelo multidimensional $y= Func(\mathbf{x};\mathbf{c})~:~\mathbb{R}^{N} \rightarrow \mathbb{R}$ com parametros $\mathbf{c}$ en un conjunto de muestras $\{\mathbf{x}_l,y_l\}$.

La información que necesitamos son las muestras:

\[
     \mathbf{X}=
     \left(
     \begin{matrix}
     \mathbf{x}_0^T\\
     \mathbf{x}_1^T\\
     \vdots\\
     \mathbf{x}_l^T\\
     \vdots\\
     \mathbf{x}_{L-1}^T\\
     \end{matrix}
     \right)
     ,\qquad 
     \mathbf{y}=
     \left(
     \begin{matrix}
     y_0\\
     y_1\\
     \vdots\\
     y_l\\
     \vdots\\
     y_{L-1}\\
     \end{matrix}
     \right)
     \]

Esta función encuentra el vector $\mathbf{c}$ que minimiza la función $e(\mathbf{c})$:

\[
     e(\mathbf{c})=\| Func(\mathbf{X};\mathbf{c}) - \mathbf{y} \|^2+ \lambda\|\mathbf{c}-\mathbf{c}_{last}\|^2
     \]



El modelo necesita una descripción de la función $y = Func(\mathbf{x};\mathbf{c})$, su derivada $DcFunc(\mathbf{x};\mathbf{c}) \equiv \frac{\partial Func(\mathbf{x};\mathbf{c})}{\partial \mathbf{c}} $ y un valor incial $c_0$.

\[
     \begin{array}{lll}
     \mathbf{F}(\mathbf{c}) & \leftarrow & Func(\mathbf{X};\mathbf{c})\\
     \mathbf{J}(\mathbf{c}) & \leftarrow & DcFunc(\mathbf{X};\mathbf{c})\\
     \mathbf{c} & \leftarrow & \mathbf{c} -
     \left[ \mathbf{J}^T(\mathbf{c}) \mathbf{J}(\mathbf{c}) + \lambda \mathbb{I} \right]^{-1} 
     \mathbf{J}^T(\mathbf{c}) \left[\mathbf{F}(\mathbf{c})-\mathbf{y}\right]
     \end{array}
     \]

Comentarios
double Func(const Pds::Vector &x,const Pds::Vector &c)
{
if(c.IsEmpty()) return 0;
if(x.IsEmpty()) return 0;
double f;
// Combine x and c to generate f.
return f;
}
Pds::Vector DcFunc(const Pds::Vector &x,const Pds::Vector &c)
{
if(c.IsEmpty()) return Pds::Vector();
if(x.IsEmpty()) return Pds::Vector();
Pds::Vector Df(c.Nel());
// fill the Df vector
return Df;
}
Parámetros
[in]XMatriz con los vectores de datos $\mathbf{x}_l$ en las lineas. Donde $\mathbf{X} \in \mathbb{R}^{L\times N}$.
[in]YVector con los datos $y_l$ en las lineas. Donde $\mathbf{y} \in \mathbb{R}^{L\times 1}$.
[in]FuncModelo a encajar $Func(\mathbf{x};\mathbf{c})$. Donde $ Func:\{\mathbb{R}^N;\mathbb{R}^K\}\to \mathbb{R}  $.
[in]DcFuncFunción $DcFunc(\mathbf{x};\mathbf{c})$ que representa la derivada en relación a $\mathbf{c}$ del modelo a encajar. Donde $ DcFunc:\{\mathbb{R}^N;\mathbb{R}^K\}\to \mathbb{R}^{K}  $.
[in]c0Valor inicial del vector de parámetros $\mathbf{c}_0$. Donde $ \mathbf{c} \in \mathbb{R}^{K}  $.
[in]LambdaParámetro $\lambda$.
[in]MinErrorParámetro error mínimo.
[in]MaxIterParámetro máximo número de iteraciones.
Devuelve
La clase ala cual pertenece x.
Ejemplos
example_regression_fitting.cpp.

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed