Ottimizza il migliore
Fa parte della sezione Apprendimento supervisionato del percorso Machine Learning di Coddy. Lezione 53 di 58.
k-NN ha vinto con il valore predefinito di 5 vicini. Un altro valore di k classificherebbe meglio i pinguini? Una ricerca a griglia valuta ogni valore di k che elenchi con la convalida incrociata, come in questo esempio per le scansioni tumorali:
Come nella regolazione di una pipeline, k è denominato in base al suo passaggio:
{"kneighborsclassifier__n_neighbors": [3, 5, 7]}Un miglioramento inferiore alla deviazione standard dei fold potrebbe essere dovuto alla fortuna. Anche l'ottimizzazione usa solo le righe di training.
Sfida
MedioLa tua pipeline k-NN è pipe e default contiene la sua accuratezza CV con k = 5. Il programma legge i valori di k da provare in ks.
- Esegui una ricerca a griglia con quei valori e 5 fold sulle righe di addestramento.
- Stampa il valore migliore di k e la relativa accuratezza CV, con 3 cifre decimali.
- Stampa il miglioramento rispetto a k = 5, con 3 cifre decimali.
Per un'altra colonia e la griglia 3, 5, 9:
Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009Poi prova solo valori grandi, come 21 e 27. La regolazione migliora sempre i risultati?
Provalo tu
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier
# La colonia di Incontra i pinguini, le sue caratteristiche e la sua etichetta
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)
# Da Prepara i dati: i due percorsi
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Da Scegli un modello: il vincitore, k-NN con il valore predefinito k = 5
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()
# I valori di k da provare
n = int(input())
ks = []
for i in range(n):
ks.append(int(input()))
# Scrivi il tuo codice qui sotto
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Apprendimento supervisionato
1Il tuo primo modello
Imparare dagli esempiInsiemi di addestramento e testAdattare e prevedereValutare un modelloRiepilogo: Ordinatore di semi4Regressione logistica
Previsioni sì o noLa soglia decisionaleI pesi come evidenzePiù classiRiepilogo: filtro antispam2Vicini più prossimi
Come decide k-NNScegliere kConfini decisionaliNormalizzare le scale per i viciniRiepilogo: vicini del vino5Misurare i classificatori
La matrice di confusionePrecisione e richiamoIl punteggio F1Classi sbilanciateCurve ROCRiepilogo: test di screening8Convalida incrociata
Validazione K-foldConfronto equo tra modelliRicerca a grigliaRiepilogo: riparazioni di skateboard11Progetto: specie di pinguini
Incontra i pinguiniPrepara i datiScegli un modelloOttimizza il miglioreDistribuisci il modello3Regressione lineare
Prevedere numeriPiù caratteristicheMisurare gli erroriGrafici dei residuiRiepilogo: noleggio di biciclette6Alberi decisionali
Gli alberi fanno domandeLeggere un alberoProfondità dell’alberoImportanza delle caratteristicheRiepilogo: decisioni sui prestitiEsercitati da solo: Compilatore Python online