Разделение данных на тренировочные и тестовые данные с сохранением соотношения

У меня есть набор данных Iris (можно найти здесь: https://www.kaggle.com/uciml/iris), который я должен разделить на тестовый и тренировочный набор. Однако мне нужно разделить его так, чтобы распределение классов в обучающем и тестовом наборе было таким же, как и в полном наборе данных.

В этом вопросе я видел лучший ответ: как разбить набор данных на соотношения между классами обучения и проверки? но так как я новичок и в науке о данных, и в питоне, я совершенно потерян.

Для набора данных Iris первые 50 рядов представляют собой один вид цветов, следующие 50 - второй вид, а последние 50 - третий вид цветов. Как мне написать, чтобы я получил например. 50% тестовых данных от каждого третьего? Я не могу понять, где и как они сделали это в вопросе, связанном выше. Если бы вы могли объяснить это, как вы, ребенку, я был бы очень признателен.

И представляет ли x_train 4 различных свойства цветка, а y_train - тот цветок, который у нас есть?

Заранее спасибо!

РЕДАКТИРОВАТЬ: я пробовал это

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.5, random_state=65)

но это честный способ сделать это? Я выбирал разные числа случайного состояния, пока не получил ровно 25 цветов каждого типа в тестовом и тренировочном наборе (это всегда было около 1/3, но с 65 я получил это точно). Это немного похоже на обман...

2 ответа

Решение

Вы можете использовать здесь StraifiedKFold: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html

Кроме того, train_test_split имеет параметр стратификации: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Пинг мне, если вам нужно описать это на примере.

sklearn.model_selection.train_test_split

имеет shuffle а также stratify параметры.

по умолчанию shuffle = True а также stratify=None

Если вы имеете дело с регрессом, train_test_split по умолчанию данные будут перетасовываться для вас.

Если вы имеете дело с классификацией, вам необходимо указать stratify = << your response variable >>

Для получения дополнительной информации, пожалуйста, проверьте документацию

Спасибо

Другие вопросы по тегам