Menu
CoddyTech

L’ACP avant un modèle

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 32 sur 51.

Moins de caractéristiques rendent un modèle plus rapide et lui donnent moins de bruit à poursuivre. PCA peut s’intégrer dans un pipeline, juste avant le modèle :

for n in [2, 5, 10, 20, 40, 64]:
    model = make_pipeline(PCA(n_components=n), KNeighborsClassifier())
    print(n, f"{cross_val_score(model, X, y, cv=5).mean():.3f}")

Sur les chiffres :

Une courbe de précision de k-NN sur les chiffres selon le nombre de composantes conservées : 0.595 avec 2, 0.884 avec 5, 0.940 avec 10, puis presque stable, 0.958 avec 20 jusqu’à 0.963 avec les 64

L’exactitude plafonne autour de 20 : les 44 autres directions n’apportent presque rien. Chaque pli ajuste PCA sur ses propres lignes d’entraînement, donc aucune fuite de données ne se produit.

Des unités mixtes ? Placez StandardScaler() en premier, comme toujours.

challenge icon

Défi

Moyen

Un laboratoire d’huile d’olive classe les huiles selon la lumière qu’elles absorbent à 36 longueurs d’onde, ainsi que selon 4 tests de laboratoire. Quel est le plus petit nombre de caractéristiques nécessaire ? Le programme lit une marge.

  1. Pour chaque n dans sizes, effectue une validation croisée (5 plis) d’un pipeline : normaliseur, PCA avec n composantes, LogisticRegression(max_iter=1000). Affiche chaque score.
  2. Affiche le plus petit nombre de composantes dont le score est dans la marge par rapport au meilleur.

Pour un autre laboratoire et 0.05 :

2 components: 0.817
3 components: 0.833
4 components: 0.889
5 components: 0.928
10 components: 0.928
20 components: 0.917
40 components: 0.922
Fewest within 0.05 of the best: 4 components

Essayez vous-même

import pandas as pd
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score

# 180 huiles d’olive : lumière absorbée à 36 longueurs d’onde, 4 tests en laboratoire et la catégorie
oils = pd.read_csv("oils.csv")
X = oils.drop(columns=["oil", "grade"])
y = oils["grade"]
sizes = [2, 3, 4, 5, 10, 20, 40]
slack = float(input())

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne