Snippet: LinearLeastSquares pero python (Ya que estamos)

Y me dio ganas de hacerlo para python (y me queda hacerlo para bash)

Uso:

interpolador = LinearLeastSquares([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
interpolador.interpolate(1)

Codigo:

class LinearLeastSquares(object):
    
    def __init__(self, xs, ys):
        assert isinstance(xs, (list, tuple)) \
            and  isinstance(ys, (list, tuple)) \
            and len(xs) == len(ys)
        
        n = float(len(xs))
        sum_xy = 0.0
        sum_x = 0.0
        sum_y = 0.0
        sum_x_sq = 0.0
        for xi, yi in zip(xs, ys):
            sum_xy += xi * yi
            sum_x += xi
            sum_y += yi
            sum_x_sq += xi ** 2 
            
        self._m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_sq - sum_x ** 2)
        self._b = (sum_y - self._m * sum_x) / n
        
    def interpolate(self, x):
        return self._b + self._m * x;

Disclaimer: Solo lo probé con el conjunto de datos que hay en Wikipedia.

Anuncios

Acerca de JuanBC
About Me. * Ing. en Sistemas. * Entusiasta de los comics. * Linux user. * Java, Bash, Python, C. * RPG Fan. * Escritor.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: