Раскройте истинный потенциал ваших данных: освойте методы проектирования функций для моделей машинного обучения на основе Python

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

Что такое функциональная инженерия?

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

Методы эффективного проектирования функций

1. Генерация признаков предметной области на основе знаний

Иногда знания предметной области могут использоваться для создания новых функций, которые не присутствуют непосредственно в данных. Например, в наборе данных, содержащем возраст и рост людей, вы можете создать новую функцию под названием «Индекс массы тела» (ИМТ), используя формулу:

BMI = weight / (height^2)

Эта новая функция может предоставить дополнительную информацию и повысить производительность вашей модели.

2. Категориальное кодирование

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

  • Кодировка метки. Назначьте уникальное целое число каждой категории.
  • Горячее кодирование: создайте двоичный столбец для каждой категории, где 1 означает наличие категории, а 0 — ее отсутствие.

Например, давайте закодируем список цветов, используя однократное кодирование:

import pandas as pd

colors = ['red', 'blue', 'green']
data = pd.DataFrame(colors, columns=['color'])
# One-Hot Encoding
encoded_data = pd.get_dummies(data['color'])
print(encoded_data)

3. Обработка пропущенных значений

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

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

Вот пример использования среднего вменения для заполнения пропущенных значений в Pandas DataFrame:

import numpy as np

data = pd.DataFrame({'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8]})
data.fillna(data.mean(), inplace=True)
print(data)

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

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

  • Нормализация: Масштабируйте объекты, чтобы они имели значения от 0 до 1.
  • Стандартизация: Масштабируйте объекты, чтобы иметь среднее значение 0 и стандартное отклонение 1.

Вот пример стандартизации функций с использованием StandardScaler Scikit-learn:

from sklearn.preprocessing import StandardScaler

data = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [100, 200, 300, 400]})
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(scaled_data)

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

Извлечение признаков включает в себя преобразование многомерных данных в низкоразмерное пространство с сохранением самой важной информации. Некоторые распространенные методы извлечения признаков включают:

  • Анализ основных компонентов (PCA). Линейное преобразование данных в низкоразмерное пространство.
  • t-Distributed Stochastic Neighbor Embedded (t-SNE): нелинейное преобразование данных с сохранением локальных взаимосвязей.

Вот пример использования PCA для уменьшения размерности набора данных:

from sklearn.decomposition import PCA

data = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [100, 200, 300, 400], 'C': [5, 6, 7, 8]})
pca = PCA(n_components=2)
reduced_data = pca.fit_transform(data)
print(reduced_data)

Методы выбора признаков

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

1. Методы фильтрации

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

  • Коэффициент корреляции Пирсона. Измеряет линейную зависимость между двумя непрерывными переменными.
  • Взаимная информация:определяет количественную зависимость между двумя переменными.

Например, вы можете использовать функцию SelectKBest из Scikit-learn, чтобы выбрать две лучшие функции на основе их общей информации с целевой переменной:

from sklearn.feature_selection import SelectKBest, mutual_info_classif

data = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [100, 200, 300, 400], 'C': [5, 6, 7, 8]})
target = [0, 1, 1, 0]
selector = SelectKBest(mutual_info_classif, k=2)
selected_data = selector.fit_transform(data, target)
print(selected_data)

2. Методы обертки

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

  • Рекурсивное устранение признаков (RFE): рекурсивно удаляет наименее важные признаки и обучает модель на оставшихся признаках.
  • Упреждающий выбор. Итеративно добавляет функции в модель и оценивает ее производительность.

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

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

data = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [100, 200, 300, 400], 'C': [5, 6, 7, 8]})
target = [0, 1, 1, 0]
model = LogisticRegression()
rfe = RFE(model, n_features_to_select=2)
rfe.fit(data, target)
selected_features = data.columns[rfe.support_]
print(selected_features)

Используя эти методы проектирования функций, вы можете создавать более эффективные модели машинного обучения в Python. Помните, что для поиска лучших функций требуется творческий подход, знание предметной области и хорошее понимание базовых данных. Удачного кодирования!

Если вам понравился этот контент, поставьте лайк! Ваша поддержка помогает нам создавать для вас более ценный контент.

Вы также можете подписаться на мои новые статьи или стать приглашенным участником Medium.

Вы можете поддержать меняфинансово здесь, ваша поддержка помогает мне продолжать часто создавать полезный контент! Спасибо дружище :)☕️

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.