Как обеспечить, чтобы все образцы из определенной группы были все вместе в обучении / тестировании в sklearn cross_val_predict?

У меня есть фреймворк, где каждый образец принадлежит группе. Например:

df = a b c group
     1 1 2  G1
     1 6 1  G1
     8 2 8  G3
     2 8 7  G2
     1 9 2  G2
     1 7 2  G3
     4 0 2  G4
     1 5 1  G4
     6 7 8  G5
     3 3 7  G6
     1 2 2  G6
     1 0 5  G7

Я хочу запустить cross_val_predict, убедившись, что все образцы из одной группы находятся в тесте или все находятся в поезде. Я хочу разделить данные на 4 части, но убедитесь, что все строки из одной группы находятся вместе в тесте или в поезде.

Так, например, строки 0,1 и 4,5 будут в поезде, но строки 3, 6 (G3) будут в тесте.

Это возможно? Я видел group аргумент в документации, но он не очень понятен, и я не нашел никаких примеров.


person okuoub    schedule 10.06.2020    source источник


Ответы (1)


Используйте GroupKFold в качестве параметра для cv в cross_val_predict():

scores = cross_val_score(model, X, y, groups, cv=GroupKFold())

Обратите внимание, что массив groups представляет группы данных, которые мы хотим включить в один обучающий / тестовый набор. Это НЕ массив меток классов.

Например:

from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GroupKFold, cross_val_score

X, y = make_blobs(n_samples=15, random_state=0)

model = LogisticRegression()
groups = [0,0,0,1,1,1,1,2,2,2,2,3,3,3,3]
scores = cross_val_score(model, X, y, groups, cv=GroupKFold(n_splits=3))

print('cross val scores: {}'.format(scores))
person sentence    schedule 10.06.2020
comment
Какие здесь группы? Где мне кормить его именем столбца группировки (в моем случае «группа») - person okuoub; 10.06.2020
comment
Пожалуйста, посмотрите мой ответ. - person sentence; 10.06.2020
comment
спасибо, я до сих пор не понимаю, что представляют собой группы arg? Обратите внимание, что в моих данных должно быть меньше складок, чем количество уникальных групп, см. Редактировать - person okuoub; 11.06.2020
comment
Группы представляют, как следует из названия, подмножества данных, которые вы хотите включить в один набор для обучения / тестирования. В этом примере первая, вторая и третья выборки ВСЕГДА будут находиться в одном и том же сгибе (либо в обучающем, либо в тестовом наборе). - person sentence; 11.06.2020