стратифицированный образец с заменой в питоне - PullRequest
0 голосов
/ 06 октября 2018

У меня есть панды DataFrame.Я пытаюсь создать образец DataFrame с заменой, а также расслаивать его.

Это позволяет мне заменить:

df_test = df.sample(n=100, replace=True, random_state=42, axis=0)

Однако я не уверен, как также расслаиваться.Могу ли я использовать параметр weights и если да, то как?Столбцы, которые я хочу разделить, являются строками.

Это позволяет мне расслаиваться:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, Y, test_size=.50, stratify=Y, random_state=42)

Однако нет возможности заменить.

Как можно и расслаивать, и заменять?

Ответы [ 2 ]

0 голосов
/ 27 августа 2019

Это немного старый вопрос, но так как Google вернул мне это в первую очередь, когда я искал ту же самую вещь, я подумал, что было бы полезно оставить это здесь для всех, включая мою будущую личность.

Очевидно, sklearn предлагает эту функцию в sklearn.utils.resample :

from sklearn import datasets
from sklearn.utils import resample

X, y = datasets.load_iris(return_X_y=True)
X_new, y_new = resample(X, y, stratify=y)

Вы можете контролировать количество выборок с помощью параметра n_samples.По умолчанию он установлен на None, поэтому вы получаете X.shape[0] случайные выборки с заменой (так как это было разработано для целей начальной загрузки).Надеюсь, это кому-нибудь поможет.

0 голосов
/ 25 июня 2019

Насколько я знаю, по умолчанию StratifiedShuffleSplit из sklearn будет работать с заменой, то есть не взаимоисключающими стратами.надеюсь, что я вас правильно понял.

import numpy as np
from sklearn.model_selection import StratifiedShuffleSplit
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 0, 1, 1, 1])
sss = StratifiedShuffleSplit(n_splits=5, test_size=0.5, random_state=0)
sss.get_n_splits(X, y)

print(sss)       

for train_index, test_index in sss.split(X, y):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

выход:

TRAIN: [5 2 3] TEST: [4 1 0]
TRAIN: [5 1 4] TEST: [0 2 3]
TRAIN: [5 0 2] TEST: [4 3 1]
TRAIN: [4 1 0] TEST: [2 3 5]
TRAIN: [0 5 1] TEST: [3 4 2]
...