Как создать train_test_split на основе условия в python

#python #scikit-learn #train-test-split

#python #scikit-learn #train-test-split

Вопрос:

Я знаю, как использовать базовый train_test_split :

 from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
  

Однако, что, если я хочу разделить свой набор для обучения и тестирования на переменную, в данном случае year . Я хочу, чтобы все значения, где year==2019 будут моим тестовым набором, в то время как year<2019 это мой обучающий набор. Как я могу изменить приведенный выше код, чтобы это произошло?

Ответ №1:

Позвольте мне объяснить на примере:
Если в вашем корпусе есть 1000 точек данных, и вы хотите 700/300 для обучения / тестирования, найдите точки данных, year == 2019 переместите их в конец корпуса и рассмотрите их как тестовые данные с чем-то вроде приведенного ниже: (предположим, что 200 точек данных удовлетворяют year == 2019 условию)

 X_test, y_test = X[800:1000], y[800:1000]
  

и, например, 300 точек данных имеют year < 2019 после перемещения их в top:

 X_train, y_train = X[0:300], y[0:300]
  

Теперь для остальной части вашего корпуса (от 300 до 800) переопределите X и Y следующим образом:

 X = data.iloc[301:799]
Y = label.iloc[301:799]
  

а затем использовать train_test_split для новых X и Y и присоединять новые X_test, y_test, X_train, y_train к предыдущим.