StratifiedKFold на основе столбца в матрице X - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь выполнить RandomizedSearchCV на стратифицированном наборе данных, используя столбец в матрице X в качестве переменной стратификации.

Я использую XGBoostRegressor для прогнозирования урожайности солнечной энергии. Моя матрица X содержит данные для нескольких солнечных систем, и каждый обучающий пример имеет соответствующий system_id, который является моей желаемой переменной стратификации. Матрица y содержит наблюдения урожайности (реальные значения). Я хотел бы, чтобы каждая свертка использовала 80% данных из каждой системы для обучения и 20% для тестирования.

Пожалуйста, посмотрите мой код ниже:

# I use 3-fold RandomizedSearchCV, hence make n_splits=3
cross_val = StratifiedKFold(n_splits=3, random_state=123)

scaler = MinMaxScaler()
model = XGBRegressor(objective = "reg:squarederror")
pipeline = Pipeline(steps=[('scaler', scaler),
                           ('model', model)
                          ])
random_search = RandomizedSearchCV(pipeline, param_grid, n_iter=1, n_jobs=-1, verbose=3, cv=cross_val,
                                   scoring='neg_mean_squared_error', random_state=42, return_train_score=True)

train_test_split позволяет мне стратифицировать на основе столбца в матрице X, но RandomizedSearchCV не будет поддерживать эту стратификацию. По этой причине я попытался использовать StratifiedKFold , но, согласно документации: «Стратификация выполняется на основе меток y». Я использую python 3.7.5 и sklearn 0.21.3.

Можно ли использовать стратифицированную перекрестную проверку на основе столбца в матрице X? Как сделать так, чтобы каждая свертка содержала 80% данных для каждой группы?

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