[PYTHON] Besoin de random_state pour train_test_split dans sklearn

Qu'est-ce que train_test_split?

Train_test_split est une fonction couramment utilisée dans l'apprentissage automatique. C'est une fonction qui divise le tableau de numpy ou le dataframe des pandas et divise facilement les données de train et les données de test.

Qu'est-ce que random_state

random_state est une valeur qui rend l'ordre dans lequel train_test_split divise les données au hasard, et le corrige pour que la même division aléatoire soit renvoyée quel que soit le nombre de fois qu'elle est exécutée. Si vous ne mettez pas random_state dans l'argument avec cette fonction, les données du train changeront à chaque fois que vous l'exécuterez, rendant le réglage des hyper paramètres sans signification, ou les données du train lors de la création de plusieurs modèles et de la prise d'une décision majoritaire (méthode d'ensemble) C'est une histoire que différentes choses mènent au surapprentissage.

Tout d'abord, créez une base de données pour l'expérience.

import pandas as pd
from sklearn.model_selection import train_test_split
df=pd.DataFrame({"a":[1,2,3,4,5],"b":[1,2,3,4,5]})
print(df)
   a  b
0  1  1
1  2  2
2  3  3
3  4  4
4  5  5

Puis train_test_split. Vous pouvez spécifier le ratio en mettant float dans train_size ou test_size, et le nombre en mettant int, mais c'est déroutant, il est donc préférable de spécifier explicitement à la fois train_size = 4 et test_size = 1. pense.

train_x, test_x = train_test_split(df, train_size=4, test_size=1)
print(train_x)
print(test_x)
   a  b
1  2  2
2  3  3
0  1  1
3  4  4

Code sans random_state

Ce code renvoie à chaque fois des données de train et de test différentes.

for i in range(3):
    train_x, test_x = train_test_split(df, train_size=4, test_size=1)
    print()
    print(i,"Temps")
    print(train_x)
    print(test_x)
0ème fois
   a  b
2  3  3
3  4  4
4  5  5
0  1  1
   a  b
1  2  2

Première fois
   a  b
2  3  3
4  5  5
1  2  2
0  1  1
   a  b
3  4  4

Deuxième fois
   a  b
4  5  5
0  1  1
1  2  2
3  4  4
   a  b
2  3  3

Par exemple, si vous essayez de créer trois modèles différents à partir de ces trois données et de voter à la majorité (méthode d'ensemble) asdfasdf.png De cette manière, les données de train apprises pour chaque modèle sont différentes, et comme le modèle n'a pas de parties inconnues, on s'attend à ce qu'une précision élevée soit obtenue au moment de la décision majoritaire du test. Random_state est nécessaire pour éviter ce surentraînement.

Code avec random_state

for i in range(3):
    train_x, test_x= train_test_split(df, train_size=4, test_size=1, random_state=42)
    print()
    print(i,"Temps")
    print(train_x)
    print(test_x)
0ème fois
   a  b
4  5  5
2  3  3
0  1  1
3  4  4
   a  b
1  2  2

Première fois
   a  b
4  5  5
2  3  3
0  1  1
3  4  4
   a  b
1  2  2

Deuxième fois
   a  b
4  5  5
2  3  3
0  1  1
3  4  4
   a  b
1  2  2

Comme test_x est fixé à [2 2], la même division aléatoire est renvoyée quel que soit le nombre de fois qu'elle est exécutée, ainsi des données inconnues peuvent être sécurisées pendant l'entraînement et le surentraînement peut être évité.

Recommended Posts

Besoin de random_state pour train_test_split dans sklearn
Besoin de __name__ == "__main__" comme indiqué dans les problèmes d'importation circulaire
Rechercher des chaînes dans les fichiers
Techniques de tri en Python
À propos de "for _ in range ():" de python
À propos de la nécessité d'une première barre oblique dans le nom de l'abonné et le nom de l'éditeur