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

Что такое мета-признаки?

2.4 Senior🔥 61 комментариев
#Машинное обучение

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

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

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

Мета-признаки в Machine Learning

Мета-признаки (meta-features) — это признаки, вычисленные на основе характеристик самих данных или результатов других моделей, а не из исходных сырых признаков. Они используются в двух основных контекстах: meta-learning и stacking.

Концепция и определение

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

Пример различия:

  • Обычный признак: возраст, зарплата, количество покупок
  • Мета-признак: среднее значение признака, количество пропусков, степень корреляции с целевой переменной

Применение 1: Stacking (наслоение моделей)

В методе stacking мета-признаки — это предсказания базовых моделей.

from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_predict
import numpy as np

# Базовые модели
model1 = RandomForestClassifier(n_estimators=100)
model2 = GradientBoostingClassifier(n_estimators=100)

# Получаем предсказания базовых моделей (мета-признаки)
meta_features_1 = cross_val_predict(model1, X_train, y_train, cv=5, method="predict_proba")
meta_features_2 = cross_val_predict(model2, X_train, y_train, cv=5, method="predict_proba")

# Объединяем мета-признаки
meta_X_train = np.concatenate([meta_features_1, meta_features_2], axis=1)

# Мета-модель обучается на этих признаках
meta_model = LogisticRegression()
meta_model.fit(meta_X_train, y_train)

# На тестовых данных
meta_features_1_test = model1.predict_proba(X_test)
meta_features_2_test = model2.predict_proba(X_test)
meta_X_test = np.concatenate([meta_features_1_test, meta_features_2_test], axis=1)
y_pred = meta_model.predict(meta_X_test)

Применение 2: Meta-Learning

В meta-learning мета-признаки описывают характеристики датасета для выбора лучшего алгоритма.

import pandas as pd
from scipy import stats

def compute_meta_features(X, y):
    """Вычисляем мета-признаки датасета"""
    meta = {}
    
    # Информация о размере
    meta["n_samples"] = X.shape[0]
    meta["n_features"] = X.shape[1]
    meta["ratio_samples_features"] = X.shape[0] / X.shape[1]
    
    # Информация о признаках
    meta["missing_values_ratio"] = X.isnull().sum().sum() / (X.shape[0] * X.shape[1])
    meta["numeric_features_ratio"] = X.select_dtypes(include=["number"]).shape[1] / X.shape[1]
    
    # Информация о целевой переменной
    if y.dtype == "object":
        meta["n_classes"] = y.nunique()
        class_dist = y.value_counts() / len(y)
        meta["class_imbalance"] = class_dist.max() - class_dist.min()
    else:
        meta["target_skewness"] = stats.skew(y)
        meta["target_kurtosis"] = stats.kurtosis(y)
    
    # Статистические характеристики
    meta["mean_feature_mean"] = X.mean().mean()
    meta["mean_feature_std"] = X.std().mean()
    
    return meta

# Пример использования
meta_features_dataset = compute_meta_features(X, y)
print(meta_features_dataset)

Практические примеры мета-признаков

Для классификации:

  • Количество классов
  • Коэффициент дисбаланса классов
  • Энтропия распределения классов
  • Предсказания базовых моделей (для stacking)

Для регрессии:

  • Асимметрия целевой переменной (skewness)
  • Эксцесс (kurtosis)
  • Коэффициент вариации
  • Остатки от быстрых моделей (для stacking)

Общие признаки датасета:

  • Размер датасета (количество примеров)
  • Количество признаков
  • Доля пропусков
  • Процент категориальных признаков
  • Матрица корреляции

Использование в AutoML

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

class MetaLearningSelector:
    """Выбирает модель на основе мета-признаков датасета"""
    
    def __init__(self):
        self.meta_models = {
            "small_dataset": RandomForestClassifier(max_depth=10),
            "large_dataset": GradientBoostingClassifier(),
            "imbalanced_dataset": None
        }
    
    def select_model(self, X, y):
        meta_feats = compute_meta_features(X, y)
        
        if meta_feats["n_samples"] < 10000:
            return self.meta_models["small_dataset"]
        elif meta_feats["class_imbalance"] > 0.4:
            return BalancedRandomForest()
        else:
            return self.meta_models["large_dataset"]

selector = MetaLearningSelector()
best_model = selector.select_model(X_train, y_train)

Преимущества и недостатки

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

  • Повышают точность в ensemble методах
  • Помогают автоматически выбирать алгоритмы
  • Уменьшают время гиперпараметрической оптимизации
  • Работают независимо от исходных признаков

Недостатки:

  • Увеличивают сложность модели
  • Требуют дополнительных вычислений
  • Могут привести к переобучению (особенно в stacking)
  • Требуют тщательной кросс-валидации

Лучшие практики

  • Всегда используй кросс-валидацию при создании мета-признаков
  • Не утекай информацию из тестового набора в мета-признаки
  • Регуляризируй мета-модели для предотвращения переобучения
  • Проверяй важность мета-признаков

Мета-признаки — мощный инструмент для повышения качества ML-систем и создания адаптивных решений.