Ответ
Метод случайных подпространств (Random Subspace Method, RSM) — это ансамблевый метод, направленный на повышение разнообразия базовых моделей за счёт обучения каждой из них на случайно выбранном подмножестве признаков (features) из исходного пространства.
Основная идея: Если обучить множество моделей на разных проекциях данных (разных наборах признаков), их ошибки будут менее коррелированы. При агрегации (например, усреднении или голосовании) таких моделей общая ошибка ансамбля уменьшается.
Как работает алгоритм:
- Для обучения каждого базового классификатора (чаще всего дерева решений) из исходного набора из
Dпризнаков случайным образом выбирается подмножество изdпризнаков (гдеd < D, обычноd = sqrt(D)илиlog2(D)). - Модель обучается только на этом подмножестве признаков. Все объекты (строки) используются полностью.
- Шаги 1-2 повторяются для
Nбазовых моделей. - При предсказании для нового объекта каждая модель делает прогноз на основе своего набора признаков, а итоговый прогноз ансамбля получается путём агрегации (голосования для классификации, усреднения для регрессии).
Преимущества метода:
- Снижает переобучение: Разные модели фокусируются на разных аспектах данных, что уменьшает дисперсию ансамбля.
- Повышает устойчивость к шуму в признаках.
- Эффективен для данных с большим количеством признаков (high-dimensional data), где многие признаки могут быть избыточными или слабо информативными.
- Ускоряет обучение каждой отдельной модели, так как она работает с меньшей размерностью.
Связь с Random Forest: Random Forest комбинирует две идеи: бутстрэп агрегирование (bagging), которое создаёт разнообразие за счёт разных подвыборок объектов, и метод случайных подпространств, создающий разнообразие за счёт разных подвыборок признаков. В Random Forest для каждого дерева обычно используется max_features = sqrt(n_features).
Пример реализации с помощью Scikit-learn:
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
# Генерация синтетических данных
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Создание модели Random Forest, которая использует принцип случайных подпространств
# Параметр max_features='sqrt' означает, что для каждого дерева будет выбрано sqrt(20) ~ 4 случайных признака
model = RandomForestClassifier(
n_estimators=100,
max_features='sqrt', # Ключевой параметр, реализующий RSM
random_state=42,
n_jobs=-1
)
model.fit(X_train, y_train)
print(f"Точность на тесте: {model.score(X_test, y_test):.3f}")
print(f"Пример размера подпространства для одного дерева: {model.estimators_[0].n_features_in_}")
На практике метод случайных подпространств редко используется в чистом виде, но является ключевым компонентом успешных ансамблевых алгоритмов, таких как Random Forest и ExtraTrees.