首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >GridSearchCV (scikit learn) 确定超参数

GridSearchCV (scikit learn) 确定超参数

作者头像
生信编程日常
发布2020-10-10 10:40:13
发布2020-10-10 10:40:13
1.4K0
举报

在我们建立模型的时候需要(尽量)确定最优的参数,比如以下KNN的例子,如果直接实现,我们可以用for-loop来寻找最大的score,从而确定对应的参数:

代码语言:javascript
复制
%%time
# 寻找明科夫斯基距离最优的p

best_p = -1
best_score = 0
best_k = -1

for p in range(1, 6):
    for k in range(1, 11):
        knn_clf = KNeighborsClassifier(n_neighbors=k, weights = 'distance', p = p)
        knn_clf.fit(X_train, y_train)
        y_predict = knn_clf.predict(X_test)
        score = accuracy_score(y_test, y_predict)
        if score > best_score:
            best_score = score
            best_k = k
            best_p = p
            
print("best k is {}; \nbest score is {};\nbest p is {}.".format(best_k, best_score, best_p))

但是这样搜索比较麻烦,而且weights还有别的参数,自己写比较麻烦。而scikit learn已经给我们封装好了GridSearchCV方法,我们直接调用即可:

代码语言:javascript
复制
from sklearn.model_selection import GridSearchCV

# 定义搜索参数

param_grid = [
    {
        'weights':['uniform'],
        'n_neighbors':[i for i in range(1, 11)]
    },
    {
        'weights': ['distance'],
        'n_neighbors': [i for i in range(1, 11)],
        'p': [i for i in range(1, 6)]
    }
]

knn_clf = KNeighborsClassifier()

# n_jobs是提供的核的数量,-1是用上电脑所有的核;verbose输出中间过程
grid_search = GridSearchCV(knn_clf, param_grid, n_jobs = -1, verbose = 2)
grid_search.fit(X_train, y_train)

# 查看参数:
grid_search.best_params_
# 或者
grid_search.best_estimator_

# 最优score
grid_search.best_score_
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档