第2课_超参数优化实践
热度🔥:18 免费课程
授课语音
实践:使用GridSearchCV和RandomizedSearchCV进行超参数优化,提升模型效果
超参数优化是提升机器学习模型效果的一个关键步骤。在实际应用中,我们可以通过使用GridSearchCV和RandomizedSearchCV这两种方法来搜索最佳超参数组合,从而提高模型的预测性能。以下将通过实践示例,介绍如何使用这两种方法对模型进行超参数优化。
1. GridSearchCV 超参数优化
GridSearchCV
是一种通过穷举所有可能的超参数组合来寻找最优参数的方法。它通过指定超参数的搜索范围,逐一尝试每一种组合,并使用交叉验证评估每种组合的性能。
1.1 使用GridSearchCV的步骤
- 定义模型:选择一个基学习器(例如,随机森林、支持向量机等)。
- 指定超参数范围:设定要搜索的超参数范围。
- 使用GridSearchCV进行搜索:使用交叉验证方法评估不同超参数组合的效果。
- 获取最优超参数:选择表现最好的参数组合。
1.2 代码示例:使用GridSearchCV进行超参数优化
以下是使用GridSearchCV对随机森林分类器进行超参数调优的代码示例:
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 载入数据
data = load_iris()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义模型
model = RandomForestClassifier()
# 定义要搜索的超参数范围
param_grid = {
'n_estimators': [50, 100, 200], # 树的数量
'max_depth': [5, 10, 20], # 树的最大深度
'min_samples_split': [2, 5, 10], # 分裂节点时最小样本数
}
# 使用GridSearchCV进行超参数搜索
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid_search.fit(X_train, y_train)
# 输出最优参数和得分
print("Best Parameters: ", grid_search.best_params_)
print("Best Cross-validation Score: ", grid_search.best_score_)
# 使用最佳参数对测试集进行预测
best_model = grid_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print("Test Accuracy: ", test_score)
1.3 解释
- param_grid:定义了我们要搜索的超参数范围。
n_estimators
是森林中树的数量,max_depth
是每棵树的最大深度,min_samples_split
是一个节点最小分裂样本数。 - GridSearchCV:指定模型和超参数搜索范围,以及使用的交叉验证方法(这里是3折交叉验证)。
- best_params_:输出最佳的超参数组合。
- best_score_:输出最佳交叉验证得分。
- score():使用最佳模型在测试集上评估性能。
2. RandomizedSearchCV 超参数优化
RandomizedSearchCV
与 GridSearchCV
类似,都是用于超参数优化的工具,但它不是穷举所有超参数组合,而是从给定的超参数空间中随机选择一定数量的组合进行评估。因此,RandomizedSearchCV
比GridSearchCV
更加高效,特别适合搜索超参数范围很大的情况。
2.1 使用RandomizedSearchCV的步骤
- 定义模型:选择一个基学习器。
- 定义超参数分布:设定要搜索的超参数分布,而不是具体的值。
- 使用RandomizedSearchCV进行搜索:随机选取超参数组合,并通过交叉验证评估效果。
- 获取最优超参数:选择最优的超参数组合。
2.2 代码示例:使用RandomizedSearchCV进行超参数优化
以下是使用RandomizedSearchCV对支持向量机(SVM)进行超参数优化的代码示例:
from sklearn.model_selection import RandomizedSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from scipy.stats import randint
# 载入数据
data = load_iris()
X = data.data
y = data.target
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义模型
model = SVC()
# 定义要搜索的超参数分布
param_dist = {
'C': [0.1, 1, 10, 100], # 正则化参数
'kernel': ['linear', 'rbf', 'poly'], # 核函数类型
'gamma': ['scale', 'auto'], # 核函数的系数
'degree': randint(1, 6), # 多项式核函数的次数
}
# 使用RandomizedSearchCV进行超参数搜索
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=3)
random_search.fit(X_train, y_train)
# 输出最优参数和得分
print("Best Parameters: ", random_search.best_params_)
print("Best Cross-validation Score: ", random_search.best_score_)
# 使用最佳参数对测试集进行预测
best_model = random_search.best_estimator_
test_score = best_model.score(X_test, y_test)
print("Test Accuracy: ", test_score)
2.3 解释
- param_dist:定义了我们要搜索的超参数分布。
C
是SVM的正则化参数,kernel
是核函数的类型,gamma
是核函数的系数,degree
是多项式核函数的次数。 - RandomizedSearchCV:与
GridSearchCV
类似,param_distributions
指定超参数的分布,n_iter
指定随机选择的超参数组合的数量,cv
指定交叉验证次数。 - best_params_:输出最佳超参数组合。
- best_score_:输出最佳交叉验证得分。
- score():使用最佳模型在测试集上评估性能。
3. 总结
- GridSearchCV是通过穷举法搜索所有可能的超参数组合,适用于搜索范围较小的场景,计算开销较大。
- RandomizedSearchCV通过从超参数空间中随机选择一定数量的组合进行评估,适用于超参数空间较大的情况,计算效率更高。
- 通过使用这两种方法进行超参数优化,我们能够找到最优的模型配置,提高模型的准确性和泛化能力。
在实际应用中,可以根据任务的复杂度和超参数空间的大小选择合适的搜索方法。