Snippet: LinearLeastSquares pero python (Ya que estamos)
2011/01/05 Deja un comentario
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.

