0
点赞
收藏
分享

微信扫一扫

机器学习中的验证集

在机器学习和深度学习中,验证集都是很常见的概念。但是显示的验证集似乎在使用sklearn的机器学习的模型上不常见,比如有train_test_split却没有train_validation_test_split。

可能原因之一在于设计者为sklearn提供了交叉验证cross_validation和网格搜索Grid_search,给定参数池、交叉验证的折数和评价方式,就可以直接提供最优参数和最优得分。这一点可以去查阅相应的API。

但,如果想要显示的体现验证集的参数调优,再在测试集上计算泛化误差。

这一点比较适合一些想用机器学习搞时间序列预测的,比如当前期的数据集有6个月,想用前4个月作为训练集,第5个月作为
验证集,测试第6个月的泛化误差

可以先给定参数池如

RF_params = {'max_depth': [2, 3], 'n_estimators': [30, 50]}

分训练、验证、测试集可以在dataframe上用sample方法,但更方便的是用sklearn的train_test_split
然后用 train_test_split 先分train_setvalidation_test_set
再用 train_test_splitvalidation_test_setvalidation_settest_set
然后用网格搜索的方式(本质就是暴力搜索)找最优参数和对应的误差(以MAE为例):

best_param = {}
MAE_min = np.inf 
for n_tree in RF_params["n_estimators"]:
	for depth in RF_params["max_depth"]:
		rf = RandomForestRegressor(n_estimators=n_tree, max_depth=depth, n_jobs=2, random_state=0)  # 构造
        rf.fit(train_X, train_Y)  # 训练
        pred_val_Y = rf.predict(val_X)  # 在验证集上预测
		
        # 计算MAE误差
        MAE = metrics.mean_absolute_error(val_Y, pred_val_Y)
        if MAE < MAE_min:
            MAE_min = MAE
	        best_param["n_estimators"] = n_tree
	        best_param["max_depth"] = depth
举报

相关推荐

0 条评论