Python实现基于AUC的SVM随机搜索调参:最佳参数模型筛选

本文介绍了如何使用Python代码实现基于AUC指标的SVM随机搜索调参方法,并通过设定训练集和验证集AUC阈值以及二者差值阈值来筛选最佳参数模型,最终输出满足条件的最佳参数模型。

代码实现:

from sklearn.svm import SVC
from sklearn.model_selection import RandomizedSearchCV
from sklearn.metrics import roc_auc_score
import numpy as np

# X_train, y_train, X_val, y_val为训练集和验证集的特征和标签
# param_distributions为SVM的参数分布范围
# n_iter为随机搜索的迭代次数
# scoring为评估指标,这里使用AUC作为评估指标
def random_search_SVM(X_train, y_train, X_val, y_val, param_distributions, n_iter=10, scoring='roc_auc'):
    best_score = 0
    while True:
        # 随机搜索SVM的参数
        svm = SVC()
        random_search = RandomizedSearchCV(svm, param_distributions, n_iter=n_iter, scoring=scoring)
        random_search.fit(X_train, y_train)
        
        # 计算训练集和验证集的AUC
        y_train_prob = random_search.predict_proba(X_train)[:, 1]
        train_auc = roc_auc_score(y_train, y_train_prob)
        y_val_prob = random_search.predict_proba(X_val)[:, 1]
        val_auc = roc_auc_score(y_val, y_val_prob)
        
        # 判断是否满足条件
        if train_auc > 0.75 and val_auc > 0.75 and abs(train_auc - val_auc) < 0.1:
            # 输出最佳参数模型
            print('Best parameters:', random_search.best_params_)
            print('Best score:', random_search.best_score_)
            return random_search.best_estimator_
        
        # 记录当前最佳结果
        if val_auc > best_score:
            best_score = val_auc
            best_estimator = random_search.best_estimator_

代码说明:

  1. 函数random_search_SVM()接受训练集特征X_train、训练集标签y_train、验证集特征X_val、验证集标签y_val、SVM参数分布param_distributions、随机搜索迭代次数n_iter和评估指标scoring作为参数。
  2. 函数首先定义一个循环,不断进行随机搜索,直到找到满足条件的最佳参数模型。
  3. 在每个迭代中,使用RandomizedSearchCV进行随机搜索,并计算训练集和验证集的AUC。
  4. 如果训练集AUC和验证集AUC都大于0.75,且二者差值小于0.1,则输出最佳参数模型,并结束循环。
  5. 如果当前迭代的验证集AUC高于之前记录的最佳结果,则更新最佳结果。

使用方法:

  1. 将训练集特征X_train、训练集标签y_train、验证集特征X_val、验证集标签y_val以及SVM参数分布param_distributions传入函数random_search_SVM()
  2. 运行函数random_search_SVM(),函数会返回满足条件的最佳参数模型。

注意:

  • 训练集AUC和验证集AUC的阈值以及二者差值阈值可以根据实际情况进行调整。
  • 随机搜索迭代次数n_iter也需要根据实际情况进行调整,迭代次数越多,找到最佳参数模型的概率越高,但耗时也越长。

示例:

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_val, y_train, y_val = train_test_split(X, y, test_size=0.2)

# 定义SVM参数分布范围
param_distributions = {'C': [0.1, 1, 10, 100],
                       'gamma': [0.01, 0.1, 1, 10]}

# 使用随机搜索调参
best_estimator = random_search_SVM(X_train, y_train, X_val, y_val, param_distributions)

# 使用最佳参数模型进行预测
# ...
Python实现基于AUC的SVM随机搜索调参:最佳参数模型筛选

原文地址: https://www.cveoy.top/t/topic/oJXq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录