На этом шаге мы рассмотрим, что можно получить из найденных атрибутов.
Как мы уже говорили ранее, одна из главных причин использования конвейеров - это выполнение решетчатого поиска. Общераспространенная задача - получить доступ к некоторым этапам конвейера внутри объекта GridSearchCV. Давайте запустим решетчатый поиск для классификатора LogisticRegression на наборе данных cancer, использовав Pipeline и StandardScaler, чтобы отмасштабировать данные перед тем, как передать их в классификатор LogisticRegression. Сначала мы создаем конвейер с помощью функции make_pipeline():
[In 22]: from sklearn.linear_model import LogisticRegression pipe = make_pipeline(StandardScaler(), LogisticRegression())
Далее мы создаем сетку параметров. Как мы говорили ранее, параметр регуляризации С позволяет настроить модель логистической регрессии (класс LogisticRegression). Мы используем логарифмическую сетку для этого параметра, поиск осуществляется в диапазоне значений от 0.01 до 100. Поскольку мы использовали функцию make_pipeline(), имя этапа LogisticRegression записывается в нижнем регистре как logisticregression. Чтобы настроить параметр C, мы должны задать сетку параметров в виде logisticregression__C:
[In 23]: param_grid = {'logisticregression__C': [0.01, 0.1, 1, 10, 100]}
И как обычно мы разбиваем набор данных cancer на обучающий и тестовый наборы и запускаем решетчатый поиск:
[In 24]: X_train, X_test, y_train, y_test = train_test_split( cancer.data, cancer.target, random_state=4) grid = GridSearchCV(pipe, param_grid, cv=5) grid.fit(X_train, y_train)
Итак, каким образом мы можем посмотреть коэффициенты наилучшеи модели логистическом регрессии, которые были найдены с помощью GridSearchCV? Мы знаем, что наилучшая модель, найденная с помощью GridSearchCV и построенная на всех обучающих данных, хранится в grid.best_estimator_:
[In 25]: print("Лучшая модель:\n{}".format(grid.best_estimator_)) Лучшая модель: Pipeline(steps=[('standardscaler', StandardScaler()), ('logisticregression', LogisticRegression(C=1))])
В нашем случае наилучшей моделью (best_estimator_) является конвейер, состоящий из двух этапов standardscaler и logisticregression. Как уже говорилось ранее, получить информацию об этапе logisticregression мы можем с помощью атрибута конвейера named_steps:
[In 26]: print("Этап логистической регрессии:\n{}".format( grid.best_estimator_.named_steps["logisticregression"])) Этап логистической регрессии: LogisticRegression(C=1)
Теперь, когда мы построили логистическую регрессию, можно взглянуть на регрессионные коэффициенты (веса), связанные с входными признаками:
[In 27]: print("Коэффициенты логистической регрессии:\n{}".format( grid.best_estimator_.named_steps["logisticregression"].coef_)) Коэффициенты логистической регрессии: [[-0.43570655 -0.34266946 -0.40809443 -0.5344574 -0.14971847 0.61034122 -0.72634347 -0.78538827 0.03886087 0.27497198 -1.29780109 0.04926005 -0.67336941 -0.93447426 -0.13939555 0.45032641 -0.13009864 -0.10144273 0.43432027 0.71596578 -1.09068862 -1.09463976 -0.85183755 -1.06406198 -0.74316099 0.07252425 -0.82323903 -0.65321239 -0.64379499 -0.42026013]]
В результате мы получим довольное длинное регрессионное уравнение, но оно полезно для понимания модели.
На следующем шаге мы рассмотрим нахождение оптимальных параметров этапов конвейера с помошью решетчатого поиска.