c语言编程笔录

首页 >   > 笔记大全

笔记大全

Sklearn调优之网格搜索与随机搜索原理是什么

更新时间:2023-09-16

简述

在机器学习领域,模型的性能调优一直都是一个重要的话题。Sklearn作为Python中常用的机器学习库,为我们提供了网格搜索与随机搜索两种调优工具。本文将详细介绍这两种方法的原理,并提供实例代码解释。

网格搜索原理

网格搜索是一种常见的调参方法,它会遍历给定的参数组合进行网格搜索,并选择最优的参数组合。可以用GridSearchCV实现,它可以传入一个参数字典或列表,用于代替手动实验,从而更加高效。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
import numpy as np

X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([0, 1, 1, 0])

svc = SVC() 
parameters = {
    'kernel':['linear', 'rbf'],
    'C':[1, 10]
} 
clf = GridSearchCV(svc, parameters)
clf.fit(X, y)

print(clf.best_params_)
print(clf.best_score_)
print(clf.cv_results_)

上述代码中,我们针对SVC算法进行网格搜索,其中kernel代表选择不同的核函数,C代表惩罚参数。通过GridSearchCV,我们可以遍历kernel和C不同组合,最终得到最优的参数组合以及对应的模型表现(best_params_,best_score_)。

随机搜索原理

随机搜索是一种更加灵活的调参方法,它不同于网格搜索通过确定有限的参数组合进行搜索,而是随机的在给定区间内进行参数搜索。通常情况下,使用随机搜索的模型会比较复杂,在所需要调整的参数较多的情况下,它可以帮助我们跳出固定的常规参数范围,并有更高概率找到最优的参数组合。

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
import numpy as np
from sklearn.linear_model import Ridge

X = np.random.normal(size=[20,15])
y = np.random.normal(size=[20,])

param_grid = {'alpha': uniform()}
model=Ridge()
random_search = RandomizedSearchCV(model, param_distributions=param_grid, n_iter=100)
random_search.fit(X, y)
print(random_search.best_params_)
print(random_search.best_score_)
print(random_search.cv_results_)

上述代码中,我们针对Ridge算法进行随机搜索,其中alpha代表正则化参数。通过RandomizedSearchCV,我们可以随机生成alpha参数,从而随机搜索得到最优参数组合以及对应模型表现。

总结

介绍了Sklearn中两种常见的模型调优方法——网格搜索和随机搜索。网格搜索试图遍历所有可能的组合,寻找最优的超参数组合;而随机搜索工作方式与网格搜索不同,而是在一定范围内随机取值,给出最优的超参数组合,利用随机搜索可以帮助我们得到一个更加全面的超参数搜索空间。两种方法各有优劣,我们可以把它们都作为先验方法,在实际运用过程中选择适合的工具即可。