← Назад к вопросам

Что такое блендинг?

2.0 Middle🔥 181 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое блендинг?

Блендинг (Blending) — это техника ансамблирования моделей, которая объединяет предсказания нескольких моделей в одно финальное предсказание.

Суть идеи

Вместо использования одной модели, мы обучаем несколько различных моделей, получаем их предсказания и объединяем их.

Основные подходы блендинга

1. Простое среднее (Average Blending)

final_prediction = (pred1 + pred2 + pred3) / 3

2. Взвешенное среднее (Weighted Average)

final_prediction = 0.5 * pred1 + 0.3 * pred2 + 0.2 * pred3

3. Голосование (Voting)

# Hard voting: большинством голосов
final_prediction = np.mode([pred1, pred2, pred3])

# Soft voting: среднее вероятностей
final_prediction = np.mean([pred1_proba, pred2_proba, pred3_proba], axis=0)

Полный пример с кодом

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.metrics import roc_auc_score

# Загружаем данные
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Обучаем несколько моделей
model1 = RandomForestClassifier(n_estimators=100, random_state=42)
model2 = LogisticRegression(max_iter=1000, random_state=42)
model3 = SVC(probability=True, random_state=42)

model1.fit(X_train, y_train)
model2.fit(X_train, y_train)
model3.fit(X_train, y_train)

# Получаем предсказания (вероятности)
pred1 = model1.predict_proba(X_test)[:, 1]
pred2 = model2.predict_proba(X_test)[:, 1]
pred3 = model3.predict_proba(X_test)[:, 1]

# Простое среднее (Average Blending)
avg_pred = (pred1 + pred2 + pred3) / 3

# Взвешенное среднее
weighted_pred = 0.4 * pred1 + 0.35 * pred2 + 0.25 * pred3

# Сравнение результатов
print("Результаты отдельных моделей:")
print(f"Model 1 AUC: {roc_auc_score(y_test, pred1):.4f}")
print(f"Model 2 AUC: {roc_auc_score(y_test, pred2):.4f}")
print(f"Model 3 AUC: {roc_auc_score(y_test, pred3):.4f}")

print("Результаты блендинга:")
print(f"Average Blending AUC: {roc_auc_score(y_test, avg_pred):.4f}")
print(f"Weighted Blending AUC: {roc_auc_score(y_test, weighted_pred):.4f}")

Блендинг vs Стекинг vs Бустинг

Блендинг:

  • Несколько моделей первого уровня
  • Предсказания объединяются простой функцией
  • Простая реализация
  • Менее мощный

Стекинг:

  • Несколько моделей первого уровня
  • Их предсказания используются как входные признаки для модели второго уровня
  • Более сложная реализация
  • Более мощный

Бустинг:

  • Модели обучаются последовательно
  • Каждая модель исправляет ошибки предыдущих
  • Очень мощный (XGBoost, LightGBM)

Поиск оптимальных весов

from scipy.optimize import minimize

def neg_auc(weights):
    w = weights / np.sum(weights)
    blended_pred = w[0] * pred1 + w[1] * pred2 + w[2] * pred3
    return -roc_auc_score(y_test, blended_pred)

initial_weights = np.array([1/3, 1/3, 1/3])
constraints = {'type': 'eq', 'fun': lambda w: np.sum(w) - 1}
bounds = [(0, 1) for _ in range(3)]

result = minimize(neg_auc, initial_weights, method='SLSQP', 
                  bounds=bounds, constraints=constraints)

optimal_weights = result.x / np.sum(result.x)
print(f"Оптимальные веса: {optimal_weights}")

Когда использовать блендинг?

Преимущества:

  • Просто реализуется
  • Быстро
  • Часто даёт хорошее улучшение качества
  • Нет переобучения на validation данных

Недостатки:

  • Менее мощный чем стекинг
  • Все модели обучаются независимо
  • Весовые коэффициенты часто выбираются эвристически

Практический совет для Kaggle

# Обучаем разные модели
models = [
    RandomForestClassifier(n_estimators=100),
    GradientBoostingClassifier(n_estimators=100),
    XGBClassifier(n_estimators=100),
    LGBMClassifier(n_estimators=100),
    SVC(probability=True)
]

# Получаем предсказания
predictions = []
for model in models:
    model.fit(X_train, y_train)
    pred = model.predict_proba(X_test)[:, 1]
    predictions.append(pred)

# Блендим
final_pred = np.mean(predictions, axis=0)

Ключевые выводы

  1. Блендинг — это простой способ объединить предсказания нескольких моделей

  2. Основные типы:

    • Простое среднее
    • Взвешенное среднее
    • Голосование
  3. Блендинг vs Стекинг: Блендинг проще, Стекинг мощнее

  4. Веса можно: выбрать вручную, найти на validation set, оптимизировать

  5. На практике: используйте разные алгоритмы для разнообразия

  6. Результат: обычно улучшение качества на 0.5-2% в зависимости от моделей