# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# * Por cada variable que se agrega en el conjunto de datos vamos a necesitar exponencialmente más muestras para poder tener la misma relevancia estadística. En este sentido, se busca reducir las dimensionalidades haciendo que se capture la mayor cantidad de información.
#
# * Para buscar la dimensión que contenga la mayor cantidad de información se siguen los siguientes pasos:
#
#     * Centrar la información.
#     xy_centrado = xy - np.mean(xy, axis = 0)
#
#     * Hallar los autovalores y autovectores de la información centralizada. autovalores, autovectores = np.linalg.eig(xy_centrado.T.dot(xy_centrado))
#
#     * Encontrar el autovalor de mayor valor. Este autovalor está asociado al autovector que contiene más información y es sobre esta dirección reescribiran los datos.

# +
# %matplotlib inline 

import numpy as np 
import matplotlib.pyplot as plt

# +
np.random.seed(42)

x = 3*np.random.rand(200)
y = 20*x + 2*np.random.randn(200)

x = x.reshape(200, 1)
y = y.reshape(200, 1)

print(x)
print(y)
# -

xy = np.hstack([x, y])
print(xy.shape)

plt.plot(xy[:,0], xy[:,1], '.')
plt.show()

plt.plot(xy_centrado[:,0], xy_centrado[:,1], '.')
plt.show()

autovalores, autovectores = np.linalg.eig(xy_centrado.T.dot(xy_centrado))
print(autovectores)

# %run ".\\Funciones auxiliares\graficarVectores.ipynb"

# +
graficarVectores(autovectores.T, ['blue','red'])

plt.plot(xy_centrado[:, 0], xy_centrado[:, 1]/20, '.')

plt.show()
# -

print(autovalores)

xy_nuevo = autovectores.T.dot(xy_centrado.T)

plt.plot(xy_nuevo[0, :], xy_nuevo[1, :], '.')



StarcoderdataJupyterScriptsDedupFiltered