Concepts de base de Sklearn

Lorsque vous utilisez Sklearn pour l'apprentissage automatique, vous devez comprendre certains concepts de base.

Sklearn fournit une API unifiée et concise pour implémenter divers algorithmes et flux de travail d'apprentissage automatique, nous aidant à accomplir rapidement diverses tâches d'apprentissage automatique.

Ensuite, nous allons détailler les concepts suivants :Représentation des données, types de modèles, méthodes de prétraitement, métriques d'évaluation, réglage des modèlesetc.


1. Représentation des données : jeux de données et caractéristiques

Le jeu de données est l'un des concepts les plus fondamentaux de Sklearn.

La tâche principale de l'apprentissage automatique est d'apprendre des motifs à partir des données, et la manière dont les données sont représentées est cruciale.

Jeu de données

Dans scikit-learn, les données sont généralement représentées par deux objets principaux :Matrice de caractéristiquesetvecteur cible。

Matrice de caractéristiques :Chaque ligne représente un échantillon de données, et chaque colonne représente une caractéristique (c.-à-d. une variable d'entrée). Il s'agit d'un tableau ou d'une matrice bidimensionnelle, généralement stocké sous forme de tableau NumPy ou de DataFrame pandas.

Supposons que nous ayons 3 échantillons, chacun avec 2 caractéristiques.

Exemple

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

Vecteur cible :Il représente la cible de chaque échantillon (c.-à-d. l'étiquette de sortie), généralement un tableau unidimensionnel.

Par exemple, dans une tâche de classification, la cible est l'étiquette de classe de chaque échantillon.

Le vecteur cible correspondant :

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

Caractéristiques et étiquettes

  • Caractéristiques: sont les variables d'entrée du jeu de données utilisées pour entraîner le modèle. Dans l'exemple ci-dessus,Xest la matrice de caractéristiques, contenant toutes les variables d'entrée.

  • Étiquettes: sont les sorties cibles du modèle d'apprentissage automatique. En apprentissage supervisé, les étiquettes sont les résultats que nous voulons que le modèle prédise. Dans l'exemple ci-dessus,yest le vecteur d'étiquette ou de cible, contenant la classe de chaque échantillon.

Division du jeu de données

Dans les applications pratiques, il est généralement nécessaire de diviser le jeu de données en un ensemble d'entraînement et un ensemble de test.

scikit-learn fournit une fonction pratiquetrain_test_split()pour ce faire :

Exemple

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)
  • Le code ci-dessus appelletrain_test_splitla fonction, et affecte le résultat à quatre variables :X_train、X_test、y_trainety_test。
  • Xetysont passés àtrain_test_splitles paramètres de la fonction, qui représentent respectivement le jeu de données de caractéristiques et la variable cible (étiquettes). HabituellementXest un tableau à deux dimensions,yest un tableau à une dimension.
  • test_size=0.3Le paramètre spécifie que la taille de l'ensemble de test doit être de 30% du jeu de données d'origine. Cela signifie que 70% des données seront utilisées comme ensemble d'entraînement, et les 30% restants comme ensemble de test.
  • random_state=42Le paramètre est une graine aléatoire, utilisée pour garantir que le même résultat est obtenu à chaque fois que le jeu de données est divisé. Ceci est très utile dans les expériences et la validation de modèle, car cela garantit la reproductibilité des résultats.

2. Modèles et algorithmes

Apprentissage supervisé et non supervisé

Dans scikit-learn, les modèles d'apprentissage automatique se divisent globalement en deux grandes catégories :Apprentissage superviséetApprentissage non supervisé。

Apprentissage supervisé :Dans l'apprentissage supervisé, le modèle apprend à partir de données étiquetées pendant l'entraînement ; ces étiquettes sont les résultats que nous voulons que le modèle prédise.

Les tâches courantes d'apprentissage supervisé comprennent la classification et la régression.

  • Classification: Attribuer des points de données à des catégories prédéfinies. Par exemple, déterminer si un courriel est un spam ou non.
  • Régression: Prédire des sorties de valeurs continues. Par exemple, prédire les prix des maisons, les températures, etc.

Utilisation d'un arbre de décision pour une tâche de classification :

Exemple

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

Apprentissage non supervisé :L'apprentissage non supervisé désigne l'apprentissage sans données étiquetées ; le modèle apprend uniquement à partir des caractéristiques des données d'entrée elles-mêmes.

Les tâches courantes d'apprentissage non supervisé incluent le clustering et la réduction de dimensionnalité.

  • Clustering: Regrouper les données de sorte que les données d'un même groupe soient similaires. Les algorithmes de clustering courants incluentK-Means、DBSCANetc.
  • Réduction de dimensionnalité: Réduire le nombre de caractéristiques dans les données, souvent utilisée pour la compression de données ou la visualisation. Les méthodes courantes de réduction de dimensionnalité incluentPCA(Analyse en composantes principales) ett-SNE(t-distributed Stochastic Neighbor Embedding), etc.

Utilisation du clustering K-Means :

Exemple

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

Prétraitement et ingénierie des caractéristiques

Avant d'utiliser scikit-learn pour l'apprentissage automatique, il est généralement nécessaire de prétraiter les données. Cela inclut les tâches courantes suivantes :

1. Standardisation :Unifier l'échelle des caractéristiques afin que chaque caractéristique ait une moyenne nulle et une variance unitaire.

Exemple

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

2. Normalisation :Mettre à l'échelle les valeurs des caractéristiques dans un intervalle fixe (généralement de 0 à 1).

Exemple

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

3. Encodage des variables catégorielles :Convertir les données catégorielles en données numériques (par exemple, encodage one-hot).


3. Évaluation et validation du modèle

Après avoir entraîné un modèle d'apprentissage automatique, ses performances doivent être évaluées pour garantir sa capacité de généralisation.

scikit-learn fournit quelques outils pour évaluer les performances.

Validation croisée

La validation croisée est une méthode courante d'évaluation de modèle, en particulier lorsque la quantité de données est limitée.

En divisant les données en plusieurs sous-ensembles, en utilisant à chaque fois un sous-ensemble comme ensemble de validation et le reste comme ensemble d'entraînement, le modèle est entraîné et évalué de manière répétée plusieurs fois, et enfin la performance moyenne du modèle est calculée.

Exemple

from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)  # validation croisée à 5 plis
print("Scores de validation croisée :", scores)

