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

我正在尝试生成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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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