Какие инструменты Scikit Learn доступны с помощью GridSearchCV, чтобы найти наиболее эффективную комбинацию групп для определенного оценщика? - PullRequest
0 голосов
/ 24 октября 2019

Предполагая, что у меня есть данные, которые выглядят следующим образом:

| group_id | x1 | x2 | y |
|----------+----+----+---|
|        1 |  0 |  0 | 1 |
|        1 |  0 |  0 | 2 |
|        2 |  0 |  0 | 3 |
|        2 |  0 |  0 | 4 |
|        3 |  0 |  0 | 5 |
|        3 |  0 |  0 | 6 |

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

Что я могу использовать в Scikit, чтобы научиться выполнять следующее:

Для каждого group_id найдите подмножество group_id s, которые приводят к наилучшей производительности дляОценщик, определенный пользователем.

Пример вывода:

Модель LinearRegression будет использоваться в качестве оценщика ...

  • LinearRegression лучше всего работает на group_id(1), когда вы фильтруете набор данных, чтобы включить только group_ids([1, 2, 3])

  • LinearRegression лучше всего работает на group_id(2), когда вы фильтруете набор данных, чтобы включить только group_ids([1, 2])

  • LinearRegression лучше всего работает на group_id(3), когда вы фильтруете набор данных, чтобы включить только group_ids([3])

Пример реализации (но есть ли более эффективный способ?):

class FilterDownEstimator:
    def __init__(self, subset_ids):
        self.subset_ids = subset_ids
        self.model_ = None
    def fit(self, X):
        # filter down X to only ids in self.subset_ids
        self.model_ = LinearRegression().fit(filtered_down_X)
    def predict(self, X):
        self.model_.predict(X)

# ideally generated using itertools.combinations
grid = {
    'subset_ids': [
        (1,),
        (2,),
        (3,),
        (1, 2),
        (1, 3),
        (2, 3),
        (1, 2, 3),
    ],
}

best_params = {
   1: None,
   2: None,
   3: None,
}

for group_id in full_data_df.group_id.unique():
    grid_cv = GridSearchCV(estimator=FilterDownEstimator, param_grid=grid)
    # y = y's for this particular group_id
    grid_cv.fit(full_data_df[['group_id', 'x1', 'x2']], y)
    best_params[group_id] = grid_cv.best_params_

print(best_params)
# { 1: (1, 2, 3), 2: (1, 2), 3: (3,) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...