En esta sección, exploraremos los diferentes tipos de Machine Learning (ML) que existen. El Machine Learning se puede clasificar en varias categorías según la naturaleza de la señal o "feedback" disponible para el sistema de aprendizaje. Los tres tipos principales son:

  1. Aprendizaje Supervisado
  2. Aprendizaje No Supervisado
  3. Aprendizaje por Refuerzo

  1. Aprendizaje Supervisado

Definición

El aprendizaje supervisado es una técnica de ML en la que el modelo se entrena utilizando un conjunto de datos etiquetados. Esto significa que cada entrada de datos viene con una etiqueta o resultado esperado.

Ejemplos

  • Regresión Lineal: Predicción de precios de viviendas.
  • Clasificación: Detección de spam en correos electrónicos.

Proceso

  1. Recopilación de Datos: Obtener un conjunto de datos etiquetados.
  2. Entrenamiento del Modelo: Utilizar los datos etiquetados para entrenar el modelo.
  3. Evaluación del Modelo: Validar el modelo con un conjunto de datos de prueba.

Ejemplo de Código

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Datos de ejemplo
X = [[1], [2], [3], [4], [5]]
y = [1, 4, 9, 16, 25]

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear y entrenar el modelo
model = LinearRegression()
model.fit(X_train, y_train)

# Hacer predicciones
y_pred = model.predict(X_test)

# Evaluar el modelo
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

Ejercicio Práctico

Ejercicio: Utiliza un conjunto de datos de iris para entrenar un modelo de clasificación utilizando el algoritmo de K-Vecinos más Cercanos (K-NN).

Solución

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# Cargar el conjunto de datos de iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear y entrenar el modelo K-NN
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Hacer predicciones
y_pred = knn.predict(X_test)

# Evaluar el modelo
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

  1. Aprendizaje No Supervisado

Definición

El aprendizaje no supervisado es una técnica de ML en la que el modelo se entrena utilizando un conjunto de datos que no están etiquetados. El objetivo es encontrar patrones o estructuras ocultas en los datos.

Ejemplos

  • Clustering: Agrupación de clientes en segmentos de mercado.
  • Reducción de Dimensionalidad: Análisis de componentes principales (PCA).

Proceso

  1. Recopilación de Datos: Obtener un conjunto de datos sin etiquetas.
  2. Entrenamiento del Modelo: Utilizar los datos para encontrar patrones.
  3. Evaluación del Modelo: Validar los patrones encontrados.

Ejemplo de Código

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# Cargar el conjunto de datos de iris
iris = load_iris()
X = iris.data

# Crear y entrenar el modelo PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Visualizar los resultados
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=iris.target)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Iris Dataset')
plt.show()

Ejercicio Práctico

Ejercicio: Utiliza el algoritmo K-means para agrupar un conjunto de datos de clientes en 3 clusters.

Solución

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])

# Crear y entrenar el modelo K-means
kmeans = KMeans(n_clusters=3, random_state=0)
kmeans.fit(X)

# Obtener los clusters
y_kmeans = kmeans.predict(X)

# Visualizar los resultados
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.title('K-means Clustering')
plt.show()

  1. Aprendizaje por Refuerzo

Definición

El aprendizaje por refuerzo es una técnica de ML en la que un agente aprende a tomar decisiones mediante la interacción con un entorno. El agente recibe recompensas o castigos en función de las acciones que realiza.

Ejemplos

  • Juegos: Entrenamiento de agentes para jugar a videojuegos.
  • Robótica: Control de robots para realizar tareas específicas.

Proceso

  1. Definición del Entorno: Crear un entorno en el que el agente pueda interactuar.
  2. Entrenamiento del Agente: El agente aprende a través de prueba y error.
  3. Evaluación del Agente: Validar el rendimiento del agente en el entorno.

Ejemplo de Código

import gym

# Crear el entorno
env = gym.make('CartPole-v1')

# Inicializar el entorno
state = env.reset()

# Ejecutar una acción aleatoria
action = env.action_space.sample()
next_state, reward, done, info = env.step(action)

print(f"Next State: {next_state}, Reward: {reward}, Done: {done}")

Ejercicio Práctico

Ejercicio: Implementa un agente que aprenda a jugar al juego "MountainCar-v0" utilizando Q-learning.

Solución

import gym
import numpy as np

# Crear el entorno
env = gym.make('MountainCar-v0')

# Inicializar la tabla Q
state_space = [20, 20]
q_table = np.zeros(state_space + [env.action_space.n])

# Definir los parámetros de Q-learning
alpha = 0.1
gamma = 0.99
epsilon = 0.1
episodes = 10000

# Discretizar el espacio de estados
def discretize_state(state):
    env_low = env.observation_space.low
    env_high = env.observation_space.high
    env_dx = (env_high - env_low) / state_space
    return tuple(((state - env_low) / env_dx).astype(int))

# Entrenar el agente
for episode in range(episodes):
    state = discretize_state(env.reset())
    done = False
    while not done:
        if np.random.random() < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(q_table[state])
        
        next_state, reward, done, _ = env.step(action)
        next_state = discretize_state(next_state)
        
        q_table[state][action] = q_table[state][action] + alpha * (reward + gamma * np.max(q_table[next_state]) - q_table[state][action])
        
        state = next_state

# Evaluar el agente
state = discretize_state(env.reset())
done = False
while not done:
    action = np.argmax(q_table[state])
    next_state, reward, done, _ = env.step(action)
    next_state = discretize_state(next_state)
    state = next_state
    env.render()

env.close()

Conclusión

En esta sección, hemos explorado los tres tipos principales de Machine Learning: aprendizaje supervisado, no supervisado y por refuerzo. Cada uno tiene sus propias características y aplicaciones, y es fundamental comprender las diferencias para aplicar la técnica adecuada a cada problema. En los siguientes módulos, profundizaremos en cada uno de estos tipos y sus algoritmos específicos.

Curso de Machine Learning

Módulo 1: Introducción al Machine Learning

Módulo 2: Fundamentos de Estadística y Probabilidad

Módulo 3: Preprocesamiento de Datos

Módulo 4: Algoritmos de Machine Learning Supervisado

Módulo 5: Algoritmos de Machine Learning No Supervisado

Módulo 6: Evaluación y Validación de Modelos

Módulo 7: Técnicas Avanzadas y Optimización

Módulo 8: Implementación y Despliegue de Modelos

Módulo 9: Proyectos Prácticos

Módulo 10: Recursos Adicionales

© Copyright 2024. Todos los derechos reservados