Темы, которые будут освещены в этом блоге:-

  1. Что такое функциональная инженерия
  2. Методы разработки признаков
  3. Типы преобразования объектов
  4. Тип масштабирования функции преобразования функции
  5. Необходимость масштабирования функций
  6. Типы масштабирования функций
  7. СТАНДАРТИЗАЦИЯ
  8. Влияние выброса на «стандартизацию»
  9. Пример по «коду»

Разработка признаков — это процесс использования знаний предметной области о данных для создания признаков (переменных), которые заставляют работать алгоритмы машинного обучения. Разработка признаков имеет основополагающее значение для применения машинного обучения и является сложной и дорогостоящей задачей. Это требует как творчества, так и знаний в предметной области. Процесс разработки признаков включает в себя выбор соответствующих признаков из необработанных данных, создание новых признаков из существующих данных, а также выбор и преобразование признаков для повышения точности модели.

Некоторые распространенные методы разработки признаков включают в себя:

«Горячее кодирование» для категориальных переменных «Нормализация» и «Стандартизация» для числовых переменных Создание полиномиальных или интерактивных функций Агрегирование данных в разных временных масштабах Работа с несбалансированными классами.

Feature Engineering состоит из 4 частей: -

Преобразование объекта

Построение функций

Выбор функций

Извлечение признаков

1.Преобразование функций-

  • Вычисление пропущенного значения —

Перед обучающей моделью мы должны удалить все пропущенные значения либо удалить, либо заполнить другими значениями.

  • Обработка категориальных функций-

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

  • Обнаружение выбросов –

Мы должны удалить выбросы в данных, поскольку они могут плохо повлиять на данные. Для обнаружения выбросов существует множество методик

  • Масштабирование функций –

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

2. Особенности конструкции -

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

  • Пример: два столбца роста и веса, ИМТ может создать новый столбец, объединив значения обоих столбцов с помощью расчета ИМТ.

3. Выбор функций-

у тебя нет. входных столбцов, и нам нужно идентифицировать, чтобы выбрать некоторые столбцы.

  • Пример: в «Данные MNIST» есть функция изображения 50 000, поэтому включение всех функций не подходит для применения модели, поэтому я буду определять и выбирать полезные изображения. (данные MNIST — «центральные данные имеют изображения цифр, поэтому верхние и нижние можно удалить»)

4. Извлечение функций-

Мы создаем совершенно новые функции по заданному столбцу, это не то же самое, что построение функций.

  • Функции прогноза Ex-House (комната, туалет, цена), поэтому комната и туалет важны как переменные, и нам нужно взять только один столбец, и мы не можем удалить ни один из них, поэтому мы создадим новое имя столбца (квадратные футы), которое имеет площадь обоих объектов (комната, ванная)

Преобразование функций: - Масштабирование функций

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

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

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

Некоторые распространенные методы масштабирования функций включают: –

  • 1- Масштабирование Min-Max: масштабирует данные до фиксированного диапазона (обычно от 0 до 1).
  • 2- Стандартизация: масштабирует данные так, чтобы они имели среднее значение 0 и стандартное отклонение 1.

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

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

1– Стандартизация (нормализация Zscore)

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

– Мин.-макс. масштабирование

– Надежный масштабатор

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

Стандартизация — это метод масштабирования объекта таким образом, чтобы его среднее значение равнялось 0, а стандартное отклонение равнялось 1. Это делается путем вычитания среднего значения из каждой точки данных и деления на стандартное отклонение.

Формула стандартизации:

  • Z = (x — среднее (x)) / стандартное отклонение (x)

где "x" — это исходная функция, а "Z" — стандартизированная функция.

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

Влияние ВЫБРОСОВ:-

  • Выбросы обычно существенно не меняются даже после стандартного масштабирования из-за самой природы стандартизации.
  • Стандартное масштабирование центрирует данные вокруг среднего значения. Выбросы имеют экстремальные значения, и их положение все еще далеко от среднего даже после стандартизации, таким образом сохраняя свой статус выброса.
  • Выбросы, как правило, влияют на разброс или изменчивость данных, которые представлены стандартным отклонением. Стандартное масштабирование корректирует стандартное отклонение до 1, но относительное влияние выбросов на разброс данных остается аналогичным.
  • Нормализация Z-оценки может не обнаруживать и удалять выбросы автоматически. Процесс просто масштабирует данные на основе их Z-показателей, а экстремальные значения за пределами допустимого диапазона Z-показателей автоматически не обрабатываются.

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

