Оглавление :-

что такое масштабирование объектов?

зачем нам нужно масштабирование функций?

Типы масштабирования функций: стандартизация и нормализация

моменты, которые следует помнить перед масштабированием функций.

Что такое масштабирование функций?

Масштабирование признаков — это метод стандартизации или нормализации независимых признаков, присутствующих в данных в фиксированном диапазоне.

Например: Предположим, у нас есть такие функции, как «IQ», «CGPA» и «пакет» студента. «IQ» находится в диапазоне «100», а «CGPA» — в диапазоне 10, тогда мы должны привести обе характеристики в примерно одинаковый диапазон (между 0–1).

Зачем нам нужно масштабирование функций?

Предположим, мы решаем задачу классификации с использованием алгоритма KNN. KNN в основном вычисляет расстояние (евклидово) между двумя точками, чтобы делать прогнозы.

В приведенном выше примере расстояние между двумя точками, основанное на признаке возраста, составляет 529, а расстояние, основанное на признаке заработной платы, составляет 1 225 000 000.

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

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

Типы функций Масштабирование:-

  1. Стандартизация: - (также называемая нормализацией Z-показателя)
  2. Нормализация: -

Стандартизация: -

Формула: -

После стандартизации любой функции мы получим новые значения для этой функции… поэтому среднее значение этих значений будет равно нулю (μ = 0), а стандартное отклонение будет равно 1 (σ = 1).

Геометрическая интуиция стандартизации:-

Он состоит из среднего центрирования и масштабирования с помощью коэффициента сигма (σ).

Практический пример:-

import numpy as np # linear algebra
import pandas as pd # data processing
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('D:/Machine Learning/Feature Scaling/Standardization/Social_Network_Ads.csv')
df=df.iloc[:,2:]
df.head(5)

Выход :-

# Train, Test, Split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df.drop('Purchased', axis=1),
                                                    df['Purchased'],
                                                    test_size=0.3,
                                                    random_state=0)

X_train.shape, X_test.shape

Выход :-

Standard Scalar: —StandardScalar — это класс, присутствующий в библиотеке scikit-learn, который помогает в стандартизации.

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

# fit the scaler to the train set, it will learn the parameters
scaler.fit(X_train)  # Basically we find the mean and standard deviation

# transform train and test sets
X_train_scaled = scaler.transform(X_train) # Applying formula of scaling
X_test_scaled = scaler.transform(X_test)

# we always learning from training data and transformation is always perform on the both the train and test data.
scaler.mean_

Выход :-

X_train

Выход :-

X_train_scaled = pd.DataFrame(X_train_scaled, columns=X_train.columns)
X_test_scaled = pd.DataFrame(X_test_scaled, columns=X_test.columns)
X_train_scaled

Вывод: - значения после масштабирования…

np.round(X_train.describe(), 1)

Выход :-

np.round(X_train_scaled.describe(), 1)

Выход: - После масштабирования среднее значение = 0 и стандартное отклонение = 1

Эффект масштабирования:-

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5))

ax1.scatter(X_train['Age'], X_train['EstimatedSalary'])
ax1.set_title("Before Scaling")
ax2.scatter(X_train_scaled['Age'], X_train_scaled['EstimatedSalary'],color='red')
ax2.set_title("After Scaling")
plt.show()

Вывод :-

На приведенном выше графике мы ясно видим, что масштабы изменяются с центрированием среднего, а стандартное отклонение ограничено.

Сравнение дистрибутивов:-

# For age feature
  fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5))
  
  # before scaling
  ax1.set_title('Age Distribution Before Scaling')
  sns.kdeplot(X_train['Age'], ax=ax1)
  
  # after scaling
  ax2.set_title('Age Distribution After Standard Scaling')
  sns.kdeplot(X_train_scaled['Age'], ax=ax2)
  plt.show()
  
# For salary feature
  fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5))
  
  # before scaling
  ax1.set_title('Salary Distribution Before Scaling')
  sns.kdeplot(X_train['EstimatedSalary'], ax=ax1)
  
  # after scaling
  ax2.set_title('Salary Distribution Standard Scaling')
  sns.kdeplot(X_train_scaled['EstimatedSalary'], ax=ax2)
  plt.show()

Выход :-

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

Почему важно масштабирование?

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr_scaled = LogisticRegression()
lr.fit(X_train,y_train)
lr_scaled.fit(X_train_scaled,y_train)

Выход :-

y_pred = lr.predict(X_test)
y_pred_scaled = lr_scaled.predict(X_test_scaled)
from sklearn.metrics import accuracy_score
print("Actual",accuracy_score(y_test,y_pred))
print("Scaled",accuracy_score(y_test,y_pred_scaled))

