Sklearn conceptos básicos

Al usar Sklearn para aprendizaje automático, es necesario conocer algunos conceptos básicos.

Sklearn proporciona una API unificada y sencilla para implementar varios algoritmos y flujos de aprendizaje automático, lo que nos ayuda a realizar rápidamente diversas tareas de aprendizaje automático.

A continuación, explicaremos los siguientes conceptos:Representación de datos, tipos de modelos, métodos de preprocesamiento, métricas de evaluación, ajuste de modelosetc.


1. Representación de datos: conjuntos de datos y características

El conjunto de datos es uno de los conceptos más básicos de Sklearn.

La tarea central del aprendizaje automático es aprender patrones a partir de los datos, y la forma en que se representan los datos es crucial.

Conjunto de datos (Dataset)

En scikit-learn, los datos generalmente se representan mediante dos objetos principales:Matriz de característicasyVector objetivo。

Matriz de características (Feature Matrix):Cada fila representa una muestra de datos, y cada columna representa una característica (es decir, una variable de entrada). Es un arreglo o matriz bidimensional, que generalmente se almacena mediante un arreglo de NumPy o un DataFrame de pandas.

Supongamos que tenemos 3 muestras, cada una con 2 características.

Ejemplo

import numpy as np
X = np.array([[1.0, 2.0], [2.0, 3.0], [3.0, 4.0]])

Vector objetivo (Target Vector):Representa el objetivo de cada muestra (es decir, la etiqueta de salida) y generalmente es un arreglo unidimensional.

Por ejemplo, en una tarea de clasificación, el objetivo es la etiqueta de categoría de cada muestra.

El vector objetivo correspondiente:

y = np.array([0, 1, 0])  # 0 类别和 1 类别

Características y etiquetas

  • Características (Features): son las variables de entrada del conjunto de datos utilizadas para entrenar el modelo. En el ejemplo anterior,Xes la matriz de características, que contiene todas las variables de entrada.

  • Etiquetas (Labels): son la salida objetivo del modelo de aprendizaje automático. En el aprendizaje supervisado, las etiquetas son los resultados que queremos que el modelo prediga. En el ejemplo anterior,yes la etiqueta o vector objetivo, que contiene la categoría de cada muestra.

División del conjunto de datos

En la práctica, generalmente es necesario dividir el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba.

scikit-learn proporciona una función útiltrain_test_split()para lograr esto:

Ejemplo

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • El código anterior llama a la funcióntrain_test_splity asigna el resultado a cuatro variables:X_train、X_test、y_trainyy_test。
  • Xyyse pasan comotrain_test_splitparámetros de la función, que representan respectivamente el conjunto de datos de características y la variable objetivo (etiquetas). GeneralmenteXes un arreglo bidimensional,yes un arreglo unidimensional.
  • test_size=0.3El parámetro especifica que el tamaño del conjunto de prueba debe ser el 30% del conjunto de datos original. Esto significa que el 70% de los datos se usará como conjunto de entrenamiento y el 30% restante como conjunto de prueba.
  • random_state=42El parámetro es una semilla de número aleatorio que se utiliza para garantizar que cada vez que se divida el conjunto de datos se obtengan los mismos resultados. Esto es muy útil en experimentos y validación de modelos, ya que asegura la reproducibilidad de los resultados.

2. Modelos y algoritmos

Aprendizaje supervisado y no supervisado

En scikit-learn, los modelos de aprendizaje automático se dividen aproximadamente en dos grandes categorías:Aprendizaje supervisadoyAprendizaje no supervisado。

Aprendizaje supervisado (Supervised Learning):En el aprendizaje supervisado, el modelo utiliza datos etiquetados durante el entrenamiento; estas etiquetas son los resultados que queremos que el modelo prediga.

Las tareas comunes de aprendizaje supervisado incluyen clasificación y regresión.

  • Clasificación (Classification): asigna los puntos de datos a categorías predefinidas. Por ejemplo, determinar si un correo es spam o no.
  • Regresión (Regression): predice salidas de valores continuos. Por ejemplo, predecir precios de viviendas, temperaturas, etc.

Usar un árbol de decisión para tareas de clasificación:

Ejemplo

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