Масштабирование функций в наборе данных «Реклама в социальных сетях» -

О данных: –

  • Набор данных «Реклама в социальных сетях» представляет собой набор точек данных, представляющих информацию о пользователях и о том, совершили ли они покупку определенного продукта после просмотра рекламы на платформе социальной сети.

Набор данных Social Network Ads содержит следующие столбцы:

  1. Идентификатор пользователя. Уникальный идентификатор для каждого пользователя.
  2. Пол. Пол пользователя (например, мужчина или женщина).
  3. Возраст. Возраст пользователя в годах.
  4. Расчетная зарплата. Ориентировочная зарплата пользователя в определенной валюте.
  5. Куплено. Целевая переменная указывает, совершил ли пользователь покупку (0 – нет, 1 – да).

#Это проблема классификации: пользователь купит продукт или пользователь не купит продукт.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_csv('Social_Network_Ads.csv')

df = df.iloc[:,2:] # Removed "USer Id" and "Gender" column
df.sample(5) #Randomaly checking data
# 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

СТАНДАРТНЫЙ СКЕЙЛЕР -

Это класс Scikit-Learn, он преобразует каждое значение по формуле (x — mean(x)) / std.dev(x)

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler() #created object

# 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)
scaler.mean_  
array([3.78642857e+01, 6.98071429e+04]) # Age Mean , Salary Mean
X_train_scaled = pd.DataFrame(X_train_scaled, columns = X_train.columns)
X_test_scaled = pd.DataFrame(X_test_scaled, columns = X_test.columns)

# Converting arrays value into DataFrame as when we apply standardization 
# process it convert datframe into array.
np.round(X_train.describe(),1)
# by using "Describe" can easily check original Mean value of "age" and "salary"
# is in numbers "37.9" and "69807"
# also "Standard Deviation" is in "age - 10.2" and in "Salary - 34641.2"
np.round(X_train_scaled.describe(),1) 
# can check now after scaling the dataset Mean is "0" and Std is "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()

  • можно видеть, что на графике нет разницы, как таковой, на обоих графиках означает, что форма одинакова, но масштаб теперь изменяется на «40», среднее значение равно «0», а стандартное отклонение равно 1. Теперь данные «среднецентричны».
# for looking the difference in graph of scaling now Iwill plot "KDEPLOT"

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

# before scaling
ax1.set_title('Before Scaling')
sns.kdeplot(X_train['Age'], ax = ax1)
sns.kdeplot(X_train['EstimatedSalary'], ax = ax1)


# after scaling
ax2.set_title('After Standard Scaling')
sns.kdeplot(X_train_scaled['Age'], ax = ax2)
sns.kdeplot(X_train_scaled['EstimatedSalary'], ax = ax2)

plt.show()

  • На графике «Функция плотности вероятности (PDF)» показаны «оранжевая линия» — «зарплата», а «синяя линия» — «возраст».
  • На первом графике синяя линия находится на пике, потому что находится в небольшом диапазоне (20–60 лет), а зарплата в большом диапазоне.
  • После масштабирования оба дистрибутива теперь можно сравнивать.

Сравнение распределения по одной переменной

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()

  • Хорошо видно, что после масштабирования в диапазоне «Возраст» ничего не меняется.
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))
# can see scaling change the accuracy.

Фактическое 0,65833333333333

Масштаб 0,86666666666667

Алгоритм дерева решений:

  • Алгоритм дерева решений не зависит от масштабирования функций из-за его внутренней природы принятия решений на основе сравнения функций.
  • Поскольку масштаб признаков не влияет на относительный порядок точек данных, границы решений, созданные деревом, остаются неизменными, независимо от масштаба признаков.
# on decision tree algorithm scaling wont effect
from sklearn.tree import DecisionTreeClassifier

dt = DecisionTreeClassifier()
dt_scaled = DecisionTreeClassifier()

dt.fit(X_train, y_train)
dt_scaled.fit(X_train_scaled,y_train)
y_pred = dt.predict(X_test)
y_pred_scaled = dt_scaled.predict(X_test_scaled)


print("Actual", accuracy_score(y_test,y_pred))
print("Scaled", accuracy_score(y_test, y_pred_scaled))

Фактический 0,875

Масштаб 0,86666666666667

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

Найдите меня здесь:

Github: https://github.com/21Nimisha

Linkedin: https://www.linkedin.com/in/nimisha-singh-b6183419/