La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.
Splines de suavizado
Sobre splines de suavizado
Si sus datos son ruidosos puede que le interese ajustarlos con un spline de suavizado. También puede utilizar uno de los métodos de suavizado descritos en Filtrar y suavizar datos.
El spline de suavizado s se construye para el parámetro de suavizado p especificado y las ponderaciones especificadas wi. El spline de suavizado minimiza
Si las ponderaciones no se especifican, se da por supuesto que son 1 para todos los puntos de datos.
p se define entre 0 y 1. p = 0 produce un ajuste de línea recta de mínimos cuadrados a los datos, mientras que p = 1 produce una interpolación por splines cúbicos. Si no especifica el parámetro de suavizado, se selecciona de forma automática en el "rango interesante". El rango interesante de p suele estar cerca de 1/(1+h3/6) donde h es el espaciado promedio de los puntos de datos, y suele ser mucho menor que el rango permitido del parámetro. Dado que los splines de suavizado tienen un parámetro de suavizado asociado, podría considerar que estos ajustes son paramétricos. Sin embargo, los splines de suavizado también son polinomios por tramos como los splines cúbicos o las interpolaciones que conservan la forma, y en esta guía se consideran un tipo de ajuste no paramétrico.
Nota
El algoritmo de spline de suavizado está basado en la función csaps
.
Los datos de reacción nuclear del archivo carbon12alpha.mat se muestran aquí con tres ajustes de splines de suavizado. El parámetro de suavizado predeterminado (p = 0,99) produce la curva más suave. La curva del spline cúbico (p = 1) pasa por todos los puntos de datos, pero no es tan suave. La tercera curva (p = 0,95) pasa lejos de los datos por un amplio margen y muestra lo pequeño que puede ser el "rango interesante" de p.
Seleccionar un ajuste de spline de suavizado de forma interactiva
En la app Curve Fitting, seleccione Smoothing Spline
de la lista de tipos de modelo.
Puede especificar las siguientes opciones:
Para realizar un ajuste que se aleje más de los datos, haga clic en el botón < Smoother repetidamente hasta que la gráfica le muestre la suavidad deseada.
Para realizar un ajuste que se aproxime más a los datos, haga clic en el botón Rougher > hasta que esté satisfecho con la gráfica.
También puede especificar cualquier valor entre 0 y 1 para el parámetro de suavizado. 0 produce un ajuste polinomial lineal (un ajuste de línea recta de mínimos cuadrados para los datos), mientras que 1 produce un ajuste polinomial cúbico por tramos que pasa por todos los puntos de datos (una interpolación por splines cúbicos).
Haga clic en Default para volver al valor inicial. La toolbox intenta seleccionar un valor predeterminado apropiado para sus datos. Consulte Sobre splines de suavizado.
Por ejemplo:
Cargue los datos en Sobre splines de suavizado escribiendo:
load carbon12alpha
En la app Curve Fitting, seleccione
angle
para X data ycounts
para Y data.Seleccione el tipo de ajuste
Smoothing Spline
.Pruebe los valores de parámetro de suavizado
1
,0.95
y el valor predeterminado (0.99).
Ajustar modelos de spline de suavizado con la función fit
Este ejemplo muestra cómo utilizar la función fit
para ajustar un modelo de spline de suavizado a los datos.
Ajustar un modelo de spline de suavizado
Cargue datos y ajuste un modelo de spline de suavizado especificando 'smoothingspline'
al llamar a la función fit.
load enso f = fit(month,pressure,'smoothingspline'); plot(f,month,pressure)
Ver el parámetro de suavizado calculado
Cree el modelo de nuevo y utilice el tercer argumento de salida para ver el parámetro de suavizado calculado. El parámetro de suavizado es el valor p
de la estructura out
. El valor predeterminado depende del conjunto de datos.
[f,gof,out] = fit(month,pressure,'smoothingspline');
out.p
ans = 0.9000
Especificar un parámetro de suavizado con 'SmoothingParam'
Especifique el parámetro de suavizado para un nuevo ajuste con la opción 'SmoothingParam'
. Su valor debe estar entre 0 y 1.
f = fit(month,pressure,'smoothingspline','SmoothingParam',0.07); plot(f,month,pressure)
Especificar un parámetro de suavizado con fitoptions
También puede utilizar fitoptions
para especificar un parámetro de suavizado antes del ajuste.
options = fitoptions('Method','Smooth','SmoothingParam',0.07); [f,gof,out] = fit(month,pressure,'smooth',options); out.p
ans = 0.0700
Como alternativa a 'smoothingspline'
, puede utilizar la función de spline de suavizado cúbico csaps o las funciones de spline que permiten un mayor control sobre lo que puede crear. Consulte .
Ejemplo: Ajuste no paramétrico con splines cúbicos y de suavizado
Este ejemplo ajusta algunos datos con una interpolación por splines cúbicos y varios splines de suavizado.
Cree las variables en su espacio de trabajo:
x = (4*pi)*[0 1 rand(1,25)]; y = sin(x) + .2*(rand(size(x))-.5);
Abra la app Curve Fitting escribiendo:
cftool
Seleccione
x
ey
de las listas X data e Y data.La app Curve Fitting ajusta y representa los datos.
Ajuste los datos con una interpolación por splines cúbicos seleccionando el tipo de ajuste Interpolant y el Method
Cubic
.La app Curve Fitting ajusta y representa la interpolación por splines cúbicos.
Seleccione el Fit name
cubicsp
.Consulte el panel Results. Las estadísticas de bondad de ajuste como RMSE no se definen para las interpolaciones (se muestran como
NaN
).Una interpolación de spline cúbico se define como un polinomio por tramos que resulta en una estructura de coeficientes (
p
). El número de "piezas" de la estructura es una menos que el número de puntos de datos ajustados, y el número de coeficientes para cada pieza es cuatro porque el grado del polinomio es tres. Puede analizar la estructura del coeficientep
si exporta su ajuste al espacio de trabajo (por ejemplo, indique
). Para obtener información sobre la estructura de coeficientes, consulte Constructing and Working with ppform Splines.fitname
.pCree otro ajuste para comparar. Haga clic en su ajuste con el botón secundario en la Table of Fits y seleccione Duplicate ‘cubicsp’.
Ajuste los datos con un spline de suavizado seleccionando Smoothing Spline.
El nivel de suavidad viene dado por el Parámetro de suavizado. El valor del parámetro de suavizado depende del conjunto de datos y la toolbox lo calcula de forma automática.
Para este conjunto de datos, el parámetro de suavizado predeterminado está cerca de 1, lo que indica que el spline de suavizado es casi cúbico y está muy cerca de pasar por cada punto de datos.
Nombre el ajuste de parámetro de suavizado predeterminado
Smooth1
. Si no le gusta el nivel de suavizado producido por el parámetro de suavizado predeterminado, puede especificar cualquier valor entre 0 y 1. 0 produce un ajuste polinomial lineal, mientras que 1 produce un ajuste polinomial cúbico por tramos que pasa por todos los puntos de datos.Aquí se muestran los resultados numéricos del ajuste de spline de suavizado.
Con el objetivo de realizar una comparación, cree otro ajuste de spline de suavizado. Haga clic en su ajuste con el botón secundario en la Table of Fits y seleccione Duplicate ‘smooth1’. Cambie el parámetro de suavizado a
0.5
y nombre el ajusteSmooth2
.Compare las gráficas de sus tres ajustes. Explore el comportamiento del ajuste más allá de los límites de datos aumentando la escala de abscisas predeterminada. Puede cambiar los límites del eje con el elemento del menú Tools > Axes Limit Control.
Nota
Sus resultados dependen de puntos de partida aleatorios y podrían variar con respecto a los que se describen.
Tenga en cuenta que el parámetro de suavizado predeterminado produce una curva que es más suave que la interpolación, pero es un buen ajuste para los datos. En este caso, reducir el parámetro de suavizado del valor predeterminado produce una curva que es aún más suave, pero no es un buen ajuste para los datos. A medida que el parámetro de suavizado aumenta más allá de los valores predeterminados, la curva asociada se acerca a la interpolación por splines cúbicos. El spline cúbico y el spline de suavizado predeterminado son similares para puntos interiores, pero divergen en los extremos de línea.