En este módulo, exploraremos los algoritmos más comunes y fundamentales en el campo del Machine Learning. Estos algoritmos son la base para construir modelos que pueden aprender y hacer predicciones a partir de datos. A lo largo de esta sección, cubriremos los siguientes temas:

  1. Regresión Lineal
  2. Regresión Logística
  3. Árboles de Decisión
  4. Máquinas de Soporte Vectorial (SVM)
  5. K-Nearest Neighbors (K-NN)
  6. K-Means Clustering
  7. Redes Neuronales Básicas

  1. Regresión Lineal

Concepto

La regresión lineal es uno de los algoritmos más simples y utilizados en Machine Learning. Se utiliza para predecir un valor continuo basado en una o más variables independientes.

Ejemplo

Supongamos que queremos predecir el precio de una casa basado en su tamaño. La relación entre el tamaño de la casa y su precio puede ser aproximada por una línea recta.

Código

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# Datos de ejemplo
X = np.array([[1500], [1600], [1700], [1800], [1900]])
y = np.array([300000, 320000, 340000, 360000, 380000])

# Crear el modelo de regresión lineal
model = LinearRegression()
model.fit(X, y)

# Predicción
predicted_price = model.predict([[2000]])
print(f"El precio predicho para una casa de 2000 sqft es: ${predicted_price[0]:,.2f}")

# Visualización
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X), color='red')
plt.xlabel('Tamaño de la casa (sqft)')
plt.ylabel('Precio ($)')
plt.title('Regresión Lineal')
plt.show()

Explicación

  • Importación de librerías: Usamos numpy para manejar los datos y matplotlib para la visualización. sklearn.linear_model proporciona la implementación de regresión lineal.
  • Datos de ejemplo: X representa los tamaños de las casas y y los precios.
  • Creación y entrenamiento del modelo: model.fit(X, y) ajusta el modelo a los datos.
  • Predicción: model.predict([[2000]]) predice el precio de una casa de 2000 sqft.
  • Visualización: Se muestra una gráfica con los datos y la línea de regresión.

  1. Regresión Logística

Concepto

La regresión logística se utiliza para problemas de clasificación binaria. Predice la probabilidad de que una instancia pertenezca a una clase particular.

Ejemplo

Supongamos que queremos predecir si un estudiante aprobará un examen basado en las horas de estudio.

Código

import numpy as np
from sklearn.linear_model import LogisticRegression

# Datos de ejemplo
X = np.array([[5], [10], [15], [20], [25]])
y = np.array([0, 0, 0, 1, 1])  # 0: No aprueba, 1: Aprueba

# Crear el modelo de regresión logística
model = LogisticRegression()
model.fit(X, y)

# Predicción
probability = model.predict_proba([[12]])[0][1]
print(f"La probabilidad de aprobar con 12 horas de estudio es: {probability:.2f}")

# Clasificación
prediction = model.predict([[12]])
print(f"El estudiante {'aprobará' if prediction[0] == 1 else 'no aprobará'} con 12 horas de estudio.")

Explicación

  • Importación de librerías: sklearn.linear_model proporciona la implementación de regresión logística.
  • Datos de ejemplo: X representa las horas de estudio y y si el estudiante aprueba (1) o no (0).
  • Creación y entrenamiento del modelo: model.fit(X, y) ajusta el modelo a los datos.
  • Predicción de probabilidad: model.predict_proba([[12]]) predice la probabilidad de aprobar con 12 horas de estudio.
  • Clasificación: model.predict([[12]]) predice si el estudiante aprobará o no.

  1. Árboles de Decisión

Concepto

Los árboles de decisión son modelos de predicción que dividen los datos en subconjuntos basados en características y umbrales específicos, formando una estructura de árbol.

Ejemplo

Supongamos que queremos predecir si un cliente comprará un producto basado en su edad y salario.

Código

from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
from sklearn import tree

# Datos de ejemplo
X = np.array([[25, 50000], [35, 60000], [45, 80000], [20, 20000], [30, 40000]])
y = np.array([1, 1, 1, 0, 0])  # 1: Compra, 0: No compra

# Crear el modelo de árbol de decisión
model = DecisionTreeClassifier()
model.fit(X, y)

# Predicción
prediction = model.predict([[40, 70000]])
print(f"El cliente {'comprará' if prediction[0] == 1 else 'no comprará'} el producto.")

# Visualización del árbol
plt.figure(figsize=(12,8))
tree.plot_tree(model, feature_names=['Edad', 'Salario'], class_names=['No compra', 'Compra'], filled=True)
plt.show()

Explicación

  • Importación de librerías: sklearn.tree proporciona la implementación de árboles de decisión.
  • Datos de ejemplo: X representa las características (edad y salario) y y si el cliente compra (1) o no (0).
  • Creación y entrenamiento del modelo: model.fit(X, y) ajusta el modelo a los datos.
  • Predicción: model.predict([[40, 70000]]) predice si un cliente de 40 años con un salario de 70000 comprará el producto.
  • Visualización: Se muestra el árbol de decisión.

  1. Máquinas de Soporte Vectorial (SVM)

Concepto

Las SVM son algoritmos de clasificación que buscan el hiperplano que mejor separa las clases en el espacio de características.

