Шаг 176.
Введение в машинное обучение с использованием Python. ... . Общий интерфейс конвейера. Работа с атрибутами конвейера, помешенного в объект GridSearchCV

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

    Как мы уже говорили ранее, одна из главных причин использования конвейеров - это выполнение решетчатого поиска. Общераспространенная задача - получить доступ к некоторым этапам конвейера внутри объекта 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]]

    В результате мы получим довольное длинное регрессионное уравнение, но оно полезно для понимания модели.

    На следующем шаге мы рассмотрим нахождение оптимальных параметров этапов конвейера с помошью решетчатого поиска.




Предыдущий шаг Содержание Следующий шаг