Разделение данных на тренировочные и тестовые данные с сохранением соотношения
У меня есть набор данных 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 >>
Для получения дополнительной информации, пожалуйста, проверьте документацию
Спасибо