Perché una vasta scelta di K riduce il mio punteggio di convalida incrociata?


11

Giocando con il Boston Housing Dataset e RandomForestRegressor(con parametri di default) in scikit-learn, ho notato qualcosa di strano: il punteggio medio di validazione incrociata è diminuito quando ho aumentato il numero di pieghe oltre 10. La mia strategia di validazione incrociata era la seguente:

cv_met = ShuffleSplit(n_splits=k, test_size=1/k)
scores = cross_val_score(est, X, y, cv=cv_met)

... dove num_cvsera vario. Ho impostato test_sizeper 1/num_cvsrispecchiare il comportamento di suddivisione del treno / test di k-fold CV. Fondamentalmente, volevo qualcosa di simile a k-fold CV, ma avevo anche bisogno di casualità (quindi ShuffleSplit).

Questo processo è stato ripetuto più volte e sono stati quindi tracciati i punteggi medi e le deviazioni standard.

Area del cerchio ~ K nella convalida incrociata K-fold

(Notare che la dimensione di kè indicata dall'area del cerchio; la deviazione standard è sull'asse Y.)

Coerentemente, l'aumento k(da 2 a 44) porterebbe a un breve aumento del punteggio, seguito da una costante diminuzione man mano che kaumenta ulteriormente (oltre ~ 10 volte)! Semmai, mi aspetto che più dati di allenamento porteranno ad un lieve aumento del punteggio!

Aggiornare

La modifica dei criteri di punteggio per indicare un errore assoluto comporta un comportamento che mi aspetto: il punteggio migliora con un numero maggiore di pieghe nel CV K-fold, anziché avvicinarsi a 0 (come per impostazione predefinita, ' r2 '). Resta da chiedersi perché la metrica del punteggio predefinito si traduca in scarse prestazioni su entrambe le metriche medie e STD per un numero crescente di pieghe.


Qualche record duplicato nelle tue pieghe? Ciò potrebbe essere dovuto a un eccesso di adattamento .
Ha QUIT - Anony-Mousse il

1
@ Anony-Mousse No, poiché il set di dati di Boston Housing non ha record duplicati e il campionamento di ShuffleSplit non provoca record duplicati.
Brian Bien,

4
Inoltre, migliora la tua trama. Utilizzare le barre di errore per mostrare media, + - stddev e min / max. Metti k sull'altro asse.
Ha QUIT - Anony-Mousse il

1
Non credo che ulteriori esempi di formazione aumentino la possibilità di un eccessivo adattamento. Ho tracciato una curva di apprendimento con questo set di dati, usando di nuovo ShuffleSplit (n_splits = 300 con varie dimensioni di test) e ho visto una precisione sempre maggiore quando sono stati resi disponibili altri esempi di allenamento.
Brian Bien,

1
scusa, hai ragione, più è meglio e meglio è 1. Ma non hai questo problema se usi un errore medio al quadrato o assoluto. Quindi deve fare qualcosa con il termine di errore
rep_ho

Risposte:


1

il punteggio di r ^ 2 non è definito se applicato a un singolo campione (ad es. CV lasciato in sospeso).

r ^ 2 non è buono per la valutazione di set di test di piccole dimensioni: quando viene utilizzato per valutare un set di test sufficientemente piccolo, il punteggio può essere molto negativo nonostante le buone previsioni.

Dato un singolo campione, una buona previsione per un determinato dominio può apparire terribile:

from sklearn.metrics import r2_score
true = [1]
predicted = [1.01] # prediction of a single value, off by 1%
print(r2_score(true, predicted))
# 0.0

Aumenta le dimensioni del set di test (mantenendo la stessa accuratezza delle previsioni) e improvvisamente il punteggio r ^ 2 appare quasi perfetto:

true = [1, 2, 3]
predicted = [1.01, 2.02, 3.03]
print(r2_score(true, predicted))
# 0.9993

Portato all'altro estremo, se la dimensione del test è di 2 campioni e stiamo valutando 2 campioni che sono vicini l'uno all'altro per caso, ciò avrà un impatto sostanziale sul punteggio r ^ 2, anche se le previsioni sono abbastanza buone :

true = [20.2, 20.1] # actual target values from the Boston Housing dataset
predicted = [19, 21]
print(r2_score(true, predicted))
# -449.0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.