Темы, которые будут освещены в этом блоге:-
- Что такое функциональная инженерия
- Методы разработки признаков
- Типы преобразования объектов
- Тип масштабирования функции преобразования функции
- Необходимость масштабирования функций
- Типы масштабирования функций
- СТАНДАРТИЗАЦИЯ
- Влияние выброса на «стандартизацию»
- Пример по «коду»
Разработка признаков — это процесс использования знаний предметной области о данных для создания признаков (переменных), которые заставляют работать алгоритмы машинного обучения. Разработка признаков имеет основополагающее значение для применения машинного обучения и является сложной и дорогостоящей задачей. Это требует как творчества, так и знаний в предметной области. Процесс разработки признаков включает в себя выбор соответствующих признаков из необработанных данных, создание новых признаков из существующих данных, а также выбор и преобразование признаков для повышения точности модели.
Некоторые распространенные методы разработки признаков включают в себя:
«Горячее кодирование» для категориальных переменных «Нормализация» и «Стандартизация» для числовых переменных Создание полиномиальных или интерактивных функций Агрегирование данных в разных временных масштабах Работа с несбалансированными классами.
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 содержит следующие столбцы:
- Идентификатор пользователя. Уникальный идентификатор для каждого пользователя.
- Пол. Пол пользователя (например, мужчина или женщина).
- Возраст. Возраст пользователя в годах.
- Расчетная зарплата. Ориентировочная зарплата пользователя в определенной валюте.
- Куплено. Целевая переменная указывает, совершил ли пользователь покупку (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/