以下是一个简单的Python代码示例,可以使用GridSearchCV进行SVM的超参数调优。其中,使用scikit-learn库中的train_test_split函数将数据集随机划分为训练集和验证集。在调参过程中,使用交叉验证来评估模型的表现,并使用GridSearchCV函数找到最佳的SVM超参数组合。最后,输出最佳的参数模型。

from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.svm import SVC
from sklearn.metrics import roc_auc_score

# 假设数据已经准备好了,X是特征矩阵,y是标签向量

# 将数据集随机划分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义SVM模型
svm = SVC()

# 定义超参数空间
param_grid = {'C': [0.1, 1, 10, 100],
              'kernel': ['linear', 'rbf', 'poly', 'sigmoid'],
              'gamma': ['scale', 'auto']}

# 构建GridSearchCV对象
grid_search = GridSearchCV(svm, param_grid, cv=5, scoring='roc_auc')

# 开始调参
best_score = 0
while best_score < 0.75 or abs(best_train_score - best_val_score) > 0.1:
    # 在训练集上拟合模型
    grid_search.fit(X_train, y_train)

    # 获取最佳模型
    best_model = grid_search.best_estimator_

    # 获取最佳模型在训练集和验证集上的预测AUC
    y_train_pred = best_model.predict_proba(X_train)[:, 1]
    y_val_pred = best_model.predict_proba(X_val)[:, 1]
    best_train_score = roc_auc_score(y_train, y_train_pred)
    best_val_score = roc_auc_score(y_val, y_val_pred)

    # 输出当前模型的评分情况
    print(f'Train AUC: {best_train_score:.3f} | Val AUC: {best_val_score:.3f} | Best Params: {grid_search.best_params_}')

    # 如果当前模型的表现比之前的最佳模型更好,则更新最佳模型
    if best_val_score > best_score:
        best_score = best_val_score
        best_model = best_model
    else:
        break

# 输出最佳模型的超参数
print(f'Best Params: {best_model.get_params()}')

# 输出最佳模型在测试集上的AUC
y_test_pred = best_model.predict_proba(X_test)[:, 1]
test_score = roc_auc_score(y_test, y_test_pred)
print(f'Test AUC: {test_score:.3f}')
``
机器学习中根据训练组中及验证组的AUC均大于075且训练组AUC和验证组AUC差值小于01两个条件对SVM进行随机搜索调参若不满足条件则一直进行调参直到尝试了所有组合最终输出最佳参数模型python代码

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

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