Я пытаюсь выполнить 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% данных для каждой группы?