python中gridsearchcv_GridSearchCV (scikit learn) 确定超参数

在机器学习中,选择合适的模型参数至关重要。本文通过一个KNN(K-最近邻)分类器的例子,展示了如何利用scikit-learn的GridSearchCV进行超参数优化。传统的手动方式是通过for循环遍历参数组合,但GridSearchCV提供了一个便捷的解决方案。通过设置参数网格,包括'weights'和'n_neighbors',并指定'n_jobs'为-1以利用所有CPU核心,GridSearchCV自动找到最佳参数组合,并返回最佳得分。
摘要由CSDN通过智能技术生成

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

%%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方法,我们直接调用即可:

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_

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值