Machine learning es la ciencia de usar algoritmos para identificar patrones en datos con el fin de resolver un problema de interés.
- Aprendizaje supervisado: Tengo unas salidas que me ayudan a entrenar el algoritmo.
- Aprendizaje no supervisado: En este caso no tengo salidas para entrenar el algoritmo, solo nos queda extraer información de los datos dados.
Terminología para ciencia de datos
- Data/Datos: unidades de información o "hechos" de observaciones.
- Features: tipos de información acerca de tus observaciones.
- Filas: observaciones individuales o muestras.
- Columns: features que describen tus observaciones.
- Outlier: punto(s) de datos o data point(s) que se comporta de forma extraña.
- Pre-processing: preparar datos para su uso en un modelo de machine learning.
- ETL pipeline: framework de data science para extraer, transformar y cargar.
Dataset
Tipos de datos
- Numéricos: su feature es un número de tipo entero o flotante.
- Categórica: sus features representan una clase o tipo; usualmente se representan como un mapa de números o un "one-hot" vector.
- Image: su feature representa una imagen.
- Texto: su feature es en forma de texto, sea corto (como Twitter) o largo (como en noticias).
- Nan: su feature es desconocido o perdido.
Se le asigna a cada tipo de etiqueta un valor númerico. O la otra alternativa es la siguiente:
Es decir, se construye un vector con todas las etiquetas y se le asigna el valor 1 a la etiqueta correspondiente para ese ejemplo y al resto se le asigna el valor 0.
# Read in your CSV
data = pd.read_csv("file.csv")
# Get a sneak preview of the dataset
data.head()
# Muestra las primeras 5 filas
"""
Muestra el tipo de representación
de los datos
"""
data.dtypes
Tipos:
- Histogramas: Te dice qué tan frecuentes son ciertos valores en tus datos. Requiere agrupar los datos.
- Scatter Plots: Muestra la relación entre 2 features graficándolas como pares ordenados. Ayuda a detectar anomalías.
Algoritmos de Machine Learning:
- Aprendizaje no supervisado: Objetivo desconocido, queremos encontrar estructuras y grupos dentro de los datos.
- Clustering: Queremos encontrar grupos en los datos.
- Dimensionality reduction: Queremos encontrar qué features de entrada en los datos son de ayuda.
- Aprendizaje supervisado: El modelo obtiene features de entrada y salida. Hay un target/objetivo a predecir.
- Regresión: target output (objetivo de salida) es numérico.
- Clasificación: target output es una etiqueta.
Dataset:
- Pregnancies: Number of times pregnant
- Glucose: Plasma glucose concentration a 2 hours in an oral glucose tolerance test
- BloodPressure: Diastolic blood pressure (mm Hg)
- SkinThickness: Triceps skin fold thickness (mm)
- Insulin: 2-Hour serum insulin (mu U/ml)
- BMI: Body mass index (weight in kg/(height in m)^2)
- DiabetesPedigreeFunction: Diabetes pedigree function
- Age: Age (years)
- Outcome: Class variable (0 or 1)
Tips del reto:
- Elimina cualquier valor faltante y remplazarlos hacia la variable de los datos
data = data.dropna()
.
Plotting Multiple Graphs
f = plt.figure(figsize=(20,10)) for index, val_bins in enumerate([20, 25, 30, 35, 40, 85]): ax = f.add_subplot(2,3,index+1) data["Age"].hist(ax=ax, edgecolor='black', linewidth=2, bins=val_bins, color=plt.cm.tab20(index)) ax.set_title("Age range of patients") ax.set_ylim([0, 510]) ax.set_xlabel("Age") ax.set_ylabel("Count") f.tight_layout()
Receta de algoritmos ML
- Proceso de decisión: cómo los modelos hacen una predicción, o retornan una respuesta, usando los parámetros.
- Función de error/coste: cómo evaluar si los parámetros en el modelo generan buenas predicciones.
- Regla de actualización: cómo mejorar los parámetros para hacer mejores predicciones (usando optimización numérica).
Para cada columna del dataset con valores numéricos:
- Calcular el promedio de tus datos (
$\mu$ ). - Calcular la desviación estándar (
$\sigma$ ) de los datos. - Calcular:
$$\hat{x}_i = \frac{x_i-\mu}{\sigma}$$
Dividir el conjunto de datos en:
- Training(60-80%) datos de los que el modelo aprende patrones.
- Validation(0-20%) datos para verificar que el modelo aprende.
- Testing(0-20%) datos que se apartan para revisar si el modelo fue exitoso al predecir.
Parámetros: Diferentes parámetros cambian lo que pensamos de la relación entre features (
$x$ ) y target ($y_{pred}$ ).$y_{pred}= w_1\cdot x + w_0$ donde$W_1$ un cambio en$x$ resulta un cambio en$y$ , y$W_0$ el valor de$y$ si$x$ es 0.
Función de costo: El costo
Update Rule: Queremos minimizar la distancia
Metric: MSE and R^2 ayudan a identificar la fortaleza de la relación entre features de entrada y de salida.
A diferencia de la regresión lineal que predice una salida numérica, la regresión logística predice una clase/etiqueta.
El anterior es un ejemplo donde queremos clasificar la relación entre aprobar y las horas de sueño. Es decir, dado un estudiante que duerme
Explicación por términos:
$y_i\cdot \log(p_\text{pass})$ -> Si el estudiante ha pasado el examen, no es 0 este término.
$(1-y_{i, pred}) \cdot \log(1-p_\text{pass})$ -> Si el estudiante no ha pasado es no pasando. Este término no es 0.
Empleamos el mismo criterio para actualizar, minimizado la función de costo.
De esta matriz de confusión podemos obtener:
Un random forest es un conjunto o un grupo de decisiones que "votan" oir la respuesta correcta. Creando varios árboles se pueden generar diferentes preguntas que hacer a los datos. Luego se realiza una votación con el objetivo de seleccionar los resultados ligados a esos árboles, que por ende hicieron las mejores preguntas.
Parámetros:
- Número de árboles: Más árboles, menor la variación, más cómputo.
- Max features: El número de features usados para partir (split).
- Max depth: El número de niveles del árbol de decisión. (Preguntas)
-
$N_{split}$ = Min samples split: Número de data points que un nodo debe tener antes de dividirse. -
$n$ = Min samples leaf: El mínimo número de muestras requeridas para estar en una hoja (leaf).
Árboles de decisión: función de coste y regla de actualización
- Función de coste: para un feature seleccionado, encuentra el mejor split-point (punto de separación) y separa los datos en dos nodos más pequeños.
-
Regla de actualización: Si el nodo hoja tiene más de
$n_{min}$ puntos de datos, repite la función de coste, sino para.
Árboles de decisión: rendimiento
- Se pueden usar métricas de clasificación o regresión para evaluar qué tan bueno es el modelo.
Repaso: ingredientes de árbol de decisión
- Proceso de decisión: De un subset de features aleatorios de tus datos, elige un feature. Divide tus datos.
- Función de error/coste: Usando Gini y criterio de entropía para encontrar el mejor umbral para dividir tus datos.
- Regla de actualización: Si los nodos hoja no tienen ( n_m ) puntos de datos, repite el proceso.
K-Means:
- Colocar los centroides aleatoriamente. Partiendo de un valor
$K$ . Se puede extrapolar de los datos o intuición. - Calcular la distancia entre los puntos y los centroides.
- Asignar a los centroides aquellos puntos más cercanos a ellos.
- Luego mover los centroides al valor medio de las posiciones de todos los puntos.
- Repetir los pasos anteriores hasta un criterio, normalmente hasta que los puntos no cambien de centroide.
Rendimiento:
- Inertia: qué tan cerca esrán los puntos de datos al centroide. Este número debe ser pequeño.
- Silhouette score: qué tan lejanos son los cluster, de
$[-1, 1]$ . Este número debe ser cercano a 1.
Dataset: Inspeccionando los elementos parece que los "datos" contienen la información que necesitamos. Están en la forma de array, típicamente denotado
La clave feature_names
indica la información de las características: largo del sépalo, ancho del sépalo, largo del pétalo y ancho del pétalo.
El término "target", salida u objetivo es típicamente la meta que queremos modelar. La clave target_names
indica 3 especies de esta flor: "setosa", "versicolor" y "virginica".
The term "target" is typically the goal we are trying to model. The key "target_names" indicates 3 species of this flower, "setosa", "versicolor", and "virginica".
Nuestra meta es usar estos features y descripciones de las flores para poder predecir la especie de la planta.
Si no conocemos las etiquetas, contrario al caso del reto, podemos emplear la Curva de Elbow:
I = []
centroids = []
for c in range(2,11):
k2model = KMeans(n_clusters=c, random_state=42)
k2model.fit(data[["petal length (cm)", "petal width (cm)"]])
I.append(k2model.inertia_)
centroids.append(k2model.cluster_centers_)
f = plt.figure(figsize=(7,5))
ax = f.add_subplot(1,1,1)
ax.scatter(x=np.arange(2,11), y=I)
ax.plot(np.arange(2,11),I)
ax.set_xlabel('Clusters')
ax.set_ylabel('Inertia')
ax.set_title('Elbow method for optimal k value')
f.tight_layout()
Nota: código aportado por la comunidad de estudiantes de Platzi (Jonathan Vásquez Alvarado)
También se puede usar la biblioteca: https://www.scikit-yb.org/en/latest/index.html
Red Neuronal: es un modelo que usa neuronas y conexiones entre ellos para hacer predicciones. Son usadas usualmente para aprendizaje supervisado.
Capa de entrada conecta con múltiples unidades ocultas
- Cada unidad oculta recibe una combinación lineal de todas las entradas.
- Para la misma entrada existen diferentes pesos dependiendo de cuál unidad oculta esté adjunta. Estos pesos pueden ser distintos.
-
Ejemplo:
$W_{2,3}$ El peso de la segunda entrada a la tercera unidad.
**La unidad oculta ejecuta una función en la combinación lineal
Tipos de función de activación:
- Lineal:
$f(x)=x$ - ReLU: $f(x) = x \quad\forall~x \ge 0
\text{else} f(x)=0 \quad\forallx \le 0$ - Sigmoid:
$f(x)=1/(1+\exp(-x))$ - Tanh:
$f(x)=\tanh(x)$ - Se deben evitar la linealidad para funciones complejas.
Capa de salida: Existen diferentes funciones de activación para clasificación o regresión para esta capa. Algunas funciones de activación tienen rango limitado* (ex: softmax/sigmoide), mientras que otras se extienden indefinidamente (ReLUs, lineal).
Añadiendo capas: Cuando hablamos de profundidad es agregar más capas al model. Mientra que cuando hablamos de ancho es agregar más unidades ocultas o neuronas.
-
Con el Dropout podemos evitar el sobreajuste, esta técnica ignora aleatoriamente algunos nodos (neuronas) mientras entrena. Evita que el modelo retenga toda la información y en vez de aprender a generalizar solo memoriza. Esto siempre se quiere evitar.
-
Debemos preveer el overfitting
-
Observamos en la figura anterior como empleamos los datos de validación para controlar el entrenamiento de la red neuronal y de esta forma evitamos el overfitting, nos detenemos en el número óptimo de épocas.
-
Las redes neuronales tienen tres capas generales: Entrada, Ocultas y Salida.
-
Funciones de activación para capas ocultas y de salida.
-
Entrenamiento involucra avanzar en la red, calcular la pérdida y backpropagation.
-
El aprendizaje y dropout son importantes para el entrenamiento.
-
Evalúa la pérdida y el rendimiento en el set de validación.
- Escoge tu arquitectura.
- La receta de entrenamiento.
- Ajustar tu tasa de entrenamiento.
- DNN: Usada en muchos problemas complejos. Emplea casi todas las funciones de activación vista.
- CNN: Usada en imágenes y genómicos. Operador convoluciona/pool y kernels como herramienta matemática para extraer información de los datos.
- RRN: Representa secuencias, usada en lenguaje. Emplea celdas de memoria/puerta como herramienta matemática para su funcionamiento.
Backpropagation: método para ajustar los pesos de las neuronas de la red neuronal.
- Feed forward: avance hacia adelante
-
Como función de pérdida en regresión podemos emplear MSE
$$J = \frac{1}{N}\sum_{i=1}^{N}(y_i-y_{i, pred})^2$$ -
Como función de pérdida en regresión podemos emplear Binary Cross-Entropy (BCE)
$$J = -\frac{1}{N}\sum_{i=0}^{N} y_i\cdot \log(p_\text{Class 1}) + (1-y_{i}) \cdot \log(1-p_\text{Class 1})$$ -
Además para el caso de la clasificación de múltiples categorías tenemos Categorical Cross-Entropy (CCE)
$$J=\sum_{i=1}^C - t_i \log(p_i)$$ , donde$C$ es el número de clases,$t_i$ la etiqueta correcta y$p_i$ es la probabilidad de predección de la clase. -
Backpropagation: s la regla de actualización usada para ajustar los pesos en redes neuronales. Actualizamos cada peso en la red tomando la derivada (parcial) de ello con respecto a cada nodo, empezando desde la salida hasta las entradas.
- Analogía de la tasa de aprendizaje: La optimización se usa para encontrar pesos de acuerdo a las reglas de actualización.
- Si la tasa de aprendizaje (learning rate) es muy pequeña, toma mucho tiempo encontrar buenos pesos.
- Si es muy grande, el modelo podría atorarse en una mala solución.
Qué aprendimos
- Bases de ciencia de datos y visualizaciones.
- Algoritmos de aprendizaje supervisado.
- Algoritmos de aprendizaje no supervisado.
- Redes neuronales y deep learning.
Qué más aprender
- Uso práctico y avanzado de algoritmos de machine learning y redes neuronales.
- Uso avanzado de librerías ML como scikit-learn y TensorFlow.
- Despliegue de aplicaciones de ML.
- Procesamiento de lenguaje natural y más.