【前言】在调试超参数时,我们往往为了得到一个较好的参数,使模型得到提升,不断的去输入超参数,运行程序,这样调试是锻炼我们排列组合的能力?貌似这样并不合理,当然肯定有人会说,用for循环寻找超参数不就可以了吗?emmmm,你已经进阶了,可是依然不能满足我们的需求。于是,“懒惰”让今天的主角–网格搜索
诞生了。
【实践】接下来,到了我们最激动人心的代码部分了,我将以寻找KNN算法超参数为例,展示网格搜索的魅力!
什么?你不懂KNN算法,没关系,在此我们关注的只是超参数的查找。
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
digits = datasets.load_digits() #下载数据集
X = digits.data #数据集特征
y = digits.target #数据集标签
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666) #划分数据集
'''Grid Search'''
#定义搜索的参数
'''每一个字典对应我们要进行的一组网格搜索
每个字典中要包含我们需要搜索的参数范围'''
param_grid = [
{
'weights': ['uniform'],
'n_neighbors':[i for i in range(1,5)]
},
{
'weights':['distance'],
'n_neighbors':[i for i in range(1,5)],
'p':[i for i in range(1,5)]
}
]
knn_clf = KNeighborsClassifier() #实例化一个KNN分类器
'''第一个参数:分类器
第二个参数:搜索对象
第三个参数:搜索时计算机工作的核,采用-1时所有核用于搜索
第四个参数:显示搜索时的数据,值越大信息越详细 '''
grid_search = GridSearchCV(knn_clf,param_grid,n_jobs=1,verbose=2)
grid_search.fit(X_train,y_train)
print("得到的最好的KNN分类器信息:\n",grid_search.best_estimator_)
print('最好的分类器预测的结果:\n',grid_search.best_score_)
print('网格搜索的最优参数:\n',grid_search.best_params_)
knn_clf = grid_search.best_estimator_
acc = knn_clf.score(X_test,y_test)
print('预测准确率为:\n',acc)
网格搜索就分享到这了,欢迎各位小伙伴一起交流学习!