Ajustes


In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

In [6]:
medidas = np.random.normal(0, 1, size=100)

plt.figure()
plt.plot(medidas, '.')
plt.axhline(y=0, ls='--', c='k')
plt.show()



In [7]:
medidas = np.random.normal(0, 0.1, size=100)

plt.figure()
plt.plot(medidas, '.')
plt.axhline(y=0, ls='--', c='k')
plt.show()



In [10]:
x1 = np.random.normal(0, 1, size=1000)
x2 = np.random.normal(0, 0.1, size=1000)

plt.figure()
plt.subplot(221)
plt.plot(x1, '.')
plt.axhline(y=0, c='k')
plt.subplot(222)
plt.hist(x1)
plt.subplot(223)
plt.plot(x2, '.')
plt.axhline(y=0, c='k')
plt.subplot(224)
plt.hist(x2)
plt.tight_layout()
plt.show()



In [13]:
x1 = np.random.normal(0, 1, size=1000)
x2 = np.random.normal(10, 1, size=1000)

plt.figure()
plt.subplot(221)
plt.plot(x1, '.')
plt.axhline(y=0, c='k')
plt.subplot(222)
plt.hist(x1)
plt.subplot(223)
plt.plot(x2, '.')
plt.axhline(y=0, c='k')
plt.axhline(y=10, c='y')
plt.subplot(224)
plt.hist(x2)
plt.tight_layout()
plt.show()



In [25]:
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=float)
y = 10 * x
y = y + np.random.normal(0, 1, size=10)
y_original = 10 * x

plt.figure()
plt.scatter(x, y)
plt.plot(x, y_original, c='r')
plt.xlabel('Numero de baldozas medidas')
plt.ylabel('Medida [cm]')
plt.grid()
plt.show()



In [47]:
from scipy.stats import linregress

x = np.arange(1, 11, 1)
y = 10.0 * x
y += np.random.normal(0, 2, size=y.shape)

m, b, r, *otros = linregress(x, y)

print(m, b, r)

y_ajustado = m * x + b

plt.figure()
plt.scatter(x, y, label='datos originales')
plt.plot(x, y_ajustado, c='green',
         label='$y = {m:.2f}x {b:+.2f}$'.format(m=m, b=b))
plt.legend()
plt.grid()
plt.show()


10.0049158052 0.228831429109 0.998356512225

In [50]:
x = np.arange(1, 11, 1)
y = 10.0 * x
y += np.random.normal(0, 100, size=y.shape)

m, b, r, *otros = linregress(x, y)

print(m, b, r)

y_ajustado = m * x + b

plt.figure()
plt.scatter(x, y, label='datos originales')
plt.plot(x, y_ajustado, c='green',
         label='$y = {m:.2f}x {b:+.2f}$'.format(m=m, b=b))
plt.legend()
plt.grid()
plt.show()


19.162546717 -11.5211214678 0.522518441885

Linealizacion


In [54]:
x = np.linspace(0, 10, 20)
y = 3 * x ** 2
y += np.random.normal(0, 0.5, size=y.shape)

m, b, r, *otros = linregress(x, y)

y_ajustado = m * x + b

plt.figure()
plt.scatter(x, y)
plt.plot(x, y_ajustado, '--g')
plt.title('Datos de la forma $y=ax^2$')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.grid()
plt.show()


Si tengo datos de la forma $$ y = a x ^ 2 $$ y aplico la transformacion $$ X = x ^ 2 $$ entonces obtengo $$ y = a X $$


In [57]:
X = x ** 2

plt.figure()
plt.scatter(X, y)
plt.xlabel('$X$')
plt.ylabel('$y$')
plt.title('Datos linealizados, de la forma $y = m x + b$')
plt.show()



In [58]:
X = x ** 2

m, b, r, *otros = linregress(X, y)

y_ajustado = m * X + b
print(m, b, r)

plt.figure()
plt.scatter(X, y, c='r', label='datos')
plt.plot(X, y_ajustado, c='g', label='ajuste')
plt.xlabel('$X$')
plt.ylabel('$y$')
plt.title('Datos linealizados, de la forma $y = m x + b$')
plt.legend()
plt.grid()
plt.show()


2.99735804481 -0.0669613251481 0.999987445675

In [68]:
x = np.linspace(0, 10, 20)
y = 3 * x ** 2
y += np.random.normal(0, 0.5, size=y.shape)

m, b, r, *otros = linregress(x, y)

y_ajustado = m * x + b

fig = plt.figure()
plt.scatter(x, y)
plt.plot(x, y_ajustado, '--g')
plt.title('Datos de la forma $y=ax^2$')
plt.xlabel('$x$')
plt.ylabel('$y$')
plt.grid()

fig.add_axes([0.3, 0.6, 0.2, 0.2])

plt.scatter(x[x < 4], y[x < 4])
plt.plot(x[x < 4], y_ajustado[x < 4], '--g')
plt.grid()

plt.show()



In [81]:
x = np.linspace(0.1, 10)
y = 3.0 * x ** 1.32
# y += np.random.normal(0, 0.2, size=y.shape)

plt.figure()
plt.scatter(x, y)
plt.title('Datos de la forma $y = Ax^n$')
plt.grid()
plt.show()


Si tenemos datos de la forma $$ y = A x ^ n $$ y aplicamos logaritmos a amabos lados, $$ \log y = \log {\left(A x ^ n \right)} $$ y luego algunas propiedades de los logaritmos, $$ \log y = \log A + \log {\left(x ^ n \right)} $$ y $$ \log y = \log A + n \log x $$

Luego de esto aplico las transformaciones, $$ X = \log x $$ y $$ Y = \log y $$ entonces obtengo, $$ Y = \log A + n X $$


In [85]:
X = np.log2(x)
Y = np.log2(y)

m, b, r, *otros = linregress(X, Y)

print(m, b, r)
print(2 ** b)

plt.figure()
plt.scatter(X, Y)
plt.plot(X, m * X + b, c='orange')
plt.show()


1.32 1.58496250072 1.0
3.0

In [86]:
X = np.log10(x)
Y = np.log10(y)

m, b, r, *otros = linregress(X, Y)

print(m, b, r)
print(10 ** b)

plt.figure()
plt.scatter(X, Y)
plt.plot(X, m * X + b, c='orange')
plt.show()


1.32 0.47712125472 1.0
3.0

Funciones que no vamos a linealizar


In [92]:
x = np.linspace(0, 10, 200)
y = np.exp(-(x - 5)**2 / 0.3) + 2 * np.exp(-(x - 7)**2 / 0.3)

plt.figure()
plt.scatter(x, y)
plt.show()


Esto

es markdown $$ y = x ^ 2 $$


In [ ]: