机器学习实战笔记32-33:网格搜索原理、参数详解及代码实操
- 网格搜索调参
一.数据集划分比例、交叉验证折数一般按经验来
正则化系数、特征衍生系数则需要调参
评估指标:之前是对比训练误差和测试误差来看过拟合还是欠拟合,现在希望有指标来评价
故如果希望模型重点识别1类,则考虑F1-SCORE,其它推荐用ROC-AUC
过程为在训练集训练,验证集上交叉验证的结果作为模型指标,最后在测试集上检验模型
- 三种搜索方法差别
GridsearchCV会尝试所有可能解,randomizedSearchCV会先采样后搜索,HalvingRandomSearchCV和HalvingGridsearchCV则均会先两两比较,再逐层筛选
GridsearchCV的参数如下:
核心参数:estimator、param_grid
评估参数:scoring、refit(选择一个用于评估最佳模型的评估指标)、cv(交叉验证方式)
性能参数:n_jobs和pre_dispatch(分别表示核心数、任务按照何种方式并行运算),但如果需要答复提升运行速度,建议用randomizedSearchCV或者halving算法
评估器结果查看参数如下:
实操网格搜索代码如下:
# In[1]:
from sklearn.model_selection import GridSearchCV
# In[2]:
get_ipython().run_line_magic('pinfo', 'GridSearchCV')
# In[3]:
from sklearn.datasets import load_iris
# In[4]:
x,y=load_iris(return_X_y=True)#作用是返回tuple类型,否则返回的是Bunch类型
# In[6]:
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=24)
# In[7]:
from sklearn.linear_model import LogisticRegression
clf=LogisticRegression(max_iter=int(1e6),solver='saga')
# In[8]:
clf.get_params()
# In[17]:
#创造参数空间
param_grid_simple={'penalty':['l1','l2'],'C':[1,0.5,0.1,0.05,0.01]}
# In[18]:
#如果同时需要考虑penalty两种取值怎么办
param_grid_ra=[{'penalty':['l1','l2'],'C':[1,0.5,0.1,0.05,0.01]},
{'penalty':['elasticnet'],'C':[1,0.5,0.1,0.05,0.01],'l1_ratio':[0.3,0.6,0.9]}]
# In[19]:
#实例化评估器
search=GridSearchCV(estimator=clf,param_grid=param_grid_simple)
# In[20]:
search.fit(x_train,y_train)
# In[21]:
#评估器结果查看
search.best_estimator_
# In[22]:
#查看逻辑回归模型参数
search.best_estimator_.coef_
# In[23]:
#查看训练误差、测试误差
search.best_estimator_.score(x_train,y_train),search.best_estimator_.score(x_test,y_test)
# In[24]:
#最优参数时交叉验证平均得分
search.best_score_
# In[25]:
search.n_splits_