#machine-learning #scikit-learn #random-forest #xgboost
#машинное обучение #scikit-learn #случайный лес #xgboost
Вопрос:
Я пытаюсь сравнить результаты точности (в наборе данных titanic) между random forest
и XGBoost
, и я не могу понять, почему random forest
дает лучшие результаты.
- XGBoost — это своего рода оптимизированная базовая модель дерева. Он вычисляет оптимизированное дерево каждый цикл (каждый новый оценщик).
- Случайный лес постройте много деревьев (с разными данными и разными функциями) и выберите лучшее дерево.
Я работаю над набором данных titanic (после обработки Nan и удаления некоторого шума). (Обе модели получают один и тот же набор данных)
Для обоих алгоритмов я настраиваю гиперпараметры.
Модель XGBoost:
model = XGBClassifier(n_jobs=-1, random_state=42)
hyperparams = {'max_depth': [2,3,4,5,6,7,8],
'n_estimators': [20, 50, 100, 120],
'learning_rate': [0.1, 0.2, 0.3, 0.4, 0.5]}
randomized = RandomizedSearchCV(model, hyperparams, n_iter=40, cv=5, random_state=42, scoring='accuracy')
randomized.fit(x,y)
best_params = randomized.best_estimator_
model = XGBClassifier(n_jobs=-1,
max_depth=best_params.max_depth,
n_estimators=best_params.n_estimators,
learning_rate=best_params.learning_rate)
model.fit(train_df_x, train_df_y)
y_pred = model.predict(test_df_x)
Модель случайного леса:
model = RandomForestClassifier(random_state=42, n_jobs=-1)
hyperparams = {'n_estimators': [20, 50, 100, 120],
'max_depth': [2,3,4,5,6,7,8]}
randomized = RandomizedSearchCV(model, hyperparams, n_iter=20, cv=5, random_state=42, scoring='accuracy')
randomized.fit(x, y)
best_params = randomized.best_estimator_
model = RandomForestClassifier(random_state=42,
n_jobs=-1,
n_estimators=best_params.n_estimators,
max_depth=best_params.max_depth)
model.fit(train_df_x, train_df_y)
y_pred = model.predict(test_df_x)
Как вы можете видеть:
- Я использую больше итераций гиперпараметров
XGBoost
(потому что у него больше параметров для настройки).
Я получаю следующие результаты точности:
- Случайный лес: 86,6
- XGBoost: 85.41
Перед запуском теста я был уверен, что XGBoost даст мне лучшие результаты.
Как это может random forest
дать лучшие результаты? Чего мне не хватает при использовании XGBoost
?
Комментарии:
1. RF — очень мощный классификатор в целом . Тот факт, что XGBoost обычно работает лучше, носит эмпирический и статистический характер и не оправдывает ваше удивление здесь; в конце концов, многое зависит от конкретного набора данных.
2. Набор данных titanic невелик. Возможно, если у вас будет гораздо больше данных, то с Xgboost вы получите лучшие результаты. Но это очень сильно зависит от данных…