Как разделить набор данных с помощью функции scikit-learn train_test_split()

Опубликовано: 8 Сентября, 2022

В этой статье мы обсудим, как разделить набор данных, используя функцию train_test_split() от scikit-learns.

Функция sklearn.model_selection.train_test_split():

Метод train_test_split() используется для разделения наших данных на обучающие и тестовые наборы. Во-первых, нам нужно разделить наши данные на функции (X) и метки (y). Фрейм данных делится на X_train, X_test, y_train и y_test. Наборы X_train и y_train используются для обучения и подгонки модели. Наборы X_test и y_test используются для тестирования модели, если она предсказывает правильные результаты/метки. мы можем явно проверить размер поезда и тестовых наборов. Предлагается, чтобы наши наборы поездов были больше, чем наборы тестов.

  • Набор для обучения: набор данных для обучения — это набор данных, которые использовались для подбора модели. Набор данных, на котором обучается модель. Эти данные видит и изучает модель.
  • Тестовый набор: тестовый набор данных — это подмножество обучающего набора данных, который используется для точной оценки окончательной подгонки модели.
  • проверочный набор: проверочный набор данных — это образец данных из обучающего набора вашей модели, который используется для оценки производительности модели при настройке гиперпараметров модели.
  • недообучение: недостаточно подобранная модель данных имеет высокий уровень ошибок как в обучающем наборе, так и в ненаблюдаемых данных, поскольку она не может эффективно представить взаимосвязь между входными и выходными переменными.
  • переобучение: когда статистическая модель точно соответствует своим обучающим данным, но цель алгоритма теряется, поскольку он не может точно выполняться с невидимыми данными, называется переоснащением.

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

Parameters:

  • *arrays: sequence of indexables. Lists, numpy arrays, scipy-sparse matrices, and pandas dataframes are all valid inputs.
  • test_size: int or float, by default None. If float, it should be between 0.0 and 1.0 and represent the percentage of the dataset to test split. If int is used, it refers to the total number of test samples. If the value is None, the complement of the train size is used. It will be set to 0.25 if train size is also None.
  • train_size: int or float, by default None.
  • random_state : int,by default None. Controls how the data is shuffled before the split is implemented. For repeatable output across several function calls, pass an int.
  • shuffle: boolean object , by default True. Whether or not the data should be shuffled before splitting. Stratify must be None if shuffle=False.
  • stratify: array-like object , by default it is None. If None is selected, the data is stratified using these as class labels.

Returns:

splitting: The train-test split of inputs is represented as a list.

Шаги для разделения набора данных:

Шаг 1: Импортируйте необходимые пакеты или модули:

На этом этапе мы импортируем необходимые пакеты или модули в рабочую среду Python.

Python3




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

Шаг 2: Импортируйте фрейм данных/набор данных:

Здесь мы загружаем CSV с помощью метода pd.read_csv() из pandas и получаем форму набора данных с помощью функции shape().

Используемый CSV:

Python3




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

Выход:

(13, 3)

Шаг 3: Получите переменные функции X и Y:

Здесь мы назначаем переменные X и Y, в которых переменная признака X имеет независимые переменные, а переменная признака y имеет зависимую переменную.

Python3




X= df["area"]
y=df["prices"]

Шаг 4: Используйте разделительный класс обучающего теста, чтобы разделить данные на обучающий и тестовый наборы:

Здесь класс train_test_split() из sklearn.model_selection используется для разделения наших данных на обучающие и тестовые наборы, где переменные признаков задаются в качестве входных данных для метода. test_size определяет часть данных, которые войдут в наборы тестов, а случайное состояние используется для воспроизводимости данных.

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)

Пример:

В этом примере импортируется файл «predictions.csv». Атрибут df.shape используется для получения формы фрейма данных. Форма кадра данных (13,3). Столбцы функций берутся в переменной X, а столбец результатов берется в переменной y. Переменные X и y передаются в метод train_test_split() для разделения фрейма данных на обучающие и тестовые наборы. Параметр случайного состояния используется для воспроизводимости данных. test_size задан как 0,25, что означает, что 25% данных попадают в наборы тестов. 4 из 13 строк в кадре данных входят в наборы тестов. 75% данных входят в наборы поездов, то есть 9 строк из 13 строк. Наборы поездов используются для подбора и обучения модели машинного обучения. Наборы тестов используются для оценки.

Используемый 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)

Выход:

(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,)

Пример:

В этом примере выполняются следующие шаги:

  • Необходимые пакеты импортируются.
  • Набор данных Advertising.csv загружается и очищается, а нулевые значения удаляются.
  • созданы функции и целевые массивы (X andy).
  • Созданные массивы разбиваются на обучающие и тестовые наборы. 30 % набора данных входят в тестовый набор, что означает, что 70 % данных — это набор поездов.
  • Создается стандартный объект масштабирования.
  • X_train вписывается в скейлер.
  • X_train и X_test преобразуются с помощью метода transform().
  • Создана простая модель линейной регрессии
  • Наборы поездов подходят к модели.
  • метод predict() используется для выполнения прогнозов на наборе X_test.
  • Метрика mean_squared_error() используется для оценки модели.

Чтобы просмотреть и загрузить CSV-файл, используемый в этом примере, нажмите здесь.

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))

Выход:

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

Пример:

В этом примере мы будем использовать модель классификатора K ближайших соседей.

В этом примере выполняются следующие шаги:

  • Необходимые пакеты импортируются.
  • данные радужной оболочки загружаются из sklearn.datasets.
  • созданы функции и целевые массивы (X andy).
  • Созданные массивы разбиваются на обучающие и тестовые наборы. 30 % набора данных входят в тестовый набор, что означает, что 70 % данных — это набор поездов.
  • Базовая модель Knn создается с использованием класса KNeighborsClassifier.
  • Наборы поездов подходят к модели knn.
  • метод predict() используется для выполнения прогнозов на наборе X_test.

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))

Выход:

[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]