Python

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

В Машинное обучение, Масштабирование и нормализация — это методы, используемые при предварительной обработке данных для преобразования функций или переменных в наборе данных. Эти методы гарантируют, что данные находятся в соответствующем диапазоне и распределении, что способствует эффективному обучению моделей машинного обучения. Если вы хотите знать все о масштабировании и нормализации, эта статья для вас. В этой статье я познакомлю вас с масштабированием и нормализацией в машинном обучении и их реализацией с использованием Python.

Введение в масштабирование и нормализацию в машинном обучении

Масштабирование относится к процессу преобразования значений признаков в определенный диапазон. Это гарантирует, что все функции имеют сопоставимые масштабы, и предотвращает доминирование некоторых функций в модели из-за их большей величины. Методы масштабирования включают в себя:

  1. Мин-макс масштабирование: Этот метод масштабирует данные в определенном диапазоне, часто от 0 до 1. Он подходит, когда распределение данных относительно равномерное и сохранение взаимосвязи между исходными значениями признаков не имеет решающего значения.
  2. Стандартизация: Этот метод преобразует данные так, чтобы среднее значение и единичная дисперсия были равны нулю. Это уместно, когда распределение данных не обязательно однородно, и важно сохранить относительные различия между значениями признаков. Стандартизация используется при работе с моделями, предполагающими нормальность, такими как линейная регрессия.

Нормализация относится к корректировке значений признаков в соответствии с определенным распределением или шаблоном. Это может быть полезно, когда данные имеют разные масштабы и распределения, и мы хотим привести их к общему стандарту. Методы нормализации включают в себя:

  1. Нормализация Z-оценки: Этот метод преобразует данные, чтобы иметь среднее значение, равное нулю, и стандартное отклонение, равное единице. Это полезно, когда данные имеют нормальное или близкое к нормальному распределение. Нормализация Z-показателя помогает сделать сравнение между функциями более содержательным, устраняя различия в масштабе.
  2. Преобразование журнала: Логарифмическое преобразование используется для нормализации данных с асимметричным распределением. При логарифмировании значений данные сжимаются, что снижает влияние выбросов и делает распределение более симметричным.

Таким образом, когда функции данных имеют разные масштабы или единицы измерения, методы масштабирования, такие как масштабирование по принципу «минимум-максимум» или стандартизация, могут помочь обеспечить справедливость вклада функций. А когда распределение данных неравномерно или асимметрично, методы нормализации, такие как нормализация 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-оценки.

Когда не следует использовать масштабирование и нормализацию

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

  • Когда объекты в наборе данных уже имеют схожие масштабы и распределения.
  • Когда используемая модель не чувствительна к масштабам объектов, таких как деревья решений или случайные леса.

Краткое содержание

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


Ссылка на источник

Похожие статьи

Кнопка «Наверх»