基于树模型的最优超参数调优

我正在尝试生成5个机器学习模型,并使用网格搜索类对它们进行调优,以便以最佳方式调整模型,以便我可以使用它们来预测每天传入的新数据。问题是完成这个过程所需的时间太长了。所以,我的疑问是,哪些参数调优是绝对必要的,但又不会花费超过2个小时?下面是我的调优和使用的分类器的代码:

#训练和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = .20, random_state = 10)
#分类器
dtc = DecisionTreeClassifier()
randf = RandomForestClassifier()
bag = BaggingClassifier()
gradb = GradientBoostingClassifier()
knn = KNeighborsClassifier()
ada = AdaBoostClassifier()
#用于模型的超参数调优
#评分标准
scoring = {'precision': make_scorer(precision_score), 'accuracy': make_scorer(accuracy_score)}
#决策树的网格搜索
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)
#随机森林模型的网格搜索  
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)
#装袋模型的网格搜索
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)
#梯度提升模型的网格搜索
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)
#自适应提升模型的网格搜索
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. 你可以考虑使用迭代网格搜索。例如,不要将’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’的效果存在交叉。可能不需要定义所有这些参数。

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注