超参数之奇淫技巧--网格搜索(Grid Search)

网格搜索

  【前言】在调试超参数时,我们往往为了得到一个较好的参数,使模型得到提升,不断的去输入超参数,运行程序,这样调试是锻炼我们排列组合的能力?貌似这样并不合理,当然肯定有人会说,用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)

  网格搜索就分享到这了,欢迎各位小伙伴一起交流学习!

发布了32 篇原创文章 · 获赞 62 · 访问量 1334

猜你喜欢

转载自blog.csdn.net/Mingw_/article/details/104665805