Оглавление :-
что такое масштабирование объектов?
зачем нам нужно масштабирование функций?
Типы масштабирования функций: стандартизация и нормализация
моменты, которые следует помнить перед масштабированием функций.
Что такое масштабирование функций?
Масштабирование признаков — это метод стандартизации или нормализации независимых признаков, присутствующих в данных в фиксированном диапазоне.
Например: Предположим, у нас есть такие функции, как «IQ», «CGPA» и «пакет» студента. «IQ» находится в диапазоне «100», а «CGPA» — в диапазоне 10, тогда мы должны привести обе характеристики в примерно одинаковый диапазон (между 0–1).
Зачем нам нужно масштабирование функций?
Предположим, мы решаем задачу классификации с использованием алгоритма KNN. KNN в основном вычисляет расстояние (евклидово) между двумя точками, чтобы делать прогнозы.
В приведенном выше примере расстояние между двумя точками, основанное на признаке возраста, составляет 529, а расстояние, основанное на признаке заработной платы, составляет 1 225 000 000.
Функция заработной платы имеет гораздо большую величину, она будет доминировать при расчете расстояния, а функция возраста может не вносить существенного вклада в процесс принятия решений алгоритмом KNN. Таким образом, KNN не будет работать в этом случае.
Таким образом, масштабирование функций необходимо для обеспечения одинакового вклада всех функций и предотвращения доминирования функций с большими величинами в процессе обучения в алгоритмах машинного обучения.
Типы функций Масштабирование:-
- Стандартизация: - (также называемая нормализацией Z-показателя)
- Нормализация: -
Стандартизация: -
Формула: -
После стандартизации любой функции мы получим новые значения для этой функции… поэтому среднее значение этих значений будет равно нулю (μ = 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.Мин. Макс. Масштабирование :-
Формула: -
Геометрическая интуиция 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. Надежное масштабирование :-
Формула: -
Этот метод устойчив к выбросам, что означает, что он полезен, когда набор данных содержит выбросы.
О чем следует помнить перед масштабированием функций: –
- Требуется масштабирование.
- В большинстве случаев масштабирование функций осуществляется путем стандартизации.
- Min Max Scaling (Normalization) используется, когда вы уже знаете минимальное и максимальное значение вашего количества.
- Надежное масштабирование (нормализация) используется, когда набор данных содержит выбросы.
Спасибо, что присоединились ко мне в этом путешествии по масштабированию функций, и я с нетерпением жду возможности вместе приступить к более интересным исследованиям. Давайте продолжим расширять границы науки о данных и использовать масштабирование функций, чтобы существенно повлиять на наш анализ.