Para nuestro primer "Hola mundo" en Machine Learning, vamos a resolver un problema de clasificación muy sencillo: enseñar a una máquina a distinguir entre manzanas y naranjas. El objetivo es que, dadas ciertas características de una fruta, el modelo pueda predecir con la mayor precisión posible a qué categoría pertenece.
Para que la computadora pueda "entender" las frutas, debemos representarlas en un formato numérico. A estas representaciones las llamamos características (en inglés, features). En nuestro caso, hemos elegido dos características simples:
Además de las características, necesitamos las etiquetas (en inglés, labels), que son las respuestas correctas que queremos que el modelo aprenda. En nuestro caso, las etiquetas son:
Este pequeño conjunto de datos, con sus características y etiquetas, será nuestro conjunto de entrenamiento. A partir de él, el modelo aprenderá los patrones que le permitirán clasificar nuevas frutas.
Para este problema, hemos elegido un algoritmo de clasificación llamado árbol de decisión. Este algoritmo es muy popular en Machine Learning, especialmente para principiantes, por su simplicidad y su facilidad de interpretación.
Un árbol de decisión funciona de manera muy similar a como lo haría un ser humano al tomar una decisión. Se basa en una serie de preguntas sobre las características de los datos para llegar a una conclusión. Por ejemplo, el árbol podría aprender a hacer las siguientes preguntas:
La gran ventaja de los árboles de decisión es que son modelos de "caja blanca", lo que significa que podemos ver exactamente cómo el modelo está tomando sus decisiones. Esto los hace muy útiles para entender la relación entre las características y las etiquetas de nuestros datos.
A continuación, se muestra el código completo en Python para entrenar nuestro modelo de árbol de decisión y utilizarlo para predecir el tipo de una nueva fruta. El código está dividido en cinco pasos principales:
# 1) Importar lo esencial
from sklearn.tree import DecisionTreeClassifier
# 2) Datos de entrenamiento
# Cada fila = [peso, textura]
X = [
[150, 1], # naranja
[170, 1], # naranja
[130, 0], # manzana
[140, 0], # manzana
[160, 1], # naranja
[120, 0], # manzana
]
y = [1, 1, 0, 0, 1, 0] # 0 = manzana, 1 = naranja
# 3) Crear y entrenar el modelo
modelo = DecisionTreeClassifier(random_state=42)
modelo.fit(X, y)
# 4) Predecir un caso nuevo
nueva_fruta = [[152, 1]] # fruta de 152 g y rugosa
prediccion = modelo.predict(nueva_fruta)[0]
# 5) Mostrar resultado en lenguaje humano
etiquetas = ["manzana", "naranja"]
print(f"La fruta de 152 g y textura rugosa es probablemente: {etiquetas[prediccion]}")
Salida esperada:
La fruta de 152 g y textura rugosa es probablemente: naranja
DecisionTreeClassifier de la librería Scikit-learn.X para las características y y para las etiquetas. Cada elemento de X es una lista que representa una fruta, y cada elemento de y es la etiqueta correspondiente.DecisionTreeClassifier y la guardamos en la variable modelo. Luego, llamamos al método fit() para entrenar el modelo con nuestros datos de entrenamiento. El parámetro random_state se utiliza para garantizar que el resultado sea reproducible.nueva_fruta con las características de una fruta que queremos clasificar. Luego, llamamos al método predict() para obtener la predicción del modelo.Este sencillo ejemplo nos ha permitido dar nuestros primeros pasos en el mundo del Machine Learning y aprender algunos conceptos fundamentales:
fit() y hacer predicciones con el método predict(). Este es el flujo de trabajo básico que seguiremos en la mayoría de los proyectos de Machine Learning con Scikit-learn.Aunque nuestro primer modelo funciona, es importante ser conscientes de sus limitaciones:
En los próximos capítulos, profundizaremos en estos conceptos y aprenderemos a construir modelos de Machine Learning más robustos y precisos. Veremos cómo trabajar con conjuntos de datos más grandes, cómo evaluar el rendimiento de nuestros modelos y cómo optimizarlos para obtener los mejores resultados posibles.