Как создать обучающий и тестовый набор из фрейма данных Pandas


При подгонке моделей машинного обучения к наборам данных мы часто разбиваем набор данных на два набора:

1. Набор для обучения: используется для обучения модели (70-80% исходного набора данных).

2. Тестовый набор: используется для получения объективной оценки производительности модели (20-30% исходного набора данных).

В Python существует два распространенных способа разделить DataFrame pandas на обучающий и тестовый наборы:

Способ 1: используйте train_test_split() из sklearn

from sklearn. model_selection import train_test_split

train, test = train_test_split(df, test_size= 0.2 , random_state= 0 )

Способ 2: использовать sample() из панд

train = df.sample (frac= 0.8 ,random_state= 0 )
test = df.drop (train. index )

В следующих примерах показано, как использовать каждый метод со следующими пандами DataFrame:

import pandas as pd
import numpy as np

#make this example reproducible
np.random.seed (1)

#create DataFrame with 1,000 rows and 3 columns
df = pd.DataFrame({'x1 ': np.random.randint (30, size=1000),
 'x2 ': np.random.randint (12, size=1000),
 'y ': np.random.randint (2, size=1000)})

#view first few rows of DataFrame
df.head ()

 x1 x2 y
0 5 1 1
1 11 8 0
2 12 4 1
3 8 7 0
4 9 0 0

Пример 1: Используйте train_test_split() из sklearn

В следующем коде показано, как использовать функцию train_test_split() из sklearn для разделения DataFrame pandas на обучающие и тестовые наборы:

from sklearn. model_selection import train_test_split

#split original DataFrame into training and testing sets
train, test = train_test_split(df, test_size= 0.2 , random_state= 0 )

#view first few rows of each set
print(train.head())

 x1 x2 y
687 16 2 0
500 18 2 1
332 4 10 1
979 2 8 1
817 11 1 0

print(test.head())

 x1 x2 y
993 22 1 1
859 27 6 0
298 27 8 1
553 20 6 0
672 9 2 1

#print size of each set
print(train. shape , test. shape )

(800, 3) (200, 3)

Из вывода мы видим, что было создано два набора:

  • Учебный набор: 800 строк и 3 столбца.
  • Набор для тестирования: 200 строк и 3 столбца.

Обратите внимание, что test_size управляет процентом наблюдений из исходного DataFrame, которые будут принадлежать тестовому набору, а значение random_state делает разделение воспроизводимым.

Пример 2: Используйте sample() из панд

В следующем коде показано, как использовать функцию sample() из pandas для разделения кадра данных pandas на обучающие и тестовые наборы:

#split original DataFrame into training and testing sets
train = df.sample (frac= 0.8 ,random_state= 0 )
test = df.drop (train. index )

#view first few rows of each set
print(train.head())

 x1 x2 y
993 22 1 1
859 27 6 0
298 27 8 1
553 20 6 0
672 9 2 1

print(test.head())

 x1 x2 y
9 16 5 0
11 12 10 0
19 5 9 0
23 28 1 1
28 18 0 1

#print size of each set
print(train. shape , test. shape )

(800, 3) (200, 3)

Из вывода мы видим, что было создано два набора:

  • Учебный набор: 800 строк и 3 столбца.
  • Набор для тестирования: 200 строк и 3 столбца.

Обратите внимание, что frac управляет процентом наблюдений из исходного DataFrame, которые будут принадлежать обучающему набору, а значение random_state делает разделение воспроизводимым.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Python:

Как выполнить логистическую регрессию в Python
Как создать матрицу путаницы в Python
Как рассчитать сбалансированную точность в Python

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.