Valutazione del Modello
Quando si costruisce un modello per le previsioni, è fondamentale comprendere quanto bene il modello si comporta prima di effettuare qualsiasi previsione reale.
Valutare un modello significa analizzare le sue prestazioni nel fare previsioni. Per questo motivo, il metodo .score()
è importante.
Tuttavia, valutare il modello utilizzando i dati del set di addestramento può produrre risultati inaffidabili perché un modello tende a comportarsi meglio sui dati su cui è stato addestrato rispetto a dati nuovi e mai visti prima. Pertanto, è fondamentale valutare il modello su dati che non ha mai visto per comprendere realmente le sue prestazioni.
In termini più formali, desideriamo un modello che generalizzi bene.
Possiamo ottenere questo risultato suddividendo casualmente i dati in un set di addestramento e un set di test.
Ora possiamo addestrare il modello sul set di addestramento e valutarne le prestazioni sul set di test.
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
Per suddividere i dati casualmente, possiamo utilizzare la funzione train_test_split()
dal modulo sklearn.model_selection
.
Tipicamente, per un set di test, si utilizza 25-40% dei dati quando il dataset è piccolo, 10-30% per un dataset di medie dimensioni e meno del 10% per dataset di grandi dimensioni.
Nel nostro esempio, con solo 342 istanze — classificato come un dataset piccolo — assegneremo 33% dei dati al set di test.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Ci riferiamo al set di addestramento come X_train
e y_train
, e al set di test come X_test
e y_test
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Train-test split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) # Initialize and train a model knn5 = KNeighborsClassifier().fit(X_train, y_train) # Trained 5 neighbors model knn1 = KNeighborsClassifier(n_neighbors=1).fit(X_train, y_train) # Trained 1 neighbor model # Print the scores of both models print('5 Neighbors score:',knn5.score(X_test, y_test)) print('1 Neighbor score:',knn1.score(X_test, y_test))
Nota che ora utilizziamo il set di addestramento in .fit(X_train, y_train)
e il set di test in .score(X_test, y_test)
.
Poiché train_test_split()
suddivide il dataset casualmente, ogni volta che esegui il codice, ci sono set di addestramento e test diversi. Puoi eseguirlo più volte e vedere che i punteggi variano. Questi punteggi diventerebbero più stabili se la dimensione del dataset aumentasse.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
Valutazione del Modello
Scorri per mostrare il menu
Quando si costruisce un modello per le previsioni, è fondamentale comprendere quanto bene il modello si comporta prima di effettuare qualsiasi previsione reale.
Valutare un modello significa analizzare le sue prestazioni nel fare previsioni. Per questo motivo, il metodo .score()
è importante.
Tuttavia, valutare il modello utilizzando i dati del set di addestramento può produrre risultati inaffidabili perché un modello tende a comportarsi meglio sui dati su cui è stato addestrato rispetto a dati nuovi e mai visti prima. Pertanto, è fondamentale valutare il modello su dati che non ha mai visto per comprendere realmente le sue prestazioni.
In termini più formali, desideriamo un modello che generalizzi bene.
Possiamo ottenere questo risultato suddividendo casualmente i dati in un set di addestramento e un set di test.
Ora possiamo addestrare il modello sul set di addestramento e valutarne le prestazioni sul set di test.
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
Per suddividere i dati casualmente, possiamo utilizzare la funzione train_test_split()
dal modulo sklearn.model_selection
.
Tipicamente, per un set di test, si utilizza 25-40% dei dati quando il dataset è piccolo, 10-30% per un dataset di medie dimensioni e meno del 10% per dataset di grandi dimensioni.
Nel nostro esempio, con solo 342 istanze — classificato come un dataset piccolo — assegneremo 33% dei dati al set di test.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
Ci riferiamo al set di addestramento come X_train
e y_train
, e al set di test come X_test
e y_test
.
123456789101112131415import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split df = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/a65bbc96-309e-4df9-a790-a1eb8c815a1c/penguins_pipelined.csv') # Assign X, y variables (X is already preprocessed and y is already encoded) X, y = df.drop('species', axis=1), df['species'] # Train-test split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33) # Initialize and train a model knn5 = KNeighborsClassifier().fit(X_train, y_train) # Trained 5 neighbors model knn1 = KNeighborsClassifier(n_neighbors=1).fit(X_train, y_train) # Trained 1 neighbor model # Print the scores of both models print('5 Neighbors score:',knn5.score(X_test, y_test)) print('1 Neighbor score:',knn1.score(X_test, y_test))
Nota che ora utilizziamo il set di addestramento in .fit(X_train, y_train)
e il set di test in .score(X_test, y_test)
.
Poiché train_test_split()
suddivide il dataset casualmente, ogni volta che esegui il codice, ci sono set di addestramento e test diversi. Puoi eseguirlo più volte e vedere che i punteggi variano. Questi punteggi diventerebbero più stabili se la dimensione del dataset aumentasse.
Grazie per i tuoi commenti!