Este repositorio agrupa una serie de ejercicios en Python centrados en Álgebra, Cálculo y Geometría, con el objetivo de aplicar conceptos teóricos a problemas prácticos mediante programación. Aquí encontrarás un cuaderno de Jupyter donde se desarrollan cinco bloques de trabajo, cada uno enfocado en un área específica de matemáticas aplicadas, así como los datos y las imágenes asociados.
- Estructura del Repositorio
- Requisitos y Configuración
- Descripción de cada sección
- Resultados y Visualizaciones
- Aprendizaje y Reflexión Personal
- Ejecución y Reproducción
.
├── data/
│ └── train.csv
├── images/
├── math_applications_with_python.ipynb
└── README.md
datatrain.csv: Conjunto de datos utilizado en los ejercicios de regresión lineal (House Prices de Kaggle).math_applications_with_python.ipynb: Notebook principal con todas las secciones de desarrollo.images/: Carpeta que contiene las imágenes originales y las generadas durante la práctica.README.md: Documentación detallada de cada apartado, instrucciones de uso y recomendaciones.
-
Entorno de Python
- Python 3.8+
- Recomendada la creación de un entorno virtual con
venvoconda.
-
Dependencias Se incluyen en un archivo
requirements.txt, que puedes instalar mediante:pip install -r requirements.txt
Al menos se requieren:
numpypandasmatplotlibscikit-learn(opcional, para comparaciones rápidas)requestsbeautifulsoup4
-
Ejecución
- Abre
math_applications_with_python.ipynben tu entorno (Jupyter Notebook o JupyterLab). - Ejecuta las celdas de cada sección en orden, asegurándote de tener la carpeta
data/yimages/en la misma ruta que el cuaderno. - Para la sección de regresión, la columna objetivo en
train.csvesSalePrice, y el resto de columnas de interés pueden ajustarse según la disponibilidad de datos.
- Abre
Cada sección del cuaderno está diseñada para ilustrar tanto los fundamentos matemáticos como su implementación en Python. A continuación se describen los cinco bloques de trabajo:
Objetivo general
Implementar las operaciones fundamentales sobre multiconjuntos (bags) en Python, usando estructuras de datos nativas (listas, diccionarios) y la clase collections.Counter.
Conceptos Matemáticos
- Definición de multiconjunto y cardinalidad.
- Relaciones de pertenencia, inclusión y comparación entre multiconjuntos.
- Operaciones de unión, intersección y diferencia.
Desarrollo en Python
-
Funciones básicas:
multiconjunto(iterable) → Countercardinalidad(c: Counter) → intinserta(c: Counter, elemento) → Noneelimina(c: Counter, elemento) → Nonepertenece(c: Counter, elemento) → boolsubconjunto(c1: Counter, c2: Counter) → booliguales(c1: Counter, c2: Counter) → bool
-
Operaciones entre multiconjuntos:
union(c1: Counter, c2: Counter) → Counterinterseccion(c1: Counter, c2: Counter) → Counterdiferencia(c1: Counter, c2: Counter) → Counter
Cada función incluye:
- Documentación con especificación de parámetros y valor de retorno.
- Ejemplos de uso.
- Pruebas rápidas con casos sencillos para validar el correcto funcionamiento.
Objetivo general Aplicar la descomposición en valores singulares a una imagen en escala de grises, comprimiéndola sin perder demasiada información visual.
Conceptos Matemáticos
-
Descomposición SVD:
$$ A = U , \Sigma , V^\top $$
donde
$A$ es la matriz de píxeles de la imagen. -
Principios de compresión: conservar solo los primeros
$k$ valores singulares. -
Error de reconstrucción y calidad percibida según el número de componentes retenidos.
Desarrollo en Python
-
Lectura y conversión de la imagen a una matriz numérica (usando
matplotlib.imageoPIL). -
Cálculo de la SVD con
numpy.linalg.svd. -
Función
comprimir_svd(imagen: np.ndarray, k: int) → np.ndarrayque:- Selecciona los primeros
$k$ valores singulares y vectores asociados. - Reconstruye la imagen aproximada.
- Muestra comparativas (imagen original vs. comprimida) y calcula el error relativo (por ejemplo, norma Frobenius).
- Selecciona los primeros
-
Ejemplos para distintos valores de
$k$ (por ej., 10, 50, 100), incluyendo visualización conmatplotlib.pyplot.
Objetivo general
Implementar desde cero el método de mínimos cuadrados para regresión lineal y aplicarlo al conjunto de datos train.csv de precios de viviendas.
Conceptos Matemáticos
-
Formulación matricial de la regresión lineal:
$$ \mathbf{y} = X , \beta + \epsilon, \quad \beta = (X^\top X)^{-1} X^\top \mathbf{y} $$
-
Pseudoinversa en caso de colinealidad.
-
Interpretación de los coeficientes obtenidos, error cuadrático medio (MSE) y evaluación sobre subconjunto de datos.
Desarrollo en Python
-
Lectura y preprocesamiento de
train.csvusandopandas:read_to_df(ruta: str) → pd.DataFrame- Selección de variables relevantes:
select_columns(df, columnas: List[str]) → pd.DataFrame - Función
column_cutoff(df: pd.DataFrame, umbral: float) → pd.DataFramepara eliminar variables con baja varianza o muchos valores nulos.
-
Construcción de la matriz de diseño
$X$ y vector objetivo$\mathbf{y}$ . -
Función
inverse_of_matrix(A: np.ndarray) → np.ndarray(con chequeo de determinante para evitar singularidad). -
Función
least_squares_weights(X: np.ndarray, y: np.ndarray) → np.ndarrayque calcula$\beta$ . -
Cálculo de predicciones y métricas de desempeño:
- Error cuadrático medio (MSE).
- Coeficiente de determinación
$R^2$ .
-
Visualización de resultados (por ejemplo, dispersión vs. predicciones).
Objetivo general Implementar el algoritmo de Gradient Descent para encontrar los coeficientes de regresión lineal y comparar convergencia y resultados con mínimos cuadrados.
Conceptos Matemáticos
-
Definición de la función de costo:
$$ J(\beta) = \frac{1}{2m} \sum_{i=1}^{m} \bigl(X_i^\top \beta - y_i \bigr)^2. $$
-
Derivada parcial con respecto a
$\beta$ . -
Regla de actualización:
$$ \beta \leftarrow \beta - \eta , \nabla J(\beta). $$
Desarrollo en Python
-
Función
gradient_descent(X: np.ndarray, y: np.ndarray, w_init: np.ndarray, iterations: int, eta: float) → np.ndarray:-
X: matriz de diseño (incluye columna de 1s para el término independiente). -
y: vector de valores. -
w_init: vector de pesos iniciales (por ejemplo, ceros o valores pequeños aleatorios). -
iterations: número de iteraciones a ejecutar. -
eta: tasa de aprendizaje (learning rate).
-
-
Monitorización de la función de costo en cada iteración para graficar la convergencia.
-
Comparación entre los pesos obtenidos por descenso de gradiente y los obtenidos por mínimos cuadrados (porcentajes de error relativos).
-
Visualización de la curva de aprendizaje y análisis del efecto de
$\eta$ y el número de iteraciones.
Objetivo general Extraer contenido textual de páginas web mediante web scraping, procesar el texto para generar vectores de características y calcular la similitud de cosenos entre ellos.
Conceptos Matemáticos
-
Representación de documentos como vectores de frecuencia de términos (bag of words).
-
Cálculo de la similitud de cosenos:
$$ \text{sim}(D_i, D_j) = \frac{\vec{v}_i \cdot \vec{v}_j}{|\vec{v}_i| , |\vec{v}_j|}. $$
Desarrollo en Python
-
Web scraping con
requestsyBeautifulSoup:parse_from_url(html_content: str) → strpara limpiar etiquetas HTML y extraer texto básico.get_content(url_list: List[str]) → Dict[str, str]que devuelve un diccionario URL → texto plano.
-
Procesamiento de texto:
-
Tokenización con función
tokeniser(texto: str) → List[str](eliminar stopwords, normalizar a minúsculas, remover puntuación). -
Generación de vocabulario conjunto (
union(vocab1, vocab2) → Set[str]) y construcción de vectores de frecuencia:set2vector(vocab: List[str], tokens: List[str]) → List[int].
-
-
Cálculo de similitud:
- Función
cosine_similarity(v1: List[int], v2: List[int]) → float. - Pruebas entre distintos pares de URLs y visualización de la matriz de similitud (heatmap con
matplotlib).
- Función
-
Sección SVD:
- Gráficos comparativos entre la imagen original y las aproximaciones con distintos valores de
$k$ . - Cálculo del error relativo en norma Frobenius para cada
$k$ .
- Gráficos comparativos entre la imagen original y las aproximaciones con distintos valores de
-
Secciones de Regresión:
- Dispersión de las predicciones frente a los valores reales.
- Curva de aprendizaje (función de costo vs. iteraciones) para Gradient Descent.
- Tabla resumen de métricas (MSE,
$R^2$ ) comparando métodos.
-
Sección de Similitud Web:
- Heatmap de la matriz de similitud entre URLs evaluadas.
- Ejemplos de pares de páginas con similitud alta/baja.
Las imágenes generadas se almacenan automáticamente en la carpeta images/ y están comentadas en el cuaderno para facilitar su seguimiento.
A lo largo de este trabajo, he podido profundizar en la relación entre teoría matemática (álgebra lineal, cálculo de errores y medidas de similitud) y su aplicación programática en Python.
Si bien los conceptos teóricos son complejos, la implementación paso a paso me ha ayudado a reforzar la comprensión de temas como:
- Procesamiento de datos matriciales (SVD).
- Formulación de problemas de optimización (método de mínimos cuadrados vs. Gradient Descent).
- Técnicas de web scraping y procesamiento de texto para comparar documentos.
Además, la documentación cuidadosa de cada función y la presentación de resultados visuales ha mejorado mi capacidad para estructurar proyectos de forma profesional y reproducible.
-
Clonar el repositorio:
git clone https://github.com/tu-usuario/nombre-repositorio.git cd nombre-repositorio -
Crear e instalar dependencias:
python -m venv venv source venv/bin/activate # En Linux/macOS # venv\Scripts\activate.bat # En Windows pip install -r requirements.txt
-
Abrir el cuaderno:
jupyter notebook math_applications_with_python.ipynb
-
Seguir las instrucciones dentro del notebook.