You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Grid Search与cuML的SVR超参数调优异常问题咨询

cuML SVR网格搜索始终选择第一个核函数的问题

我用以下代码结合Grid Search和cuML对SVM回归器(SVR)做超参数调优,但每次网格搜索都会选中参数列表里的第一个核函数。我试过调整交叉验证折数(3、默认5、7)、添加/移除自定义评分函数、修改惩罚系数C的取值,都没解决这个问题。想问有没有人遇到过类似情况?参数列表里核函数的顺序会不会影响网格搜索的结果?

注:我用cuML借助GPU加速搜索,需要数据集可以提供。

from cuml.svm import SVR
from sklearn.model_selection import GridSearchCV
#from sklearn.svm import SVR
from sklearn.metrics import make_scorer, mean_squared_error
from pprint import pprint


# Hyper-tunning for SVM regressor

import numpy as np

base_svr = SVR()
# If you want to use your custom score function, specify the function and use it. 
def my_rmse_loss_func(y_true, y_pred):
    return np.sqrt(mean_squared_error((y_true, y_pred)))
     

scorer = make_scorer(mean_squared_error, greater_is_better=False)#,, squared = False



param_grid_svr = {'C': [0.0001, 0.01, 0.1, 0.9,1, 1.1, 2,3], # I used 10, 100 
              'gamma': ['scale', 'auto'], 
              'kernel': ['rbf', 'poly', 'sigmoid', 'precomputed','linear'], #, 
              'epsilon': [0.01, 0.1, 0.2 ,0.22, 0.3, 1]}
# Create a GridSearchCV object and fit it to the training data with 7 cv

svr_cv = GridSearchCV(base_svr,param_grid_svr, n_jobs = -1 , # Use 4
                         scoring='neg_mean_squared_error', cv = 7 ,verbose=3 ,return_train_score =True  ) # ,refit=True mean_squared_error, scoring='neg_mean_squared_error' ,



# Train the model in GPU

svr_cv.fit(X_train,y_train)

# Predictions
## By using the re-trained model
predictions_RF_regr_tuned= svr_cu.predict(X_test)

可能的原因及解决方向

  • precomputed核的无效性:参数列表里的precomputed核要求输入必须是核矩阵而非原始特征矩阵,如果你的数据是原始特征,这个核的训练会直接失败。GridSearchCV可能会跳过无效组合,但如果日志未提示错误,可能导致仅在有效核中选择第一个。建议先移除precomputed再测试。
  • 核函数性能无差异:如果所有核函数的交叉验证分数几乎一致,GridSearchCV会默认选择参数列表中第一个出现的最优组合。可以打印svr_cv.cv_results_查看各组合的测试分数,确认是否存在这种情况。
  • cuML与sklearn的兼容性细节:虽然cuML对齐sklearn API,但底层实现可能存在差异。可以单独用每个核训练SVR,手动计算交叉验证分数,对比GridSearchCV的结果是否一致。
  • 并行训练冲突:开启n_jobs=-1并行训练时,GPU加速可能存在资源竞争或逻辑冲突,尝试将n_jobs设为1关闭并行,再运行验证结果。

验证步骤

  1. 打印svr_cv.best_params_和svr_cv.best_score_,同时输出svr_cv.cv_results_['mean_test_score']及对应参数,查看不同核的分数分布;
  2. 移除precomputed核,重新运行GridSearchCV;
  3. 单独训练每个核的SVR,手动计算交叉验证分数,验证GridSearchCV的评估是否准确。

内容的提问来源于stack exchange,提问作者MarMarhoun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:02:09