数据分析-参数调优-GridSearchCV

目录

前言

参数调优

人工循环搜索

网格搜索交叉验证(GridSearchCV)

随机搜索交叉验证(RandomizedSearchCV)

前言

算法模型中的两种参数:
模型参数:从数据中学习估计得到,如:回归中的系数与截距。
模型超参数:无法从数据中估计,需根据经验人工设置,如:k近邻算法中的k值,距离的度量方法等。

参数调优

调整超参数来提升模型的泛化性能。
常用方法有:
循环搜索:以穷举的方式遍历所有可能的参数组合。
网格搜索交叉验证(GridSearchCV):以穷举的方式遍历所有可能的参数组合。
随机搜索交叉验证(RandomizedSearchCV):依据某种分布对参数空间采样,随机的得到一些候选参数组合方案。

人工循环搜索

通过循环遍历可能的超参数组合,通过对不同组合的性能的评价,获取最优的参数组合。

如k近邻分类采用列表推导式计算不同k值的模型性能。

from sklearn.neighbors import KNeighborsClassifier
[KNeighborsClassifier(n_neighbors=k).fit(X_train,Y_train).score(x_test,y_test) for k in range(1,10)]

from itertools import product
from sklearn.neighbors import KNeighborsClassifier
for k,weights_,algorithm_ in product(range(1,10),['uniform','distance'],['auto', 'ball_tree', 'kd_tree', 'brute']):
    print(k,weights_,algorithm_)
    print(KNeighborsClassifier(n_neighbors=k,weights=weights_,algorithm=algorithm_).fit(X_train,Y_train).score(x_test,y_test))

网格搜索交叉验证(GridSearchCV)

定义一个n 维的网格,每格都有一个超参数映射,如:n=(超参数1,超参数2,…,超参数n。对每个超参数确定可能的取值,如:超参数1=[1,2,3,4,5,6,7,8],使用交叉验证来评估每种组合的性能,获取最佳性能的参数。

from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
param_grid={"n_neighbors":range(1,10),"weights":['uniform','distance'],"algorithm":['auto', 'ball_tree', 'kd_tree', 'brute']}
grid_search=GridSearchCV(KNeighborsClassifier(),param_grid,cv=5)
grid_search.fit(X_train,y_train)
print(grid_search.score(x_test,y_test))
print(grid_search.best_params_)
print(grid_search.best_score_)

采用网格搜索交叉验证,假如超参数n个,每超参数可能的取值有Xi个,需要用交叉验证评估的组合数量为:

数据分析-参数调优-GridSearchCV

当n较大,每个超参数的取值Xi较多时,组合数量过大,模型训练将变得非常费时。

随机搜索交叉验证(RandomizedSearchCV)

随机搜索交叉验证在参数空间上进行随机搜索,选择相对较少的参数组合数量,获取较优的性能。可以更广泛地探索超参数空间,解决网格搜索组合数量过大,计算代价过高的问题,但通常只能获取次优的解。

from sklearn.model_selection import RandomizedSearchCV
from sklearn.neighbors import KNeighborsClassifier
param_grid={"n_neighbors":range(1,10),"weights":['uniform','distance'],"algorithm":['auto', 'ball_tree', 'kd_tree', 'brute']}
grid_search=RandomizedSearchCV(KNeighborsClassifier(),param_grid,cv=5)
grid_search.fit(X_train,y_train)
print(grid_search.score(x_test,y_test))
print(grid_search.best_params_)
print(grid_search.best_score_)

总结

人工循环搜索需要人工查找最优的模型参数。网格搜索交叉验证采用交叉验证模型的性能评价更客观,可以直接给出最优模型参数。当超参数较多时这两种方法的计算量都很大。

随机搜索交叉验证克服了计算量大的问题,但其获得的参数和模型往往不是最优的。

Original: https://blog.csdn.net/it_liujh/article/details/123648383
Author: ITLiu_JH
Title: 数据分析-参数调优-GridSearchCV

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/699851/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球