logo

Sådan opdeles datasættet med scikit-learns train_test_split() funktion

I denne artikel vil vi diskutere, hvordan man opdeler et datasæt ved hjælp af scikit-learns' train_test_split().

sklearn.model_selection.train_test_split() funktion:

Train_test_split() metoden bruges til at opdele vores data i tog- og testsæt. Først skal vi opdele vores data i funktioner (X) og etiketter (y). Datarammen bliver opdelt i X_train, X_test, y_train og y_test. X_train og y_train sæt bruges til træning og tilpasning af modellen. X_test- og y_test-sættene bruges til at teste modellen, hvis den forudsiger de rigtige output/etiketter. vi kan eksplicit teste størrelsen af ​​toget og testsættene. Det foreslås at holde vores togsæt større end testsættene.



    Togsæt: Træningsdatasættet er et sæt data, der blev brugt til at passe til modellen. Datasættet, som modellen er trænet på. Disse data ses og læres af modellen. Testsæt: Testdatasættet er en delmængde af træningsdatasættet, der bruges til at give en nøjagtig evaluering af en endelig modeltilpasning. valideringssæt: Et valideringsdatasæt er en stikprøve af data fra din models træningssæt, der bruges til at estimere modellens ydeevne, mens modellens hyperparametre justeres. undertilpasning: En datamodel, der er undertilpasset, har en høj fejlrate på både træningssættet og uobserverede data, fordi den ikke er i stand til effektivt at repræsentere forholdet mellem input- og outputvariablerne. overfitting: når en statistisk model matcher dens træningsdata nøjagtigt, men algoritmens mål går tabt, fordi den ikke er i stand til at udføre nøjagtigt mod usete data, kaldes overfitting

