1. GridSearchCV
GridSearchCV
是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。这种方法在参数空间较小时非常有效,但当参数空间较大时,计算成本会非常高。
示例代码
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
# 加载数据
iris = load_iris()
X = iris.data
y = iris.target
# 定义参数网格
param_grid = {
'C': [0.1, 1, 10, 100],
'gamma': [1, 0.1, 0.01, 0.001],
'kernel': ['rbf', 'linear']
}
# 初始化SVM分类器
svm = SVC()
# 使用GridSearchCV进行参数搜索
grid_search = GridSearchCV(svm, param_grid, cv=5)
# 拟合数据
grid_search.fit(X, y)
# 输出最佳参数
print("Best parameters set found on development set:")
print()
print(grid_search.best_params_)
# 输出最佳模型在验证集上的分数
print("Grid scores on development set:")
print()
means = grid_search.cv_results_['mean_test_score']
stds = grid_search.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, grid_search.cv_results_['params']):
print("%0.3f (+/-%0.03f) for %r"
% (mean, std * 2, params))
# 使用最佳参数进行预测
best_svm = grid_search.best_estimator_
y_pred = best_svm.predict(X)
代码解释
- 首先,我们从
sklearn.datasets
加载了鸢尾花数据集(Iris dataset),这是一个常用的多类分类问题的数据集。 - 然后,我们定义了一个参数网格
param_grid
,其中包含了我们想要搜索的SVM分类器的超参数。在这个例子中,我们搜索了C
(错误项的惩罚系数)、gamma
('rbf'、'poly' 和 'sigmoid' 的核函数系数)和kernel
(核函数类型)这三个参数。 - 接着,我们初始化了一个SVM分类器
svm
,并使用GridSearchCV
对其进行参数搜索。在GridSearchCV
的初始化中,我们传入了SVM分类器、参数网格和交叉验证的折数(cv=5
表示5折交叉验证)。 - 然后,我们使用
fit
方法拟合数据。在这个过程中,GridSearchCV
会对参数网格中的每一个参数组合进行交叉验证,并计算其在验证集上的分数。 - 拟合完成后,我们可以使用
best_params_
属性查看最佳参数组合,使用cv_results_
属性查看每个参数组合在验证集上的分数。 - 最后,我们使用最佳参数组合训练了一个SVM分类器
best_svm
,并使用它进行了预测。
2. RandomizedSearchCV
RandomizedSearchCV
是一种随机搜索方法,它会在指定的参数分布中随机采样参数组合进行交叉验证。与 GridSearchCV
相比,RandomizedSearchCV
在参数空间较大时更加高效,因为它不需要穷举搜索所有的参数组合。
示例代码
```python
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint
from sklearn.svm import SVC
from sklearn.datasets import load_iris
加载数据
iris = load_iris()
X = iris.data
y = iris.target
定义参数分布
param_dist = {
'C': sp_randint(1, 100),
'gamma': sp_randint(0, 10) * 0.01,
'kernel': ['rbf', 'linear'],
'class_weight': [None, 'balanced
处理结果:
1. GridSearchCV
GridSearchCV
是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。这种方法在参数空间较小时非常有效,但当参数空间较大时,计算成本会非常高。
示例代码
```python
加载数据
定义参数网格
'C' [0.1, 1, 10, 100],
'gamma' [1, 0.1, 0.01, 0.001],
'kernel'_ ['rbf', 'linear']
初始化SVM分类器
使用GridSearchCV进行参数搜索
拟合数据
输出最佳参数
输出最佳模型在验证集上的分数
print("%0.3f (+_-%0.03f) for %r"
% (mean, std * 2, params))
使用最佳参数进行预测
- 首先,我们从
sklearn.datasets
加载了鸢尾花数据集(Iris dataset),这是一个常用的多类分类问题的数据集。2. RandomizedSearchCV
RandomizedSearchCV
是一种随机搜索方法,它会在指定的参数分布中随机采样参数组合进行交叉验证。与GridSearchCV
相比,RandomizedSearchCV
在参数空间较大时更加高效,因为它不需要穷举搜索所有的参数组合。示例代码
```python加载数据
定义参数分布
'C'_ sprandint(1, 100),
'gamma' sprandint(0, 10) * 0.01,
'kernel' ['rbf', 'linear'],
'classweight' [None, 'balanced