Aprendizaje no supervisado (Unsupervised Learning):El aprendizaje no supervisado se refiere a que no hay datos etiquetados; el modelo aprende solo a través de las características de los propios datos de entrada.

Las tareas comunes de aprendizaje no supervisado incluyen agrupamiento (clustering) y reducción de dimensionalidad.

  • Agrupamiento (Clustering): agrupa los datos de modo que los datos dentro del mismo grupo tengan similitud. Los algoritmos de agrupamiento comunes incluyenK-Means、DBSCANetc.
  • Reducción de dimensionalidad (Dimensionality Reduction): reduce la cantidad de características en los datos, generalmente para compresión de datos o visualización. Los métodos comunes de reducción de dimensionalidad incluyenPCA(Análisis de Componentes Principales) yt-SNE(t-SNE, incrustación de vecinos estocásticos con distribución t), etc.

Usar agrupamiento K-Means:

Ejemplo

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X_train)
y_pred = kmeans.predict(X_test)

Preprocesamiento e ingeniería de características

Antes de usar scikit-learn para aprendizaje automático, normalmente es necesario preprocesar los datos, lo que incluye las siguientes tareas comunes:

1. Estandarización (Standardization):Unifica la escala de las características, de modo que cada característica tenga media cero y varianza unitaria.

Ejemplo

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

2. Normalización (Normalization):Escala los valores de las características a un rango fijo (generalmente de 0 a 1).

Ejemplo

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)

3. Codificación de variables categóricas:Convierte datos categóricos en datos numéricos (por ejemplo, codificación one-hot).


3. Evaluación y validación de modelos

Después de entrenar un modelo de aprendizaje automático, es necesario evaluar su rendimiento para garantizar su capacidad de generalización.

scikit-learn proporciona algunas herramientas para evaluar el rendimiento de los modelos.

Validación cruzada (Cross-validation)

La validación cruzada es un método común de evaluación de modelos, especialmente cuando la cantidad de datos es limitada.

Al dividir los datos en múltiples subconjuntos, usando cada vez un subconjunto como conjunto de validación y el resto como conjunto de entrenamiento, se entrena y evalúa el modelo repetidamente, y finalmente se calcula el rendimiento promedio del modelo.

Ejemplo

from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)  # 5-fold cross-validation
print("Cross-validation scores:", scores)

Métricas de evaluación comunes

Métricas de evaluación para tareas de clasificación:

  • Exactitud (Accuracy): proporción de muestras correctamente predichas entre todas las muestras.
  • Precisión (Precision): proporción de positivos reales entre las predicciones positivas.
  • Exhaustividad (Recall): proporción de positivos reales que se predijeron correctamente.
  • Puntuación F1: media armónica de la precisión y la exhaustividad.

Ejemplo

from sklearn.metrics import accuracy_score, classification_report
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Classification Report:\n", classification_report(y_test, y_pred))

Métricas de evaluación para tareas de regresión:

  • Error cuadrático medio (MSE): promedio de las diferencias al cuadrado entre los valores predichos y los valores reales.
  • Coeficiente de determinación (R²): mide la capacidad del modelo para explicar la variabilidad de los datos.

Ejemplo

from sklearn.metrics import mean_squared_error, r2_score
print("MSE:", mean_squared_error(y_test, y_pred))
print("R²:", r2_score(y_test, y_pred))

4. Selección y ajuste de modelos

Búsqueda en cuadrícula (Grid Search)

La búsqueda en cuadrículaes un método común de ajuste de hiperparámetros que recorre todas las combinaciones posibles de parámetros para encontrar la mejor combinación de hiperparámetros.

Ejemplo

from sklearn.model_selection import GridSearchCV

param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
grid_search = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("Best parameters:", grid_search.best_params_)

Búsqueda aleatoria (Random Search)

La búsqueda aleatoriaes un método que busca los hiperparámetros óptimos seleccionando aleatoriamente combinaciones de hiperparámetros; es más eficiente que la búsqueda en cuadrícula.

Ejemplo

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

param_dist = {'max_depth': [3, 5, 7], 'min_samples_split': randint(2, 10)}
random_search = RandomizedSearchCV(DecisionTreeClassifier(), param_dist, n_iter=10, cv=5)
random_search.fit(X_train, y_train)
print("Best parameters:", random_search.best_params_)
Otras extensiones