我应该如何拆分我的数据以进行交叉验证和网格搜索?
Posted
技术标签:
【中文标题】我应该如何拆分我的数据以进行交叉验证和网格搜索?【英文标题】:How should I split my data for cross validation and grid search? 【发布时间】:2020-02-19 05:54:18 【问题描述】:我应该将我的数据分成大小相似的两部分,以便将每一半用于 eaxh 任务,还是我应该对我的整个数据进行网格搜索,然后对我的整个数据再次进行交叉验证以检查我的准确性?
【问题讨论】:
警告:如果您的数据集是时间序列,您可能希望按顺序拆分它,而不是随机拆分。 这不是一个编程的问题,因此这里离题了;有关 ML 理论和方法的问题应发送至 Cross Validated(尽管我认为即使对他们来说也太模糊和宽泛了) 【参考方案1】:您需要将数据拆分为测试和训练 (20:80)(例如 sklearn 中的 test_train_split),然后使用训练数据运行模型并检查准确性。如果它不是您所期望的,那么您可以尝试应用超参数调整。
您可以通过 GridSearchCV 执行此操作,您需要在其中拟合所需的估计器(取决于问题的类型)和参数值。
附上示例代码:
from sklearn.model_selection import GridSearchCV
# Create the parameter grid based on the results of random search
param_grid =
'bootstrap': [True],
'max_depth': [50, 55, 60, 65],
'max_features': ["auto","sqrt", 2, 3],
'min_samples_leaf': [1, 2, 3],
'min_samples_split': [2, 3, 4],
'n_estimators': [60, 65, 70, 75]
grid_search = GridSearchCV(estimator = rfcv, param_grid = param_grid, cv = 3, n_jobs = -1, verbose = 2)
grid_search.fit(X_train, Y_train)
grid_search.best_params_
基于最佳参数结果,您可以微调网格搜索。
例如,如果 n_estimators 的最佳参数值接近 60,那么您需要将值更改为 60,如 [50,55,60,60]。找出确切的值。
然后根据最佳参数值构建机器学习模型。评估训练数据的准确性,然后使用测试数据值预测结果。
rf = rgf(n_estimators = 70, random_state=0, min_samples_split = 2, min_samples_leaf=1, max_features = 'sqrt',bootstrap='True', max_depth=65)
regressor = rf.fit(X_train,Y_train)
pred_tuned = regressor.predict(X_test)
你会发现你的准确性有所提高!!
【讨论】:
以上是关于我应该如何拆分我的数据以进行交叉验证和网格搜索?的主要内容,如果未能解决你的问题,请参考以下文章
如果我在 python 管道中有自定义的集成模型,如何进行交叉验证和网格搜索
我是不是需要同时执行网格搜索(使用交叉验证)和交叉验证方法?