В ансамблевых методах обучения, таких как bagging (например, Random Forest) и boosting (например, AdaBoost, Gradient Boosting), первое дерево играет важную роль. Удаление первого дерева может существенно повлиять на конечные предсказания, и эффект будет различаться в зависимости от метода ансамбля. Рассмотрим это более подробно.
В методах bagging каждое дерево обучается независимо от остальных, используя случайную подвыборку данных. Удаление первого дерева не должно кардинально изменить общие предсказания, так как остальные деревья продолжают работать независимо. Точность модели может немного снизиться из-за уменьшения общего числа деревьев, что может слегка уменьшить стабильность и точность предсказаний.
В Random Forest, например, предсказания делаются путем голосования всех деревьев. Удаление одного дерева уменьшит число голосов, но не приведет к значительным изменениям, особенно если количество деревьев велико.
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Загрузка данных
iris = load_iris()
X, y = iris.data, iris.target
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Создание и обучение модели Random Forest с 100 деревьями
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Удаление первого дерева (оставляем 99 деревьев)
model.estimators_ = model.estimators_[1:]
# Предсказание на тестовой выборке
y_pred = model.predict(X_test)
# Оценка точности
accuracy = accuracy_score(y_test, y_pred)
print(f"Точность после удаления первого дерева: {accuracy}")
В методах boosting каждое последующее дерево обучается на ошибках предыдущих. Первое дерево определяет начальное распределение ошибок, и все последующие деревья строятся на основе этого. Удаление первого дерева может существенно нарушить цепочку обучения. Новое первое дерево не будет обучено с учетом тех же ошибок, что и удаленное, что может привести к значительным изменениям в предсказаниях.
В AdaBoost каждое дерево получает вес, основанный на его точности. Удаление первого дерева изменит веса всех последующих деревьев. В Gradient Boosting первое дерево устанавливает начальные предсказания, и все последующие деревья корректируют эти предсказания. Удаление первого дерева изменит базовые предсказания, что повлияет на все дальнейшие коррекции.
from sklearn.ensemble import GradientBoostingClassifier
# Создание и обучение модели Gradient Boosting с 100 деревьями
model = GradientBoostingClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Удаление первого дерева (оставляем 99 деревьев)
model.estimators_ = model.estimators_[1:]
# Предсказание на тестовой выборке
y_pred = model.predict(X_test)
# Оценка точности
accuracy = accuracy_score(y_test, y_pred)
print(f"Точность после удаления первого дерева: {accuracy}")
Ставь 👍 и забирай 📚 Базу знаний