probabilidad - Curva de tendencia promedio para puntos de datos en Python
probabilidad y estadistica en python (3)
Puede probar fit.py , un paquete de ajuste de curva para Python.
Me encantaría reproducir una trama similar a esta:
Quiero decir que tengo un conjunto de puntos de datos y me encantaría tener una curva que muestre la tendencia promedio.
Intenté agregar ruido aleatorio a la función y = 2x
from scipy import interpolate
x=arange(0,1,1e-3)
noise=np.random.random(len(x))
y=2*x+noise
Y luego usé parte de la función Scipt para interpolar datos
xnew=arange(0,1,1e-1)
f=interpolate.UnivariateSpline(x,y)
g=interpolate.interp1d(x,y)
plot(x,y,''ro'',xnew,f(xnew),''-'',xnew,g(xnew),''--'')
show()
Pero la curva que obtengo casi se asemeja a y = 2 * x. Me encantaría tener una curva suave que promediara los datos. ¿Qué método / función puedo usar?
Una de las razones por las que la curva no se ve como y=2*x
(creo que sí, pero eso está sujeto a la opinión) es que su ruido es grande en comparación con el cambio promedio en y. Si intenta algo como:
noise=0.1*np.random.random(len(x))
(es decir, hacer el ruido más pequeño) o
y=5*x**2+noise
(es decir, realice el cambio en y
más grande), verá que la interpolación rastrea mejor los datos.
Es posible que también desee verificar:
Univariante se ve exactamente como 2x + 0.5 (que es el promedio de tu ruido).
Es de esperar que interp1d varíe mucho con esa cantidad de ruido.
Dependiendo de sus propósitos, es posible que desee escribir sus propios promedios móviles en lugar de utilizar métodos de interpolación de valores; que esencialmente utiliza el promedio de los últimos n puntos de datos en lugar de un punto de datos.
Dicho esto, el método de interpolación de stock para usar también depende de su propósito. Pruebe algunos y elija lo que sirve para su propósito.