全网最通俗:网格搜索(Grid Search)到底是什么?怎么用?
全网最通俗网格搜索Grid Search到底是什么怎么用附代码图解一、什么是网格搜索一句话讲明白网格搜索 把所有超参数组合“挨个试一遍”选出效果最好的那一组。你可以把它理解成你有一堆参数值比如学习率0.001、0.01、0.1你想知道哪一组搭配起来模型最准网格搜索就帮你穷举所有组合一个个训练、打分、比较它是机器学习里最简单、最稳定、最常用的调参方法。二、超通俗举例像“配文具”一样简单假设你考试有三种选择笔黑、蓝、红纸普通纸、草稿纸、牛皮纸计算器有 / 无你想找出考试最顺手的一套组合。网格搜索就是列出所有 3×3×218 种组合 → 一套套试 → 选最高分。机器学习里只是把“文具”换成了学习率树的深度正则化系数批量大小……三、为什么要用网格搜索机器学习模型效果好不好一半看数据一半看超参数。手动调参太慢、不准、不科学。网格搜索帮你公平对比所有参数组合避免主观瞎猜用交叉验证保证结果可靠自动输出最优那一组四、核心原理数学版简单看懂给定一组超参数学习率[0.001, 0.01, 0.1]批量大小[16, 32, 64]网格搜索会生成3 × 3 9 组组合每组都训练一遍模型用验证集评分最后选分数最高的。五、优点缺点大白话版✅ 优点简单无脑会定义参数列表就能用结果稳定穷举不会漏掉最优自带交叉验证不容易过拟合通用几乎所有模型都能用❌ 缺点慢参数多了会爆炸笨所有组合都跑一遍浪费算力高维不行深度学习不适合六、什么时候用网格搜索超参数不多≤3~4个小、中型模型SVM、随机森林、XGBoost、逻辑回归想调得准不在乎多等一会儿新手入门、课程作业、比赛 baseline七、什么时候不要用深度学习参数太多超参数数量 4 个赶时间、资源有限→ 这种用随机搜索 / 贝叶斯优化更好。八、手把手Python代码可直接跑用网格搜索调 MLP 神经网络学习率 批次importnumpyasnpimportmatplotlib.pyplotaspltimporttorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerfromtorch.utils.dataimportTensorDataset,DataLoader# 生成简单测试数据np.random.seed(42)torch.manual_seed(42)Xnp.random.randn(2000,2)y(X[:,0]*X[:,1]0).astype(int)X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)scalerStandardScaler()X_trainscaler.fit_transform(X_train)X_testscaler.transform(X_test)# 转张量X_traintorch.tensor(X_train,dtypetorch.float32)y_traintorch.tensor(y_train,dtypetorch.long)X_testtorch.tensor(X_test,dtypetorch.float32)y_testtorch.tensor(y_test,dtypetorch.long)# 简单神经网络classMLP(nn.Module):def__init__(self,input_size2):super().__init__()self.netnn.Sequential(nn.Linear(input_size,16),nn.ReLU(),nn.Linear(16,8),nn.ReLU(),nn.Linear(8,2))defforward(self,x):returnself.net(x)# 网格搜索遍历学习率 batch_sizelr_list[0.001,0.01,0.1]bs_list[16,32,64]best_acc0best_paramNoneresult{}forlrinlr_list:forbsinbs_list:loaderDataLoader(TensorDataset(X_train,y_train),batch_sizebs,shuffleTrue)modelMLP()optoptim.Adam(model.parameters(),lrlr)loss_fnnn.CrossEntropyLoss()# 训练foreinrange(50):model.train()forx,yinloader:opt.zero_grad()loss_fn(model(x),y).backward()opt.step()# 测试model.eval()withtorch.no_grad():predmodel(X_test).argmax(1)acc(predy_test).float().mean().item()result[(lr,bs)]accifaccbest_acc:best_accacc best_param(lr,bs)print(最佳组合,best_param)print(最高精度,best_acc)九、总结面试/笔记直接背网格搜索 穷举超参数组合选最优优点简单、稳定、准缺点慢、参数多了爆炸适用传统机器学习、小模型、少量超参数不适用深度学习、高维参数十、一句话记住网格搜索就是调参界的“暴力枚举”虽然笨但稳、准、好用。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2509645.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!