TGViewer
Data Science | Вопросы собесов Data Science | Вопросы собесов @easy_ds · 4.9K subscribers
Post #2651 341
🤔 Какие существуют способы кодирования категориальных переменных?

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

🟠One-Hot Encoding (Одинарное кодирование)
Преобразует каждую категорию в бинарный вектор. Для каждой категории создается отдельный бинарный признак.
Категориальный признак "Цвет" с возможными значениями "красный", "синий" и "зеленый" будет преобразован в три бинарных признака.
import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoded_colors = encoder.fit_transform(df[['Цвет']])

# Создание DataFrame с закодированными признаками
encoded_df = pd.DataFrame(encoded_colors, columns=encoder.get_feature_names_out(['Цвет']))
print(encoded_df)


🟠Label Encoding (Метка кодирования)
Преобразует каждую категорию в уникальное целое число. Этот метод прост, но может быть проблематичным для линейных моделей, так как они могут интерпретировать числовые значения как упорядоченные.
from sklearn.preprocessing import LabelEncoder

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием LabelEncoder
encoder = LabelEncoder()
df['Цвет_код'] = encoder.fit_transform(df['Цвет'])
print(df)


🟠Target Encoding (Целевая кодировка)
Заменяет категориальные признаки средним значением целевой переменной для каждой категории. Этот метод может улучшить качество модели, но требует осторожности, чтобы избежать переобучения.
import category_encoders as ce

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий'],
'Цена': [10, 15, 12, 10, 20]}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием TargetEncoder
encoder = ce.TargetEncoder(cols=['Цвет'])
df['Цвет_код'] = encoder.fit_transform(df['Цвет'], df['Цена'])
print(df)


🟠Ordinal Encoding (Порядковое кодирование)
Присваивает каждой категории уникальное целое число, как и Label Encoding, но используется, когда категории имеют естественный порядок.
from sklearn.preprocessing import OrdinalEncoder

# Пример данных
data = {'Размер': ['маленький', 'средний', 'большой']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием OrdinalEncoder
encoder = OrdinalEncoder(categories=[['маленький', 'средний', 'большой']])
df['Размер_код'] = encoder.fit_transform(df[['Размер']])
print(df)


🟠Binary Encoding (Бинарное кодирование)
Сначала преобразует категории в целые числа, а затем кодирует эти числа в двоичную форму.
import category_encoders as ce

# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием BinaryEncoder
encoder = ce.BinaryEncoder(cols=['Цвет'])
df = encoder.fit_transform(df)
print(df)


🟠Frequency Encoding (Частотное кодирование)
Заменяет каждую категорию на частоту её появления в данных.
# Пример данных
data = {'Цвет': ['красный', 'синий', 'зеленый', 'красный', 'синий']}
df = pd.DataFrame(data)

# Преобразование категориального признака с использованием Frequency Encoding
df['Цвет_частота'] = df['Цвет'].map(df['Цвет'].value_counts()) / len(df)
print(df)


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_ds
  1. Oct 10, 2026Post #2697
  2. Oct 10, 2026🤔 Что такое переобучение модели? Переобучение (overfitting) происходит, когда модель слиш…
  3. Oct 9, 2026Post #2695
  4. Oct 9, 2026🤔 Расскажи о Gradient-boosted trees Gradient-boosted trees — это ансамблевый метод машинн…
  5. Oct 9, 2026🤔 Какие слабые стороны есть у алгоритма кластериации ? Алгоритмы кластеризации имеют неск…
  6. Oct 8, 2026🤔 В чем разница между листом и кортежем? В Python список (list) — это изменяемая коллекци…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →