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:
- Regresión Lineal
- Regresión Logística
- Árboles de Decisión
- Máquinas de Soporte Vectorial (SVM)
- K-Nearest Neighbors (K-NN)
- K-Means Clustering
- Redes Neuronales Básicas
- 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 ymatplotlib
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 yy
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.
- 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 yy
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.
- Á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) yy
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.
- 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.
- 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.
- 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.
- 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.
Fundamentos de Inteligencia Artificial (IA)
Módulo 1: Introducción a la Inteligencia Artificial
Módulo 2: Principios Básicos de la IA
Módulo 3: Algoritmos en IA
Módulo 4: Aprendizaje Automático (Machine Learning)
- Conceptos Básicos de Machine Learning
- Tipos de Aprendizaje Automático
- Algoritmos de Machine Learning
- Evaluación y Validación de Modelos
Módulo 5: Redes Neuronales y Deep Learning
- Introducción a las Redes Neuronales
- Arquitectura de Redes Neuronales
- Deep Learning y sus Aplicaciones