本次修炼方法请往下查看
🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 免费获取相关内容文档关注:微信公众号,发送 pandas 即可获取
🎇 相关内容视频讲解 B站
🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验。
🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100% 。
📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。
🎯 1. 基本介绍
1.1 概念介绍
RandomizedSearchCV和GridSearchCV
是scikit-learn中model_select类中用于参数优化的两个类。
RandomizedSearchCV:
随机搜索交叉验证。它是一种参数优化方法,通过在参数空间中随机选择一组参数进行训练和验证,并根据交叉验证的结果来评估模型的性能。相对于GridSearchCV,RandomizedSearchCV在参数空间中进行随机搜索,并且只随机选择一部分参数组合进行评估,从而减少计算开销。RandomizedSearchCV适用于参数空间较大的情况。
GridSearchCV:
网格搜索交叉验证。它是一种参数优化方法,遍历参数空间中的所有可能组合进行训练和验证,然后评估每个参数组合的性能。GridSearchCV通过穷举搜索所有可能的参数组合,能够找到最佳的参数组合,但计算开销较大。GridSearchCV适用于参数空间较小的情况。
1.2 对比分析
搜索范围:
GridSearchCV:需要定义参数的确切值或范围,它适用于参数数量较少且需要精细搜索的场景。RandomizedSearchCV:需要定义参数的分布(如均匀分布、正态分布等),它适用于参数数量较多或搜索空间较大的情况。
计算成本:
GridSearchCV:由于需要遍历所有参数组合,当参数数量较多或参数空间较大时,计算成本可能非常高。RandomizedSearchCV:由于是随机选择参数组合,计算成本相对较低,特别是当n_iter设置得较小时。
搜索效果:
GridSearchCV:能够保证找到给定参数网格中的最优解,但可能存在“过搜索”(overfitting to the parameter grid)的问题。RandomizedSearchCV:可能无法保证找到全局最优解,但在较大的参数空间中更有可能找到接近最优的解,并且可以避免“过搜索”。
使用场景:
GridSearchCV:适用于参数数量较少、需要精确搜索的场景,或者当对参数空间有较好的理解时。RandomizedSearchCV:适用于参数数量较多、参数空间较大的场景,或者当需要快速找到一个合理的参数组合时。
💡 2. 代码实践
我们构建一个简单的svc的方法并通过二者进行参数的优化,具体的代码如下所示:
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from sklearn.svm import SVC
# 定义参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
# GridSearchCV 示例
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
grid_search.fit(X_train, y_train)
# RandomizedSearchCV 示例
random_search = RandomizedSearchCV(SVC(), param_distributions={'C': np.logspace(-3, 2, 6),
'kernel': ['linear', 'rbf']},
n_iter=100, cv=5, random_state=42)
random_search.fit(X_train, y_train)
💡 3. 注意事项
- 如果参数空间非常大,GridSearchCV 可能会非常耗时或不可行。在这种情况下,RandomizedSearchCV 是一个更实际的选择。
- GridSearchCV 可能需要大量的计算资源,尤其是当交叉验证的折数(cv)和参数组合数量较多时。
- 选择适当的 CV 折数以平衡偏差和方差。太多的折数可能会增加计算成本,而太少的折数可能无法捕捉数据的变异性。
- 对于 RandomizedSearchCV 中的连续参数,考虑使用对数尺度(如 np.logspace)来避免数量级差异过大。