随机网格搜索RandomSearchCV学习笔记,内容包括:
- 随机网格搜索的基本原理
- 随机网格搜索的skelarn应用(案例:房价数据集_python)
- 随机网格搜索中连续型分布的应用(案例:房价数据集_python)
索引
🔣 函数及参数
🔑 公式
🗣 案例
📌 名词解释
📖 摘抄
1 随机网格搜索的基本原理
📖 影响枚举网格搜索运算速度的因素
1 参数空间的大小:参数空间越大,需要建模的次数越多
2 数据量的大小:数据量越大,每次建模时需要的算力和时间越多
🗣 案例:全域参数空间VS部分参数空间(示意图)
```python
n_e_list=range(50,350,50)
m_d_list=range(2,7)
comb=pd.DataFrame([(n_estimators, max_depth)
for n_estimators in n_e_list
for max_depth in m_d_list]) # 创建n_e_list和m_d_list的笛卡尔乘积
fig,[ax1,ax2]=plt.subplots(1,2,dpi=100)
ax1.scatter(comb.iloc[:,0],comb.iloc[:,1])
ax1.set_title('GridSearch')
ax2.scatter(comb.iloc[:,0],comb.iloc[:,1])
ax2.scatter([50,250,200,200,300,100,150,150],[4,2,6,3,2,3,2,5],cmap='red',s=50)
ax2.set_title('RandomSearch')
plt.show()
```
📌 随机网格搜索
随机抽取参数子空间,并在自空间中进行搜索的方法。
对比枚举网格搜索的优势:
- 运算速度快
- 覆盖空间大
- 最小损失与枚举网络的最小损失很接近
📖 随机网格搜索的抽样特点
随机网格搜索采用“循环迭代”。
在这一次迭代中随机抽取1组参数进行建模,下一次迭代再随机抽取1组参数进行建模。由于这种随机抽样是不放回的,因此不会出现两次抽中同一组参数的问题。
可以控制随机网格搜索的迭代次数,来控制整体被抽出的参数子空间的大小,这种做法往往被称为“赋予随机网格搜索固定的计算量,当全部计算量被消耗完毕之后,随机网格搜索就停止”。
随机网格搜索在实际运行时,并不是先抽样出子空间,再对子空间进行搜索。
2 随机网格搜索实现
🔣 skelarn中随机网格搜索
from sklearn.model_selection import RandomizedSearchCV
RandomizedSearchCV(
estimator, # 评估器
param_distributions, # 全域参数空间
*,
n_iter=10, # 迭代次数
scoring=None, # 评估指标
n_jobs=None,
refit=True, # 是否挑选评估和最佳参数,在完整数据集上进行训练
cv=None, # 交叉验证模式
verbose=0,
pre_dispatch='2*n_jobs', # 多任务并行时的任务划分数量
random_state=None,
error_score=nan, # 当网格搜索报错时返回结果,选择'raise'时将直接报错并中断训练过程,其他情况会显示警告信息后继续完成训练
return_train_score=False, # 是否显示训练集中参数得分
)
Name | Description |
---|---|
estimator | 调参对象,某评估器 |
param_distributions | 全域参数空间,可以是字典或者字典构成的列表 |
n_iter | 迭代次数,迭代次数越多,抽取的子参数空间越大 |
scoring |