Sobre mi formación:
Algunos proyectos:
Lo que aprendí dictando un curso de programación para matemáticos...
En el año 2014, se me ofrece dictar el curso MAT244 Aplicaciones de la Matemática para la Ingeniería. La versión oficial tenía el siguiente programa:
Mi primera versión del curso tenía el siguiente programa:
Mi resumen del curso en la primera clase dice mucho:
Algunas "innovaciones":
Mi sello:
Año 2015.
La segunda versión del curso consideró la retroalimentación de los estudiantes de reducir carga: lecturas son opcionales.
Además, consideró los siguientes cambios:
Año 2018.
La tercera versión del curso consideró mis aprendizajes en la industria:
Otros cambios:
Año 2019.
La cuarta versión del curso ya no la dicté yo, la dictaron mis antiguos alumnos: Alonso Ogueda y Francisco Alfaro.
Año 2021.
¿Qué nuevos temas incluiría en el curso?
El ingeniero de software, ingeniero de datos, científico de datos y roles similares, cada vez se vuelven más "full stack" y tienen que auto-atenderse en el uso de grandes volúmenes de datos.
Estudiantes necesitan saber:
En un mundo disperso y bombardeado de distracciones, tener foco es un superpoder
Curso fue tremendamente exitoso y muy valorado por los estudiantes.
Presento el caso exitoso. Pero también he dictado otros cursos sin el mismo éxito:
¿Qué resultados arrojó la encuesta?
Con herramientas de markdown, html y latex: $ e^{i \pi} + 1 = 0 $
# kernels, en particular python
print("Hola \U0001F30E")
Simplificar la generación de material.
Simplificar la distribución del material.
Todo lo que ya incluyes en Jupyter Notebook: puedes mezclar contenido usando las celdas de markdown y código, según necesites:
Incluir gifs animados es igual de fácil que incluir imágenes, y suele ayudar a tener apoyos visuales atractivos.
Para mostrar gráficos resulta práctico que no se genere una ventana adicional, sino que se agreguen a la celda de resultados. Esta es una práctica común en jupyter notebook/lab, pero es más importante aún al pensar en las diapositivas.
%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
with plt.xkcd():
fig = plt.figure(figsize=(14,6))
x = np.linspace(-5,5,num=1000)
y = np.abs(np.abs(np.sin(5*x)/x))
plt.plot(x,y)
import numpy as np
import matplotlib.pyplot as plt
dt = 0.01
t = np.arange(0.0, 2.0, dt)
s = np.sin(2*np.pi*t)
plt.figure(figsize=(12,6))
plt.plot(t, s)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()
from IPython.display import Audio, Image, display
a = Audio("http://www.w3schools.com/html/horse.ogg")
i = Image(filename="images/Python.png", width=100)
display(a,i)
from IPython.display import Javascript
Javascript('alert("¡¡Tenemos javascript!!");')
%matplotlib inline
import ipywidgets as widgets
import numpy as np
import matplotlib.pyplot as plt
@widgets.interact(grado=(0, 9), N_puntos=(5,35))
def mi_plot(grado=3, N_puntos=5):
x = np.linspace(-10, 10, N_puntos)
y = x**grado
plt.figure(figsize=(12,8))
plt.plot(x, y, 'ro-')
plt.show()
Al empaquetar tu código con clases, asegúrate de incluir una función _repr_html_
para poder interactuar nativamente con jupyter notebook (y RISE):
class Alerta(object):
def __init__(self, text):
self.text = "\U000026A0 - " + text.upper()
def _repr_html_(self):
return "<h1 style='color:white;background:red;padding:30px'>" + self.text + "</h1>"
Alerta("Comenzar a hablar de RISE")
La librería streamlit permite crear aplicaciones web de manera extremadamente simple.
from IPython.display import IFrame
IFrame("https://share.streamlit.io/sebastiandres/talk_2021_11_pyconcl/main", width=600, height=450)
La librería scipy complementa numpy, disponibilizando una gran cantidad de algoritmos científicos.
En scipy existen muchos submódulos específicos para ciencia:
scipy.cluster
Vector quantization / Kmeansscipy.constants
Constantes físicas y matemáticasscipy.fftpack
Transformadas de Fourierscipy.integrate
Rutinas para integraciónscipy.interpolate
Interpolaciónscipy.io
Entrada y salidascipy.linalg
Rutinas para algebra linealscipy.ndimage
n-dimensional image packagescipy.odr
Orthogonal distance regressionscipy.optimize
Optimizaciónscipy.signal
Procesamiento de señalesscipy.sparse
Matrices dispersasscipy.spatial
estructuras de datos espaciales y algoritmosscipy.special
Funciones matemáticas especialesscipy.stats
EstadísticaPara resolver un sistema de ecuaciones usamos numpy y scipy:
$$ x + y + z = 1 \\ x - y + z = 2 \\ x + y - z = 3 \\ $$# Importar las librerías
import numpy as np
from scipy.linalg import solve
# define matrix A using Numpy arrays
A = np.array([[1, 1, 1],
[1,-1, 1],
[1, 1,-1]])
#define matrix B
b = np.array([1, 2, 3])
# linalg.solve is the function of NumPy to solve a system of linear scalar equations
x = solve(A, b)
print("Solución:\n", x)
# Verifiquemos
print("A*x=", A@x)
También es posible calcular la matriz inversa y multiplicar, pero para sistemas de ecuaciones grandes es muy ineficiente.
from scipy.linalg import inv
# Invertir explícitamente una matrix
A_inv = inv(A)
print("A^{-1}=\n", A_inv)
print("A^{-1} * x =\n", A_inv @ b)
Ejemplo para clases:
# Solución
import numpy as np
from scipy.linalg import solve
# Buscaremos resover x = [manzana, banana, coco]
# define matrix A using Numpy arrays
A = np.array([[3, 0, 0],
[1, 8, 0],
[0, 4,-2]])
#define matrix B
b = np.array([30, 18, 2])
# linalg.solve is the function of NumPy to solve a system of linear scalar equations
x = np.linalg.solve(A, b)
print("Valores individuales:\n", x)
print("Solución:\n", np.dot(x, np.array([1,3,1])))
Breve y modesta motivación...
Machine learning algorithms can figure out how to perform important tasks by generalizing from examples. This is often feasible and cost-effective where manual programming is not. As more data becomes available, more ambitious problems can be tackled
Pedro Domingos: A Few Useful Things to Know about Machine Learning
Estudia y construye sistemas que pueden aprender de los datos, más que seguir instrucciones explícitamente programadas.
Machine Learning es un conjunto de técnicas y modelos que permiten el modelamiento predictivo de datos, reunidas a partir de la intersección de elementos de probabilidad, estadística e inteligencia artificial.
Pregunta fundamental: ¿Qué conocimiento emerge a partir de los datos? ¿Qué modelo/técnica otorga la mejor predicción para estos datos?
Se preocupa de la practicidad de resolver problemas complejos utilizando datos.
Data Science es la aplicación de diversas técnicas de modelamiento con un fin específico. También se conoce como eScience.
La base de datos a utilizar no ha sido necesariamente creada.
Típicamente, un data scientist se encuentra en la industria, buscando automatizar un análisis complejo para un cliente (interno o externo).
Pregunta fundamental: ¿Qué puedo decir de X a partir de los datos?
Tiene por objetivo hacer que el computador ejecute tareas para las cuales el hombre, en un contexto dado, es actualmente mejor que la máquina.
Es un concepto más amplio que Machine Learning, en el sentido de definir el concepto de inteligencia.
Algunos enfoques de inteligencia considerean que tiene que ver principalmente con acciones racionales. Que un agente inteligente es capaz de percibir y actuar, realizando la mejor acción posible en una situación dada.
Pregunta fundamental: ¿Puedo modelar el problema pero que su resolución no es razonablemente factible por algoritmos existentes?
Es usual ver en LinkedIn, foros y/o blogs una serie de infografías tratando de definir o separar conceptos. Al no existir límites fijos, estas infografías suelen variar entre autores.
No creas todo lo que ves.
My opinión personal: No todo lo que brilla es oro. No soy fan de estas infografías o diagramas.
"All models are wrong,
some are useful" - George Box"
El modelamiento nunca es un objetivo en sí mismo.
"Everyone believes the recorded data,
except the scientist that record it.
No one believes the model,
except for the scientist that created it."
- Unknown
Realizaremos una actividad práctica de aprendizaje:
Objetivo:
Enlace: https://share.streamlit.io/sebastiandres/streamlit_ml_edu/main
Excelente artículo de Pedro Domingos: A Few Useful Things to Know about Machine Learning.