Как узнать KFold с пользовательскими слоями классов? - PullRequest
0 голосов
/ 15 апреля 2020

Я читал эту статью о том, как сделать правильный KFold для очень несбалансированного набора данных. В последнем примере показано, как разбить набор данных на 2 раза, 50/50 поезд / тест. Все очень круто и интересно. Мне, однако, интересно, как я могу сделать разделение, где я также могу управлять распределением классов в каждом сгибе, например, 50/50 class0 / class1 (он же under / oversampling). Итак, учитывая приведенные ниже данные, скажем, я бы хотел 4 раза, я ищу следующий результат:

>Train: 0=8, 1=8, 
>Train: 0=8, 1=8, 
>Train: 0=8, 1=8, 
>Train: 0=8, 1=8, 

Есть ли способ достичь этого с помощью любого из методов sklearn.model_selection? Я искал это везде без удачи. Может ли это быть потому, что этот метод не должен использоваться с KFold?

# example of stratified train/test split with an imbalanced dataset
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# generate 2 class dataset
X, y = make_classification(n_samples=1000, n_classes=2, weights=[0.99, 0.01], flip_y=0, random_state=1)

# split into train/test sets with same class ratio
trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2, stratify=y)

# summarize
train_0, train_1 = len(trainy[trainy==0]), len(trainy[trainy==1])
test_0, test_1 = len(testy[testy==0]), len(testy[testy==1])
print('>Train: 0=%d, 1=%d, Test: 0=%d, 1=%d' % (train_0, train_1, test_0, test_1))
>Train: 0=495, 1=5, Test: 0=495, 1=5

1 Ответ

0 голосов
/ 16 апреля 2020

Если вашей целью является распределение 50/50 между классами, для этого у sklearn есть StratifiedKFold . Он использует недостаточную выборку, чтобы гарантировать, что все классы не имеют равных выборок в каждом сгибе.

Но если вы хотите большего контроля, скажем, вы хотите, чтобы распределение было 30/70, sklearn не достаточно, вам понадобится ibalance-learn библиотека для этого. Например, RandomUnderSampler позволит вам точно контролировать распределение через параметр sampling_strategy. На самом деле, если вы работаете с очень несбалансированным набором данных в python, вам, вероятно, следует в какой-то степени ознакомиться с этой библиотекой и ее алгоритмами, а не только с RandomUnderSampler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...