Найти тему
Вечный джун

Обучение на Титанике. Ну и нафиг нам лес если есть дерево?

1 часть, 2 часть, 3 часть, 4 часть, 5 часть...

Перейдём от отдельных деревьев к целым лесам.

Для начала импортируем эти леса.

from sklearn.ensemble import RandomForestClassifier

Ну и сразу создадим соответствующий классификатор.

clf = RandomForestClassifier()

Можно считать, что ты создали лес, теперь нам надо подобрать ему оптимальные параметры и обучить его.

-2

Мы конечно можем подбирать параметры через for, но это будет довольно долго, к тому же есть довольно удобный GridSearchCV, так что не будем мучиться и просто импортируем его.

from sklearn.model_selection import GridSearchCV

Теперь нам надо определиться с тем какие параметры мы будем подбирать.

Так как лес это куча деревьев мы естественно будем подбирать кол-во деревьев( n_estimators ) которые у нас будут в этом лесу. Помимо этого нам надо бы изменить критерий( criterion ) с gini на entropy, но сейчас мы их сравним чтобы посмотреть какой более эффективен. Помимо этого пройдёмся по максимальной глубине дерева( max_depth ), минимальному кол-ву объектов которое должно быть перед разделением( min_samples_split ) и какое кол-во должно быть минимум в каждом "разделённом"( min_samples_leaf ). Можно было бы просто перебрать все параметры, но мы этой фигнёй заниматься пока что не будем.

parametrs = {'n_estimators': range(50, 201, 50),
'criterion': ['gini', 'entropy'],
'max_depth': range(1, 10, 2),
'min_samples_split': range(6, 8),
'min_samples_leaf': range(3, 5)}
grid_search_cv_clf = GridSearchCV(clf, parametrs)
-3

Ну а теперь скормим ему наши данные чтобы он подобрал параметры.

grid_search_cv_clf.fit(X, y)

Это займёт некоторое время.

-4

По итогу мы сможем проверить какие параметры он нам подобрал.

grid_search_cv_clf.best_params_

{'criterion': 'entropy',
'max_depth': 7,
'min_samples_leaf': 4,
'min_samples_split': 7,
'n_estimators': 100}

Ну и под конец мы создадим классификатор по этим параметрам.

clf_1 = grid_search_cv_clf.best_estimator_

Ну и теперь наши метрики нам покажут, что классификатор стал лучше.

score - 0.8779904306220095

precision_score - 0.8389261744966443

recall_score - 0.8223684210526315

Но это не предел и можно лучше.

-5