Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое блендинг?
Блендинг (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)
Ключевые выводы
-
Блендинг — это простой способ объединить предсказания нескольких моделей
-
Основные типы:
- Простое среднее
- Взвешенное среднее
- Голосование
-
Блендинг vs Стекинг: Блендинг проще, Стекинг мощнее
-
Веса можно: выбрать вручную, найти на validation set, оптимизировать
-
На практике: используйте разные алгоритмы для разнообразия
-
Результат: обычно улучшение качества на 0.5-2% в зависимости от моделей