На этом шаге мы рассмотрим, как влияет предварительная обработка на получаемые результаты.
Теперь давайте вернемся к набору данных cancer и посмотрим, как использование MinMaxScaler повлияет на обучение SVC (мы выполняем то же самое масштабирование, что делали ранее, но другим способом). Во-первых, давайте для сравнения снова прогоним SVC на исходных данных:
[In 10]: from sklearn.svm import SVC X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, random_state=0) svm = SVC(C=100) svm.fit(X_train, y_train) print("Правильность на тестовом наборе: {:.2f}".format(svm.score(X_test, y_test))) Правильность на тестовом наборе: 0.94
Теперь давайте отмасштабируем данные с помощью MinMaxScaler перед тем, как подгонять SVC:
[In 11]: # предварительная обработка с помощью шкалирования 0-1 scaler = MinMaxScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) # построение SVM на масштабированных обучающих данных svm.fit(X_train_scaled, y_train) # оценка правильности для масштабированного тестового набора print("Правильность на масштабированном тестовом наборе: {:.2f}".format( svm.score(X_test_scaled, y_test))) Правильность на масштабированном тестовом наборе: 0.97
Как мы уже видели ранее, эффект масштабирования данных оказался в данном случае не слишком существенен, хотя в некоторых ситуациях он может оказаться значительно серьезнее. Хотя масштабирование данных не предполагает каких-либо сложных математических расчетов, эффективная практика заключается в том, чтобы использовать методы масштабирования, предлагаемые scikit-learn, а не создавать их заново самостоятельно, поскольку легко ошибиться даже в этих простых вычислениях.
Кроме того, можно легко заменить один алгоритм предварительной обработки на другой, сменив имя используемого класса, поскольку все классы предварительной обработки имеют один и тот же интерфейс, состоящий из методов fit() и transform():
[In 12]: # предварительная обработка с помощью масштабирования # нулевым средним и единичной дисперсией from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test) # построение SVM на масштабированных обучающих данных svm.fit(X_train_scaled, y_train) # оценка правильности для масштабированного тестового набора print("Правильность SVM на тестовом наборе: {:.2f}".format(svm.score(X_test_scaled, y_test))) Правильность SVM на тестовом наборе: 0.96
Теперь узнав, как работают простые преобразования, выполняющие предварительную обработку данных, давайте перейдем к более интересным преобразованиям, использующим машинное обучение без учителя.
На следующем шаге мы перечислим основные алгоритмы, которые используются в обучении без учителя.