Ответ
Мета-признаки (meta-features) — это признаки, которые описывают не сами объекты выборки, а свойства исходных признаков, объектов или датасета в целом. Они извлекаются из данных и добавляются к основным признакам для предоставления модели дополнительного контекста, что часто улучшает её обобщающую способность.
Основные типы мета-признаков:
- Статистические по объекту:
- Среднее, медиана, стандартное отклонение значений признаков для данного объекта.
- Количество пропущенных значений (NaN) в строке.
- Количество нулей или выбросов в записи объекта.
- Статистические по признаку/датасету (чаще для AutoML):
- Skewness (скошенность) и kurtosis (эксцесс) распределения признака.
- Отношение числа объектов к числу признаков.
- Процент категориальных признаков.
- Сложностные (complexity measures):
- Оценка линейной разделимости классов.
- Энтропия распределения целевой переменной.
- Сгенерированные моделью (model-based):
- Важнейший тип на практике. Признаки, полученные на выходе других (часто более простых) моделей. Например, предсказания или вероятности от логистической регрессии, случайного леса или градиентного бустинга, обученных на тех же данных, используются как новые мета-признаки для финальной модели (стэкинг).
- Расстояние до центроидов кластеров, полученных алгоритмом K-Means.
Пример создания мета-признаков (model-based):
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.cluster import KMeans
# Исходные данные
X = pd.DataFrame({'feat1': np.random.randn(100), 'feat2': np.random.randn(100)})
y = (X['feat1'] + X['feat2'] > 0).astype(int)
# 1. Мета-признак: предсказание случайного леса (out-of-fold для избежания leakage)
from sklearn.model_selection import cross_val_predict
rf = RandomForestClassifier(n_estimators=50, random_state=42)
X['meta_rf_pred'] = cross_val_predict(rf, X, y, cv=5, method='predict_proba')[:, 1]
# 2. Мета-признак: расстояние до кластеров
kmeans = KMeans(n_clusters=3, random_state=42).fit(X[['feat1', 'feat2']])
X['meta_cluster_dist'] = kmeans.transform(X[['feat1', 'feat2']]).min(axis=1)
# 3. Мета-признак: статистика по строке
X['meta_row_mean'] = X[['feat1', 'feat2']].mean(axis=1)
X['meta_row_std'] = X[['feat1', 'feat2']].std(axis=1)
print("DataFrame with meta-features:n", X.head())
# Теперь X содержит исходные признаки + 4 новых мета-признака
Применение: Feature engineering, стэкинг (stacking) моделей, автоматическое машинное обучение (AutoML) для характеристики датасетов.