Syntaks: sklearn.model_selection.train_test_split(*arrays, test_size=Ingen, train_size=Ingen, random_state=Ingen, shuffle=True, stratify=Ingen

Parametre:

    *arrays: sekvens af indekserbare. Lister, numpy arrays, scipy-sparse matricer og panda-datarammer er alle gyldige input. test_size: int eller float, som standard Ingen. Hvis den flyder, skal den være mellem 0,0 og 1,0 og repræsentere procentdelen af ​​datasættet, der skal testes opdeling. Hvis int bruges, refererer det til det samlede antal testprøver. Hvis værdien er Ingen, bruges komplementet til togstørrelsen. Den indstilles til 0,25, hvis togstørrelsen også er Ingen. train_size: int eller float, som standard Ingen. random_state: int, som standard Ingen. Styrer, hvordan data blandes, før opdelingen implementeres. For at gentage output på tværs af flere funktionskald skal du sende en int. shuffle: boolesk objekt , som standard True. Hvorvidt dataene skal blandes før opdeling. Stratify skal være Ingen, hvis shuffle=False. stratify: array-lignende objekt , som standard er det Ingen . Hvis Ingen er valgt, stratificeres dataene ved at bruge disse som klasseetiketter.

Vender tilbage:



opdeling: Tog-test opdelingen af ​​input er repræsenteret som en liste.

Trin til at opdele datasættet:

Trin 1: Importer de nødvendige pakker eller moduler:

I dette trin importerer vi de nødvendige pakker eller moduler til arbejdspythonmiljøet.

Python3




java streng til int



# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split>

>

>

Trin 2: Importer datarammen/datasættet:

Her indlæser vi CSV'en ved hjælp af pd.read_csv()-metoden fra pandas og får formen på datasættet ved hjælp af shape()-funktionen.

CSV brugt:

Python3




# importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)>

>

>

Produktion:

(13, 3)>

Trin 3: Hent X- og Y-funktionsvariabler:

Her tildeler vi X- og Y-variablen, hvor X-funktionsvariablen har uafhængige variabler og y-funktionsvariablen har en afhængig variabel.

Python3




X>=> df[>'area'>]> y>=>df[>'prices'>]>

>

>

Trin 4: Brug togtestopdelingsklassen til at opdele data i tog- og testsæt:

Her bruges train_test_split()-klassen fra sklearn.model_selection til at opdele vores data i tog- og testsæt, hvor featurevariabler er givet som input i metoden. test_size bestemmer den del af dataene, der vil gå i testsæt, og en tilfældig tilstand bruges til datareproducerbarhed.

Python3




# using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)>

>

>

Eksempel:

I dette eksempel importeres filen 'predictions.csv'. df.shape attribut bruges til at hente formen på datarammen. Formen på datarammen er (13,3). Funktionskolonnerne er taget i X-variablen, og udfaldskolonnen er taget i y-variablen. X- og y-variabler overføres i train_test_split()-metoden for at opdele datarammen i tog- og testsæt. Parameteren tilfældig tilstand bruges til datareproducerbarhed. test_size er angivet som 0,25, hvilket betyder, at 25% af dataene går ind i testsættene. 4 ud af 13 rækker i datarammen går ind i testsættene. 75 % af data går ind i togsættene, hvilket er 9 rækker ud af 13 rækker. Togsættene bruges til at tilpasse og træne maskinlæringsmodellen. Testsættene bruges til evaluering.

CSV brugt:

Python3




# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split> # importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)> # head of the data> print>(>'Head of the dataframe : '>)> print>(df.head())> print>(df.columns)> X>=> df[>'area'>]> y>=>df[>'prices'>]> # using the train test split function> X_train, X_test, y_train, y_test>=> train_test_split(> >X,y , random_state>=>104>,test_size>=>0.25>, shuffle>=>True>)> # printing out train and test sets> print>(>'X_train : '>)> print>(X_train.head())> print>(X_train.shape)> print>('')> print>(>'X_test : '>)> print>(X_test.head())> print>(X_test.shape)> print>('')> print>(>'y_train : '>)> print>(y_train.head())> print>(y_train.shape)> print>('')> print>(>'y_test : '>)> print>(y_test.head())> print>(y_test.shape)>

>

>

Produktion:

(13, 3) Head of the dataframe : Unnamed: 0 area prices 0 0 1000 316404.109589 1 1 1500 384297.945205 2 2 2300 492928.082192 3 3 3540 661304.794521 4 4 4120 740061.643836 Index(['Unnamed: 0', 'area', 'prices'], dtype='object') X_train : 3 3540 7 3460 4 4120 0 1000 8 4750 Name: area, dtype: int64 (9,) X_test : 12 7100 2 2300 11 8600 10 9000 Name: area, dtype: int64 (4,) y_train : 3 661304.794521 7 650441.780822 4 740061.643836 0 316404.109589 8 825607.876712 Name: prices, dtype: float64 (9,) y_test : 12 1.144709e+06 2 4.929281e+05 11 1.348390e+06 10 1.402705e+06 Name: prices, dtype: float64 (4,)>

Eksempel:

I dette eksempel udføres følgende trin:

  • De nødvendige pakker importeres.
  • Advertising.csv-datasættet indlæses og renses, og nulværdier slettes.
  • feature og target arrays oprettes (X andy).
  • De oprettede arrays er opdelt i tog- og testsæt. 30 % af datasættet går ind i testsættet, hvilket betyder, at 70 % data er et togsæt.
  • Der oprettes et standardskaleringsobjekt.
  • X_train er passet ind i scaleren.
  • X_train og X_test transformeres ved hjælp af transform() metoden.
  • Der skabes en simpel lineær regressionsmodel
  • Togsæt passer i modellen.
  • predict()-metoden bruges til at udføre forudsigelser på X_test-sættet.
  • mean_squared_error() metric bruges til at evaluere modellen.

For at se og downloade den CSV-fil, der bruges i dette eksempel, skal du klikke her .

Python3




# import packages> import> pandas as pd> import> numpy as np> from> sklearn.model_selection>import> train_test_split> from> sklearn.preprocessing>import> StandardScaler> from> sklearn.linear_model>import> LinearRegression> from> sklearn.metrics>import> mean_squared_error> df>=> pd.read_csv(>'Advertising.csv'>)> # dropping rows which have null values> df.dropna(inplace>=>True>,axis>=>0>)> y>=> df[>'sales'>]> X>=> df.drop(>'sales'>,axis>=>1>)> # splitting the dataframe into train and test sets> X_train,X_test,y_train,y_test>=> train_test_split(> >X,y,test_size>=>0.3>,random_state>=>101>)> scaler>=> StandardScaler()> scaler.fit(X_train)> X_train>=> scaler.transform(X_train)> X_test>=> scaler.transform(X_test)> model>=> LinearRegression().fit(X_train,y_train)> y_pred>=> model.predict(X_test)> print>(y_pred)> print>(mean_squared_error(y_test,y_pred))>

>

>

Produktion:

array([19.82000933, 14.23636718, 12.80417236, 7.75461569, 8.31672266,

15.4001915, 11.6590983, 15.22650923, 15.53524916, 19.46415132,

17.21364106, 16.69603229, 16.46449309, 10.15345178, 13.44695953,

24.71946196, 18.67190453, 15.85505154, 14.45450049, 9.91684409,

10.41647177, 4.61335238, 17.41531451, 17.31014955, 21.72288151,

5.87934089, 11.29101265, 17.88733657, 21.04225992, 12.32251227,

14.4099317, 15.05829814, 10.2105313, 7.28532072, 12.66133397,

23.25847491, 18.87101505, 4.55545854, 19.79603707, 9.21203026,

10.24668718, 8.96989469, 13.33515217, 20.69532628, 12.17013119,

21.69572633, 16.7346457, 22.16358256, 5.34163764, 20.43470231,

7.58252563, 23.38775769, 10.2270323, 12.33473902, 24.10480458,

9.88919804, 21.7781076 ])

2,7506859249500466

Eksempel:

I dette eksempel vil vi bruge klassificeringsmodellen K-nærmeste naboer.

I dette eksempel udføres følgende trin:

  • De nødvendige pakker importeres.
  • iris-data indlæses fra sklearn.datasets.
  • feature og target arrays oprettes (X andy).
  • De oprettede arrays er opdelt i tog- og testsæt. 30 % af datasættet går ind i testsættet, hvilket betyder, at 70 % data er et togsæt.
  • En grundlæggende Knn-model oprettes ved hjælp af klassen KNeighborsClassifier.
  • Togsæt passer i knn modellen.
  • predict()-metoden bruges til at udføre forudsigelser på X_test-sættet.

Python3




# Import packages> from> sklearn.neighbors>import> KNeighborsClassifier> from> sklearn.model_selection>import> train_test_split> from> sklearn.datasets>import> load_iris> > # Load the data> irisData>=> load_iris()> > # Create feature and target arrays> X>=> irisData.data> y>=> irisData.target> > # Split data into train and test sets> X_train, X_test, y_train, y_test>=> train_test_split(> >X, y, test_size>=> 0.2>, random_state>=>42>)> > knn>=> KNeighborsClassifier(n_neighbors>=>1>)> > knn.fit(X_train, y_train)> > # predicting on the X_test data set> print>(knn.predict(X_test))>

>

>

Produktion:

[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]