In diesem Artikel besprechen wir, wie man einen Datensatz mit train_test_split() von scikit-learns aufteilt.
sklearn.model_selection.train_test_split() Funktion:
Die Methode train_test_split() wird verwendet, um unsere Daten in Zug- und Testsätze aufzuteilen. Zuerst müssen wir unsere Daten in Features (X) und Labels (y) unterteilen. Der Datenrahmen wird in X_train, X_test, y_train und y_test unterteilt. X_train- und y_train-Sets werden zum Training und Anpassen des Modells verwendet. Die X_test- und y_test-Sets werden zum Testen des Modells verwendet, ob es die richtigen Ausgaben/Beschriftungen vorhersagt. Wir können die Größe des Zuges und der Testsätze explizit testen. Es wird empfohlen, unsere Zugsets größer zu halten als die Testsets.
- Trainingssatz: Der Trainingsdatensatz ist ein Datensatz, der zur Anpassung des Modells verwendet wurde. Der Datensatz, auf dem das Modell trainiert wird. Diese Daten werden vom Modell gesehen und gelernt. Testsatz: Der Testdatensatz ist eine Teilmenge des Trainingsdatensatzes, die verwendet wird, um eine genaue Bewertung der endgültigen Modellanpassung zu ermöglichen. Validierungssatz: Ein Validierungsdatensatz ist eine Stichprobe von Daten aus dem Trainingssatz Ihres Modells, die zur Schätzung der Modellleistung bei gleichzeitiger Optimierung der Hyperparameter des Modells verwendet wird. Unteranpassung: Ein unterangepasstes Datenmodell weist eine hohe Fehlerrate sowohl beim Trainingssatz als auch bei nicht beobachteten Daten auf, da es die Beziehung zwischen den Eingabe- und Ausgabevariablen nicht effektiv darstellen kann. Überanpassung: Wenn ein statistisches Modell genau mit seinen Trainingsdaten übereinstimmt, das Ziel des Algorithmus jedoch verloren geht, weil er nicht in der Lage ist, anhand unsichtbarer Daten genau zu arbeiten, spricht man von Überanpassung
Syntax: sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None
Parameter:
*Arrays: Folge von Indexables. Listen, Numpy-Arrays, Scipy-Sparse-Matrizen und Pandas-Datenrahmen sind allesamt gültige Eingaben. test_size: int oder float, standardmäßig Keine. Bei Float sollte der Wert zwischen 0,0 und 1,0 liegen und den Prozentsatz des zu testenden Datensatzes darstellen. Wenn int verwendet wird, bezieht es sich auf die Gesamtzahl der Testproben. Wenn der Wert None ist, wird das Komplement der Zuggröße verwendet. Der Wert wird auf 0,25 gesetzt, wenn die Zuggröße ebenfalls „Keine“ ist. train_size: int oder float, standardmäßig Keine. random_state: int, standardmäßig Keine. Steuert, wie die Daten gemischt werden, bevor die Aufteilung implementiert wird. Für eine wiederholbare Ausgabe über mehrere Funktionsaufrufe hinweg übergeben Sie ein int. shuffle: boolesches Objekt, standardmäßig True. Ob die Daten vor der Aufteilung gemischt werden sollen oder nicht. Stratify muss None sein, wenn shuffle=False. stratify: Array-ähnliches Objekt, standardmäßig ist es None. Wenn „Keine“ ausgewählt ist, werden die Daten geschichtet, wobei diese als Klassenbezeichnungen verwendet werden.
Kehrt zurück:
Aufteilung: Die Zugtest-Aufteilung der Eingaben wird als Liste dargestellt.
Schritte zum Teilen des Datensatzes:
Schritt 1: Importieren Sie die erforderlichen Pakete oder Module:
In diesem Schritt importieren wir die erforderlichen Pakete oder Module in die funktionierende Python-Umgebung.
Python3
# import packages> import> numpy as np> import> pandas as pd> from> sklearn.model_selection>import> train_test_split> |
>
>
Schritt 2: Importieren Sie den Datenrahmen/Datensatz:
Hier laden wir die CSV mit der Methode pd.read_csv() von Pandas und erhalten die Form des Datensatzes mit der Funktion shape().
Verwendete CSV:
Python3
# importing data> df>=> pd.read_csv(>'prediction.csv'>)> print>(df.shape)> |
>
>
Ausgabe:
(13, 3)>
Schritt 3: X- und Y-Feature-Variablen abrufen:
Hier weisen wir die X- und die Y-Variable zu, wobei die X-Merkmalsvariable unabhängige Variablen und die Y-Merkmalsvariable eine abhängige Variable hat.
Python3
X>=> df[>'area'>]> y>=>df[>'prices'>]> |
>
Linux-Ordner umbenennen
>
Schritt 4: Verwenden Sie die Zugtest-Split-Klasse, um Daten in Zug- und Testsätze aufzuteilen:
Hier wird die Klasse train_test_split() von sklearn.model_selection verwendet, um unsere Daten in Zug- und Testsätze aufzuteilen, wobei Feature-Variablen als Eingabe in der Methode angegeben werden. test_size bestimmt den Teil der Daten, der in Testsätze geht, und ein zufälliger Zustand wird für die Datenreproduzierbarkeit verwendet.
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>)> |
>
>
Beispiel:
In diesem Beispiel wird die Datei „predictions.csv“ importiert. Das df.shape-Attribut wird verwendet, um die Form des Datenrahmens abzurufen. Die Form des Datenrahmens ist (13,3). Die Merkmalsspalten werden in der X-Variablen und die Ergebnisspalte in der Y-Variablen übernommen. X- und Y-Variablen werden in der Methode train_test_split() übergeben, um den Datenrahmen in Zug- und Testsätze aufzuteilen. Der Zufallszustandsparameter wird zur Datenreproduzierbarkeit verwendet. test_size wird mit 0,25 angegeben, was bedeutet, dass 25 % der Daten in die Testsätze gehen. 4 von 13 Zeilen im Datenrahmen gehen in die Testsätze. 75 % der Daten gehen in die Zugsätze ein, also 9 von 13 Zeilen. Die Zugsätze werden verwendet, um das Modell für maschinelles Lernen anzupassen und zu trainieren. Zur Auswertung dienen die Testsätze.
Verwendete CSV:
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)> |
>
>
Ausgabe:
(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,)>
Beispiel:
In diesem Beispiel werden folgende Schritte ausgeführt:
- Die notwendigen Pakete werden importiert.
- Der Datensatz Advertising.csv wird geladen und bereinigt, und Nullwerte werden gelöscht.
- Feature- und Ziel-Arrays werden erstellt (X undy).
- Die erstellten Arrays werden in Zug- und Testsätze aufgeteilt. 30 % des Datensatzes gehen in den Testsatz, was bedeutet, dass 70 % der Daten ein Zugsatz sind.
- Es wird ein Standard-Skalierungsobjekt erstellt.
- X_train wird in den Scaler eingepasst.
- X_train und X_test werden mit der Methode transform() transformiert.
- Es wird ein einfaches lineares Regressionsmodell erstellt
- Zuggarnituren passen in das Modell.
- Die Methode Predict() wird verwendet, um Vorhersagen für den X_test-Satz durchzuführen.
- Die Metrik „mean_squared_error()“ wird zur Bewertung des Modells verwendet.
Um die in diesem Beispiel verwendete CSV-Datei anzuzeigen und herunterzuladen, klicken Sie auf Hier .
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))> |
>
>
Ausgabe:
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,
SIM-Karte eingelegt, aber kein Service-Android10.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
Beispiel:
In diesem Beispiel verwenden wir das K-Nearest-Neighbors-Klassifikatormodell.
In diesem Beispiel werden folgende Schritte ausgeführt:
- Die notwendigen Pakete werden importiert.
- Irisdaten werden aus sklearn.datasets geladen.
- Feature- und Ziel-Arrays werden erstellt (X undy).
- Die erstellten Arrays werden in Zug- und Testsätze aufgeteilt. 30 % des Datensatzes gehen in den Testsatz, was bedeutet, dass 70 % der Daten ein Zugsatz sind.
- Mit der Klasse KNeighborsClassifier wird ein grundlegendes Knn-Modell erstellt.
- Zuggarnituren passen in das Knn-Modell.
- Die Methode Predict() wird verwendet, um Vorhersagen für den X_test-Satz durchzuführen.
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))> |
>
>
Ausgabe:
[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]