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