При подгонке моделей машинного обучения к наборам данных мы часто разбиваем набор данных на два набора:
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