Métriques d'évaluation courantes

Métriques d'évaluation pour les tâches de classification :

  • Exactitude: La proportion d'échantillons correctement prédits parmi tous les échantillons.
  • Précision: La proportion de classes positives réelles parmi les prédictions de classe positive.
  • Rappel: La proportion d'échantillons correctement prédits parmi les classes positives réelles.
  • Score F1: La moyenne harmonique de la précision et du rappel.

Exemple

from sklearn.metrics import accuracy_score, classification_report
print("Exactitude :", accuracy_score(y_test, y_pred))
print("Rapport de classification :\n", classification_report(y_test, y_pred))

Métriques d'évaluation pour les tâches de régression :

  • Erreur quadratique moyenne (MSE): La moyenne des différences au carré entre les valeurs prédites et les valeurs réelles.
  • Coefficient de détermination (R²): Mesure la capacité du modèle à expliquer la variabilité des données.

Exemple

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. Sélection et réglage du modèle

Recherche par grille

La recherche par grilleest une méthode de réglage des hyperparamètres couramment utilisée qui trouve la meilleure combinaison d'hyperparamètres en parcourant toutes les combinaisons de paramètres possibles.

Exemple

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("Meilleurs paramètres :", grid_search.best_params_)

Recherche aléatoire

La recherche aléatoireest une méthode qui recherche les hyperparamètres optimaux en sélectionnant aléatoirement des combinaisons d'hyperparamètres. Elle est plus efficace que la recherche par grille.

Exemple

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_)
Autres extensions