SVM随机搜索调参:基于AUC指标的模型优化
本文介绍如何使用随机搜索来优化SVM模型参数,并以AUC指标为依据,设置了训练集和验证集AUC阈值以及差值限制,以找到最佳参数组合。代码示例使用sklearn自带的乳腺癌数据集,并包含详细的步骤和注释。
首先导入必要的库和数据集,这里以sklearn自带的乳腺癌数据集为例:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.svm import SVC
from scipy.stats import uniform
# 导入数据集
data = load_breast_cancer()
X_train, X_val, y_train, y_val = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
接着定义SVM模型,并设置参数的取值范围:
# 定义SVM模型
svm = SVC()
# 设置参数取值范围
param_dist = {'C': uniform(0.1, 10), 'gamma': uniform(0.1, 1)}
然后进行随机搜索,同时判断AUC是否满足条件:
best_auc = 0.0
while True:
# 随机搜索
search = RandomizedSearchCV(svm, param_distributions=param_dist, n_iter=100, cv=5, scoring='roc_auc', random_state=42)
search.fit(X_train, y_train)
# 判断AUC是否满足条件
train_auc = search.best_score_
val_auc = search.best_estimator_.score(X_val, y_val)
if train_auc >= 0.75 and val_auc >= 0.75 and abs(train_auc - val_auc) < 0.1:
best_svm = search.best_estimator_
best_auc = val_auc
break
最后输出最佳参数模型:
print('Best SVM model:', best_svm)
print('AUC:', best_auc)
完整代码如下:
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.svm import SVC
from scipy.stats import uniform
# 导入数据集
data = load_breast_cancer()
X_train, X_val, y_train, y_val = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
# 定义SVM模型
svm = SVC()
# 设置参数取值范围
param_dist = {'C': uniform(0.1, 10), 'gamma': uniform(0.1, 1)}
best_auc = 0.0
while True:
# 随机搜索
search = RandomizedSearchCV(svm, param_distributions=param_dist, n_iter=100, cv=5, scoring='roc_auc', random_state=42)
search.fit(X_train, y_train)
# 判断AUC是否满足条件
train_auc = search.best_score_
val_auc = search.best_estimator_.score(X_val, y_val)
if train_auc >= 0.75 and val_auc >= 0.75 and abs(train_auc - val_auc) < 0.1:
best_svm = search.best_estimator_
best_auc = val_auc
break
print('Best SVM model:', best_svm)
print('AUC:', best_auc)
原文地址: https://www.cveoy.top/t/topic/oJYJ 著作权归作者所有。请勿转载和采集!