Оптимальная гиперпараметрическая настройка для моделей на основе деревьев - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать 5 моделей машинного обучения и настроить их на основе класса поиска по сетке, чтобы настроить модели оптимальным образом, чтобы я мог использовать их для прогнозирования новых данных, которые будут поступать каждый день. Проблема в том, что время, необходимое для этого, слишком велико. Итак, мой вопрос: какой уровень настройки параметров абсолютно необходим, но не займет ли это более 2 часов? Ниже приведен мой код для используемых настроек и классификаторов:

#Training and Test Sets
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = .20, 
random_state = 10)

#Classifiers 
dtc = DecisionTreeClassifier()
randf = RandomForestClassifier()
bag = BaggingClassifier()
gradb = GradientBoostingClassifier()
knn = KNeighborsClassifier()
ada = AdaBoostClassifier()

#Hyperparamter Tuning for the Models being used

#Scoring Criteria 
scoring = {'precision': make_scorer(precision_score), 'accuracy': 
make_scorer(accuracy_score)}

#Grid Search for the Decision Tree
param_dtc = {'min_samples_split': np.arange(2, 10), 'min_samples_leaf': 
np.arange(.05, .2), 'max_leaf_nodes': np.arange(2, 30)}
cv_dtc = GridSearchCV(estimator = dtc, param_grid = param_dtc, cv = 3, 
scoring = scoring, refit='precision', n_jobs=-1)
#Grid Search for the Random Forest Model  
param_randf = {'n_estimators': np.arange(10, 20), 'min_samples_split': 
np.arange(2, 10), 'min_samples_leaf': np.arange(.15, .33), 'max_leaf_nodes': 
np.arange(2, 30), 'bootstrap': ['True', 'False']}
cv_randf = GridSearchCV(estimator = randf, param_grid = param_randf, cv = 3, 
scoring = scoring, refit='precision', n_jobs=-1)
#Grid Search for the Bagging Model 
param_bag = {'n_estimators': np.arange(10, 30), 'max_samples': np.arange(2, 
30), 'bootstrap': ['True', 'False'], 'bootstrap_features': ['True', 
'False']}
cv_bag = GridSearchCV(estimator = bag, param_grid = param_bag, cv = 3, 
scoring = scoring, refit='precision', n_jobs=-1)
#Grid Search for the Gradient Boosting Model 
param_gradb = {'loss': ['deviance', 'exponential'], 'learning_rate': 
np.arange(.05, .1), 'max_depth': np.arange(2, 10), 'min_samples_split': 
np.arange(2, 10), 'min_samples_leaf': np.arange(.15, .33), 'max_leaf_nodes': 
np.arange(2, 30)}
cv_gradb = GridSearchCV(estimator = gradb, param_grid = param_gradb, cv = 3, 
scoring = scoring, refit='precision', n_jobs=-1)
#Grid Search for the Adaptive Boosting Model
param_ada = {'n_estimators': np.arange(10, 30), 'learning_rate': 
np.arange(.05, .1)}
cv_ada = GridSearchCV(estimator = ada, param_grid = param_ada, cv = 3, 
scoring = scoring, refit='precision', n_jobs=-1)

train_dict = {'dtc': cv_dtc.fit(x_train, y_train), 'randf': 
cv_randf.fit(x_train, y_train), 'bag': cv_bag.fit(x_train, y_train), 
'gradb': cv_gradb.fit(x_train, y_train), 'ada': cv_ada.fit(x_train, 
y_train)}

1 Ответ

0 голосов
/ 07 сентября 2018
  1. Вы можете рассмотреть итеративный поиск по сетке. Например, вместо установки n_estimators в np.arange (10,30), установите его в [10,15,20,25,30]. Является ли оптимальный параметр 15, продолжаем с [11,13,15,17,19]. Вы найдете способ автоматизировать этот процесс. Это сэкономит много времени.

  2. Играйте со своими данными. Вы настраиваете много гиперпараметров. В дереве решений есть пересечения эффектов 'min_samples_split', 'min_samples_leaf' и 'max_leaf_nodes'. Определение их всех может быть необязательным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...