Шаг 168.
Введение в машинное обучение с использованием Python.
Объединение алгоритмов в цепочки и конвейеры (общие сведения)

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

    Как мы уже говорили ранее, для многих алгоритмов машинного обучения очень важное значение имеет определенное преобразование данных. Оно начинается с масштабирования данных и объединения признаков вручную, а также включает в себя процесс преобразования признаков с помощью неконтролируемого обучения. Поэтому большая часть проектов машинного обучения требует не разового использования какого-то одного алгоритма, а применения различных операции предварительной обработки и моделей машинного обучения, объединенных в цепочку. Начиная с этого шага, мы расскажем, как использовать класс Pipeline, чтобы упростить процесс построения цепочек преобразований и моделей. В частности, мы увидим, как можно объединить Pipeline и GridSearchCV для поиска параметров по всем операциям предварительной обработки сразу.

    В качестве примера, который подчеркивает важность построения цепочек моделей, можно привести случай применения ядерного SVM к набору данных cancer. Значительного улучшения работы модели можно добиться, использовав MinMaxScaler для предварительной обработки. Ниже приводится программный код для разбиения данных, вычисления минимума и максимума, масштабирования данных и построения SVM:

[In 2]:
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
# загружаем и разбиваем данные
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer.target, random_state=0)
# вычисляем минимум и максимум по обучающим данным
scaler = MinMaxScaler().fit(X_train)
[In 3]:
# масштабируем обучающие данные
X_train_scaled = scaler.transform(X_train)
svm = SVC()
# строим SVM на масштабированных обучающих данных
svm.fit(X_train_scaled, y_train)
# масштабируем тестовые данные и оцениваем качество на масштабированных данных
X_test_scaled = scaler.transform(X_test)
print("Правильность на тестовом наборе: {:.2f}".format(svm.score(X_test_scaled, y_test)))

Правильность на тестовом наборе: 0.97

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




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