Ejemplo

Supongamos que queremos clasificar puntos en un plano 2D.

Código

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import matplotlib.pyplot as plt

# Datos de ejemplo
X, y = datasets.make_blobs(n_samples=100, centers=2, random_state=6)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Crear el modelo SVM
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# Predicción
accuracy = model.score(X_test, y_test)
print(f"La precisión del modelo SVM es: {accuracy:.2f}")

# Visualización
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='winter')
plt.title('Clasificación con SVM')
plt.show()

Explicación

  • Importación de librerías: sklearn.svm proporciona la implementación de SVM.
  • Datos de ejemplo: datasets.make_blobs genera datos de ejemplo para clasificación.
  • Creación y entrenamiento del modelo: model.fit(X_train, y_train) ajusta el modelo a los datos de entrenamiento.
  • Predicción: model.score(X_test, y_test) evalúa la precisión del modelo en los datos de prueba.
  • Visualización: Se muestra la clasificación de los puntos en el plano 2D.

  1. K-Nearest Neighbors (K-NN)

Concepto

K-NN es un algoritmo de clasificación que asigna una clase a una instancia basada en las clases de sus k vecinos más cercanos.

Ejemplo

Supongamos que queremos clasificar flores basado en sus características.

Código

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

# Datos de ejemplo
iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

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

# Predicción
accuracy = model.score(X_test, y_test)
print(f"La precisión del modelo K-NN es: {accuracy:.2f}")

Explicación

  • Importación de librerías: sklearn.neighbors proporciona la implementación de K-NN.
  • Datos de ejemplo: load_iris carga el conjunto de datos de iris.
  • Creación y entrenamiento del modelo: model.fit(X_train, y_train) ajusta el modelo a los datos de entrenamiento.
  • Predicción: model.score(X_test, y_test) evalúa la precisión del modelo en los datos de prueba.

  1. K-Means Clustering

Concepto

K-Means es un algoritmo de clustering que agrupa datos en k clusters basados en sus características.

Ejemplo

Supongamos que queremos agrupar clientes basado en sus patrones de compra.

Código

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

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

# Crear el modelo K-Means
model = KMeans(n_clusters=2)
model.fit(X)

# Predicción
labels = model.predict(X)
print(f"Etiquetas de los clusters: {labels}")

# Visualización
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(model.cluster_centers_[:, 0], model.cluster_centers_[:, 1], s=300, c='red')
plt.title('Clustering con K-Means')
plt.show()

Explicación

  • Importación de librerías: sklearn.cluster proporciona la implementación de K-Means.
  • Datos de ejemplo: X representa las características de los clientes.
  • Creación y entrenamiento del modelo: model.fit(X) ajusta el modelo a los datos.
  • Predicción: model.predict(X) asigna etiquetas de clusters a los datos.
  • Visualización: Se muestra la agrupación de los datos y los centros de los clusters.

  1. Redes Neuronales Básicas

Concepto

Las redes neuronales son modelos inspirados en el cerebro humano, compuestos por capas de neuronas que procesan información.

Ejemplo

Supongamos que queremos clasificar dígitos escritos a mano.

Código

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier

# Datos de ejemplo
digits = load_digits()
X = digits.data
y = digits.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Crear el modelo de red neuronal
model = MLPClassifier(hidden_layer_sizes=(100,), max_iter=300, solver='adam', random_state=42)
model.fit(X_train, y_train)

# Predicción
accuracy = model.score(X_test, y_test)
print(f"La precisión del modelo de red neuronal es: {accuracy:.2f}")

Explicación

  • Importación de librerías: sklearn.neural_network proporciona la implementación de redes neuronales.
  • Datos de ejemplo: load_digits carga el conjunto de datos de dígitos escritos a mano.
  • Creación y entrenamiento del modelo: model.fit(X_train, y_train) ajusta el modelo a los datos de entrenamiento.
  • Predicción: model.score(X_test, y_test) evalúa la precisión del modelo en los datos de prueba.

Conclusión

En esta sección, hemos cubierto algunos de los algoritmos más importantes en Machine Learning, incluyendo regresión lineal, regresión logística, árboles de decisión, SVM, K-NN, K-Means y redes neuronales básicas. Cada uno de estos algoritmos tiene sus propias fortalezas y debilidades, y la elección del algoritmo adecuado depende del problema específico que se esté abordando.

Resumen

  • Regresión Lineal: Predicción de valores continuos.
  • Regresión Logística: Clasificación binaria.
  • Árboles de Decisión: Clasificación y regresión mediante una estructura de árbol.
  • SVM: Clasificación mediante la búsqueda del hiperplano óptimo.
  • K-NN: Clasificación basada en la proximidad de los vecinos.
  • K-Means: Agrupación de datos en clusters.
  • Redes Neuronales: Modelos inspirados en el cerebro humano para clasificación y regresión.

Preparación para el siguiente tema

En el próximo módulo, profundizaremos en la evaluación y validación de modelos de Machine Learning, lo cual es crucial para asegurar que nuestros modelos funcionen correctamente y generalicen bien a nuevos datos.

© Copyright 2024. Todos los derechos reservados