Выход :-

Вот ответ, почему масштабирование важно? Потому что после масштабирования точность увеличивается, и модель также работает хорошо.

Эффект выброса:-

Добавление точек выброса…..

df = df.append(pd.DataFrame({'Age':[5,90,95],'EstimatedSalary':[1000,250000,350000],'Purchased':[0,1,1]}),ignore_index=True)
df

Выход :-

plt.scatter(df['Age'], df['EstimatedSalary'])

Выход :-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df.drop('Purchased', axis=1),
                                                    df['Purchased'],
                                                    test_size=0.3,
                                                    random_state=0)

X_train.shape, X_test.shape

Выход :-

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

# fit the scaler to the train set, it will learn the parameters
scaler.fit(X_train)

# transform train and test sets
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
X_train_scaled = pd.DataFrame(X_train_scaled, columns=X_train.columns)
X_test_scaled = pd.DataFrame(X_test_scaled, columns=X_test.columns)
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5))

ax1.scatter(X_train['Age'], X_train['EstimatedSalary'])
ax1.set_title("Before Scaling")
ax2.scatter(X_train_scaled['Age'], X_train_scaled['EstimatedSalary'],color='red')
ax2.set_title("After Scaling")
plt.show()

Выход :-

Наблюдение: влияние выброса не уменьшается после масштабирования. Таким образом, вы должны явно обрабатывать выбросы.

Когда использовать стандартизацию?

Используйте стандартизацию при работе по следующим алгоритмам.

Ссылка на код и набор данных:-



Практический пример 2 :-



Нормализация:-

Нормализация — это метод предварительной обработки данных, целью которого является приведение значений набора данных в стандартизированный диапазон или формат.

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

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

Методы нормализации:-

  1. Мин. Макс. Масштабирование
  2. Средняя нормализация
  3. Максимальное абсолютное масштабирование
  4. Надежное масштабирование

1.Мин. Макс. Масштабирование :-

Формула: -

Геометрическая интуиция Min Max Scaling:-

Практический пример 1) :-

import numpy as np # linear algebra
import pandas as pd # data processing
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_csv('D:/Machine Learning/Feature Scaling/Normalization/wine_data.csv',header=None,usecols=[0,1,2])
df.columns=['Class label', 'Alcohol', 'Malic acid']
 df

Выход :-

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df.drop('Class label', axis=1),
                                                    df['Class label'],
                                                    test_size=0.3,
                                                    random_state=0)

X_train.shape, X_test.shape

Выход :-

Min Max Scalar:- MinMaxScaler — это класс, присутствующий в библиотеке scikit-learn, который помогает в нормализации.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

# fit the scaler to the train set, it will learn the parameters
scaler.fit(X_train) # we find the min and max value

# transform train and test sets
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
X_train_scaled = pd.DataFrame(X_train_scaled, columns=X_train.columns)
X_test_scaled = pd.DataFrame(X_test_scaled, columns=X_test.columns)
np.round(X_train.describe(), 1)

Вывод: - Минимальные и максимальные значения перед масштабированием →

np.round(X_train_scaled.describe(), 1)

Вывод: - Минимальное и максимальное значение после масштабирования → минимальное значение = 0 и максимальное значение = 1

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 5))

ax1.scatter(X_train['Alcohol'], X_train['Malic acid'],c=y_train)
ax1.set_title("Before Scaling")
ax2.scatter(X_train_scaled['Alcohol'], X_train_scaled['Malic acid'],c=y_train)
ax2.set_title("After Scaling")
plt.show()

Выход :-

На приведенном выше графике мы ясно видим, что шкалы меняются с минимальным значением 0 и максимальным значением 1.

Ссылка на код и набор данных:-



Практический пример 2 :-



2. Средняя нормализация: -

Формула: -

После масштабирования мы получим значение в диапазоне от [-1 до 1].

3. Максимальное абсолютное масштабирование: -

Формула: -

4. Надежное масштабирование :-

Формула: -

Этот метод устойчив к выбросам, что означает, что он полезен, когда набор данных содержит выбросы.

О чем следует помнить перед масштабированием функций: –

  1. Требуется масштабирование.
  2. В большинстве случаев масштабирование функций осуществляется путем стандартизации.
  3. Min Max Scaling (Normalization) используется, когда вы уже знаете минимальное и максимальное значение вашего количества.
  4. Надежное масштабирование (нормализация) используется, когда набор данных содержит выбросы.

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