
Методы подготовки числовых данных для моделей машинного обучения на Python
Искусство выделения признаков для числовых переменных в Python
Представьте себе, что вы нырнули в невидимый океан данных. Среди волн и рифов статистических узоров таится настоящая жемчужина — признаковое инженерное дело. Но не пугайтесь, не нужно ни акваланга, ни магических артефактов. Просто позвольте себе шагнуть в мир, где бинарные факты превращаются в богатую информацию. В этом текстовом путеводителе мы разберемся, как обрабатывать числовые переменные в Python, и сделаем это с огоньком, как в старом добром чаепитии.
Зачем нам выделение признаков?
Прежде чем углубиться в наше весёлое приключение, дайте мне напомнить, почему выделение признаков подобно солнечному свету в нашем механическом мире. Вы знали, что, согласно исследованиям Forbes, всего 20% времени данные ученые тратят на создание моделей? 80% — это всё о подготовке данных, и здесь на сцену выходит выделение признаков. Это как налить те самые укрывшие прелести ароматы в домашний чай — без этого вы лишь напитаетесь чем-то невыразительным.
Основные приёмы работы с числовыми переменными
1. Импутация
Представьте, что в вашем инструменте стали отсутствовать ноты. Это искажение несоизмеримо с отсутствием данных. Импутация — это способ заполнить пробелы. О, да, это может быть так просто!
- Импутация среднего/медианного/модального значения: лучший способ заполнить пустоты — нахватаемся за статистики!
- Импутация с использованием K-ближайших соседей (KNN): представьте, что вы гадаете, как смягчить бедствие, опираясь на соседей.
- Множественная импутация: когда у вас есть множество возможных ответов, задание разнообразия — это искусство.
import pandas as pd
import numpy as np
# Пример: Импутация среднего
df['column_name'].fillna(df['column_name'].mean(), inplace=True)
2. Обработка выбросов
Свежий воздух и большая закуска? Не с выбросами! Они могут испортить ваше восприятие. Работайте с ними, как с занозами:
- Удаление: порой надо просто выбросить выбросы.
- Замена: бросьте их в ведро со средним значением.
- Ограничение: установите пределы, чтобы исключить эти непрошенные "гости".
# Пример: Ограничение выбросов
df['column_name'] = np.clip(df['column_name'], a_min=df['column_name'].quantile(0.01), a_max=df['column_name'].quantile(0.99))
3. Биннинг
Не всегда стоит оставлять числа без дела. Биннинг поможет преобразовать их в удобные порции. Но будьте осторожны, это может забрать немного информации с собой. Биннинг — это как разрезать пирог на кусочки, но не забывайте о том, что каждый кусок — это произведение искусства.
# Пример: Биннинг
bins = [0, 30, 70, 100]
labels = ['Низкий', 'Средний', 'Высокий']
df['binned_column'] = pd.cut(df['column_name'], bins=bins, labels=labels)
4. Логарифмическое преобразование
Иногда простая замена не спасёт ситуацию. Логарифмическое преобразование поможет нормализовать данные и снизить влияние чрезмерных значений. Это своего рода магия, как добавление капли лимона в крепкий чай.
# Пример: Логарифмическое преобразование
df['log_column'] = np.log(df['column_name'])
5. Масштабирование
Каждая деталь должна иметь свою роль. Масштабирование уравнивает шансы. Применяйте нормализацию и стандартизацию так же, как в рецепте, чтобы каждый ингредиент был на месте.
from sklearn.preprocessing import StandardScaler
# Пример: Стандартизация
scaler = StandardScaler()
df['scaled_column'] = scaler.fit_transform(df['column_name'].values.reshape(-1, 1))
6. Агрегация
Собираем, собираем, собираем. Смешиваем весь этот поток данных — количество, сумму, среднее, максимум, минимум и т.д. — чтобы создать огромное полотно под названием: «Наши данные».
# Пример: Агрегация
df['aggregated_column'] = df.groupby('group_column')['column_name'].mean()
7. Разделение признаков
Иногда один признак слишком уменён, чтобы просто существовать. Разделяйте их, чтобы получить больше красок. Например, разбить дату на год, месяц и день — это как разобрать чудо-валенсию на составляющие.
# Пример: Разделение признаков
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
8. Линейные комбинации
Создайте новый признак, используя простые математические операции. Вот так, как вы смешиваете несколько видов чая для получения нового уникального вкуса.
# Пример: Линейная комбинация
df['area'] = df['width'] * df['height']
9. Счётный столбец
Создание колонки, показывающей частоту значений, поможет принимать решения так же, как число людей на собрании определяет, кто станет лидером.
# Пример: Счётный столбец
counts = df['column_name'].value_counts().to_dict()
df['column_name_counts'] = df['column_name'].map(counts)
Лучшие практики
- Объединяйте обучающую и тестовую выборки: при выделении признаков работаете с целью обеспечения согласованности на всём диапазоне данных.
- Оценивайте новые признаки: тестируйте новшества и проверяйте, как они влияют на модель. Убирайте то, что не работает.
Заключение
Выделение признаков — это искусство, сочетающее в себе сложность и простоту. Понимание данных и области проблемы ваши лучшие друзья на этом пути. Применяя эти техники, вы сможете улучшить результаты своих машинных моделей. Теперь запаситесь терпением, экспериментируйте и не забывайте оценивать. Подобно чашкам чая, данные, правильно обработанные, способны открыть безграничные возможности.
Хотите быть в курсе последних новостей о нейросетях и автоматизации? Подпишитесь на наш Telegram-канал: @neuroko