Масштабирование и нормализация в машинном обучении

В Машинное обучение, Масштабирование и нормализация — это методы, используемые при предварительной обработке данных для преобразования функций или переменных в наборе данных. Эти методы гарантируют, что данные находятся в соответствующем диапазоне и распределении, что способствует эффективному обучению моделей машинного обучения. Если вы хотите знать все о масштабировании и нормализации, эта статья для вас. В этой статье я познакомлю вас с масштабированием и нормализацией в машинном обучении и их реализацией с использованием Python.
Введение в масштабирование и нормализацию в машинном обучении
Масштабирование относится к процессу преобразования значений признаков в определенный диапазон. Это гарантирует, что все функции имеют сопоставимые масштабы, и предотвращает доминирование некоторых функций в модели из-за их большей величины. Методы масштабирования включают в себя:
- Мин-макс масштабирование: Этот метод масштабирует данные в определенном диапазоне, часто от 0 до 1. Он подходит, когда распределение данных относительно равномерное и сохранение взаимосвязи между исходными значениями признаков не имеет решающего значения.
- Стандартизация: Этот метод преобразует данные так, чтобы среднее значение и единичная дисперсия были равны нулю. Это уместно, когда распределение данных не обязательно однородно, и важно сохранить относительные различия между значениями признаков. Стандартизация используется при работе с моделями, предполагающими нормальность, такими как линейная регрессия.
Нормализация относится к корректировке значений признаков в соответствии с определенным распределением или шаблоном. Это может быть полезно, когда данные имеют разные масштабы и распределения, и мы хотим привести их к общему стандарту. Методы нормализации включают в себя:
- Нормализация Z-оценки: Этот метод преобразует данные, чтобы иметь среднее значение, равное нулю, и стандартное отклонение, равное единице. Это полезно, когда данные имеют нормальное или близкое к нормальному распределение. Нормализация Z-показателя помогает сделать сравнение между функциями более содержательным, устраняя различия в масштабе.
- Преобразование журнала: Логарифмическое преобразование используется для нормализации данных с асимметричным распределением. При логарифмировании значений данные сжимаются, что снижает влияние выбросов и делает распределение более симметричным.
Таким образом, когда функции данных имеют разные масштабы или единицы измерения, методы масштабирования, такие как масштабирование по принципу «минимум-максимум» или стандартизация, могут помочь обеспечить справедливость вклада функций. А когда распределение данных неравномерно или асимметрично, методы нормализации, такие как нормализация Z-показателя или логарифмическое преобразование, могут помочь привести данные в соответствие с желаемым шаблоном.
Реализация масштабирования и нормализации с использованием Python
Чтобы показать реализацию масштабирования и нормализации, я начну с создания сильно несбалансированных данных:
from sklearn.datasets import make_classification from sklearn.preprocessing import MinMaxScaler, StandardScaler import numpy as np #Create a highly imbalanced dataset with varying feature scales X, y = make_classification( n_samples=1000, n_features=5, weights=[0.9, 0.1], #Imbalanced class distribution random_state=42 )
Теперь давайте посмотрим на первые несколько образцов данных:
print("Original Data:") print(X[:5])
Original Data: [[-0.43964281 0.54254734 -0.82241993 0.40136622 -0.85484 ] [-1.32026785 -0.45165631 -1.14769139 0.21799084 2.51556893] [-0.90241409 -0.30179019 -2.08411294 0.15228215 1.70250872] [-1.65818269 1.18308467 1.11268837 1.10425263 -1.11576542] [-1.59871055 0.16926783 -0.92669831 0.60376341 1.29684502]]
Теперь вот как использовать масштабирование и нормализацию для преобразования данных:
#Perform Scaling scaler = MinMaxScaler() #Min-Max Scaling X_scaled_minmax = scaler.fit_transform(X) #Perform Normalization normalizer = StandardScaler() #Z-score Normalization X_normalized_zscore = normalizer.fit_transform(X)
Теперь давайте посмотрим на преобразованные данные с использованием обоих методов:
print("Scaled (MinMax):") print(X_scaled_minmax[:5]) print("Normalized (Z-Score):") print(X_normalized_zscore[:5])
Scaled (MinMax): [[0.49437724 0.6214084 0.31632182 0.56885557 0.3145778 ] [0.38828992 0.45983898 0.26949153 0.53613957 0.79094871] [0.43862802 0.48419394 0.13467217 0.52441649 0.67603143] [0.34758193 0.72550302 0.59492504 0.69425754 0.27769881] [0.35474643 0.56074623 0.30130855 0.60496526 0.61869524]] Normalized (Z-Score): [[ 0.36932732 0.22503412 -0.84205748 -0.07829223 -0.67051123] [-0.46515818 -1.14689718 -1.17158646 -0.36406708 2.10148778] [-0.06919748 -0.94009244 -2.12026495 -0.46646846 1.43278491] [-0.78536828 1.10893071 1.11837971 1.01709614 -0.88510982] [-0.72901212 -0.29006542 -0.94770077 0.23712649 1.09914606]]
Мы также можем сравнить влияние масштабирования и нормализации на данные, визуализируя распределение данных:
import plotly.graph_objects as go from plotly.subplots import make_subplots fig = make_subplots(rows=3, cols=5, subplot_titles=[f'Feature {i+1}' for i in range(X.shape[1])]) #Original Data Histograms for i in range(X.shape[1]): hist_trace = go.Histogram(x=X[:, i], nbinsx=20, marker=dict(color="rgb(219, 209, 240)")) fig.add_trace(hist_trace, row=1, col=i+1) #Scaled Data Histograms for i in range(X_scaled_minmax.shape[1]): hist_trace = go.Histogram(x=X_scaled_minmax[:, i], nbinsx=20, marker=dict(color="rgb(196, 234, 222)")) fig.add_trace(hist_trace, row=2, col=i+1) #Normalized Data Histograms for i in range(X_normalized_zscore.shape[1]): hist_trace = go.Histogram(x=X_normalized_zscore[:, i], nbinsx=20, marker=dict(color="rgb(251, 205, 231)")) fig.add_trace(hist_trace, row=3, col=i+1) fig.update_layout(title="Feature Distribution Comparison", showlegend=False) fig.update_layout(height=800, width=1000) fig.show()

Первая строка фиолетового цвета представляет собой распределение исходных данных. Вторая строка зеленого цвета представляет распределение данных, масштабированных с использованием метода масштабирования минимум-макс. И третья строка розового цвета представляет распределение данных, нормализованное с помощью метода нормализации Z-оценки.
Когда не следует использовать масштабирование и нормализацию
В некоторых ситуациях данные могут не требовать масштабирования или нормализации, и необработанные значения могут использоваться непосредственно в качестве входных данных для модели. Такой как:
- Когда объекты в наборе данных уже имеют схожие масштабы и распределения.
- Когда используемая модель не чувствительна к масштабам объектов, таких как деревья решений или случайные леса.
Краткое содержание
Таким образом, масштабирование относится к преобразованию значений функций в определенный диапазон. Это гарантирует, что все функции имеют сопоставимые масштабы, и предотвращает доминирование некоторых функций в модели из-за их большей величины. А нормализация относится к корректировке значений признаков в соответствии с определенным распределением или шаблоном. Это может быть полезно, когда данные имеют разные масштабы и распределения, и мы хотим привести их к общему стандарту. Надеюсь, вам понравилась эта статья о масштабировании и нормализации в Машинное обучение. Не стесняйтесь задавать ценные вопросы в разделе комментариев ниже.
Ссылка на источник