SVM 随机网格搜索调参:基于 AUC 指标的优化方法
本文介绍了使用 Python 和 sklearn 库对 SVM 模型进行随机网格搜索调参的方法,通过设置 AUC 指标的阈值和训练集与验证集 AUC 差值限制,实现高效的模型优化。
方法:
- 设置 AUC 阈值:训练集和验证集上的 AUC 值都必须大于 0.75。
- 设置 AUC 差值限制:训练集和验证集上的 AUC 值差值必须小于 0.1。
- 使用 sklearn.model_selection.GridSearchCV 进行随机网格搜索,搜索参数范围包括:'C', 'kernel', 'gamma'。
- 循环进行参数搜索,直到满足 AUC 阈值和差值限制条件。
- 输出最佳参数模型。
代码示例:
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import roc_auc_score
from sklearn.svm import SVC
import numpy as np
# 生成训练集和验证集
X_train = np.random.rand(100, 10)
y_train = np.random.randint(0, 2, size=100)
X_val = np.random.rand(50, 10)
y_val = np.random.randint(0, 2, size=50)
# 定义SVM模型
svm = SVC()
# 定义参数网格
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf', 'poly'],
'gamma': ['scale', 'auto']
}
# 定义参数搜索器
searcher = GridSearchCV(svm, param_grid, cv=5, scoring='roc_auc')
# 进行参数搜索
best_auc = 0
while best_auc < 0.75 or abs(best_train_auc - best_val_auc) > 0.1:
searcher.fit(X_train, y_train)
best_params = searcher.best_params_
svm.set_params(**best_params)
svm.fit(X_train, y_train)
y_train_pred = svm.predict_proba(X_train)[:, 1]
y_val_pred = svm.predict_proba(X_val)[:, 1]
best_train_auc = roc_auc_score(y_train, y_train_pred)
best_val_auc = roc_auc_score(y_val, y_val_pred)
best_auc = max(best_train_auc, best_val_auc)
# 输出最佳参数模型
print('Best parameters: ', best_params)
print('Best AUC on train set: ', best_train_auc)
print('Best AUC on validation set: ', best_val_auc)
代码解释:
- 使用 GridSearchCV 进行随机网格搜索,搜索参数范围包括 'C', 'kernel', 'gamma'。
- 循环进行参数搜索,每次搜索后使用最佳参数重新构建 SVM 模型,并在训练集和验证集上进行预测,计算 AUC 值。
- 如果 AUC 值满足条件,则停止调参,输出最佳参数模型的参数和 AUC 值。否则,继续进行参数搜索。
总结:
本文介绍了使用 Python 和 sklearn 库对 SVM 模型进行随机网格搜索调参的方法,通过设置 AUC 指标的阈值和训练集与验证集 AUC 差值限制,实现高效的模型优化。这种方法可以帮助用户快速找到最佳模型参数,提高模型性能。
原文地址: https://www.cveoy.top/t/topic/oJXN 著作权归作者所有。请勿转载和采集!