Вернуться на страницу brain2net: https://brain2net.ru/post/masshtabirovaniya-priznakov/
# Загружаем набор данных cancer
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target,
random_state=1)
print(X_train.shape)
print(X_test.shape)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# В отличие от классификаторов и регрессоров
# при вызове метода fit scaler работает с данными (X_train),
# а ответы (y_train) не используются!
scaler.fit(X_train)
Для примения преобразования, которое настроили методом fit, используется метод transform.
X_train_scaled = scaler.transform(X_train)
# печатаем значения признаков в обучающем наборе до и после масштабирования
print("форма преобразованного массива: {}".format(X_train_scaled.shape))
print("min значение признака до масштабирования:\n {}".format(X_train.min(axis=0)))
print("max значение признака до масштабирования:\n {}".format(X_train.max(axis=0)))
print("min значение признака после масштабирования:\n {}".format(
X_train_scaled.min(axis=0)))
print("max значение признака после масштабирования:\n {}".format(
X_train_scaled.max(axis=0)))
# преобразовываем тестовые данные
X_test_scaled = scaler.transform(X_test)
# значения признаков в тестовом наборе после масштабирования
print("min значение признака после масштабирования:\n{}".format(X_test_scaled.min(axis=0)))
print("max значение признака после масштабирования:\n{}".format(X_test_scaled.max(axis=0)))
NB После масштабирования минимальные и максимальные значения признаков в тестовом наборе не равны 0 и 1. Некоторые признаки могут выходить за пределы диапазона 0-1.
Модели, которые используют метод transform, также позволяют воспользоваться методом fit_transform.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# последовательно вызываются методы fit и transform (цепочка методов)
X_scaled = scaler.fit(X_train).transform(X_train)
# тот же самый результат, но более эффективный способ вычислений
X_scaled_d = scaler.fit_transform(X_train)
Применение классификатора к масштабированным данным
from sklearn.svm import SVC
svm = SVC(C=100)
svm.fit(X_train, y_train)
print("Правильность на тестовом наборе: {:.2f}".format(svm.score(X_test, y_test)))
Друой вариант масштабирования
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)))
Вернуться на страницу brain2net: https://brain2net.ru/post/masshtabirovaniya-priznakov/