svm 需要很长时间进行超参数调整

Posted

技术标签:

【中文标题】svm 需要很长时间进行超参数调整【英文标题】:svm takes long time for hyperparameter tuning 【发布时间】:2020-12-30 00:16:42 【问题描述】:

我在credit card dataset 上运行支持向量机、逻辑回归和随机森林。我的训练数据集的形状为 (454491, 30)。我进行了 5 折交叉验证(耗时一个多小时),将“评分”设置为“f1_weighted”,得到以下结果:

Logistic Regression Cross Validation F1 score: 0.9501631748525725
Random Forest Cross Validation F1 score: 0.9999383944188953
Support Vector Cross Validation F1 score: 0.9989703035983751

我选择了 SVM,因为 Random Forest 容易过拟合,而且 SVM 的得分比 Logistic 回归要好。

我想通过超参数调整来添加正则化。我最初使用 GridSearchCV,但它需要很长时间,所以我将其更改为 RandomizedSearchCV,但即使这样也需要很长时间(大约 4-5 多个小时)。根据数据描述,对特征进行了缩放,并进行了 PCA 以保留私有信息。我还在 Amount 和 Time 列上使用了 RobustScaler(),因为它们没有被缩放。

tuned_parameters="kernel":['rbf','sigmoid'],
                 'gamma':[1e-2, 1e-3, 1e-4, 1e-5],
                 'C':[0.001, 0.10, 0.0001,0.00001]


tuned_SVM=RandomizedSearchCV(SVC(),tuned_parameters,cv=3,scoring='f1_weighted',random_state=12,verbose=15,n_jobs=-1)

对如何进行有什么建议吗?

【问题讨论】:

【参考方案1】:

首先;随机森林的想法是减少过拟合。正确的是,单个决策树(经常)非常过拟合——这就是为什么我们创建这个集合来减少方差但仍然保持低偏差的原因。请注意,随机森林的方差(过度拟合)可能会因您的参数而有很大差异,例如,如果您设置 max_features=n_features 其中n_features 是特征的数量,您将只创建多个相同的决策树,这确实会导致过拟合。

我的意思是,随机森林可以是一个强大的工具,决策树严重过度拟合,而随机森林(不应该)。

其次;如果我没记错的话,SVM 的训练时间是 O(n^2),其中n 是训练点的数量,即当有大量训练数据时,可能需要很长时间才能适应,因此对参数进行网格搜索可能需要很长时间 (!)。

第三;关于正则化。如果您使用内核获得了 0.99 的 val 分数(假设它是“rbf”),由于 SVM 的训练时间,我将只使用“rbf”内核运行并调整C-参数。还有,0.998还不够好吗?

可以使用“成本复杂性修剪”对决策树进行正则化,您只需在逻辑回归中使用复杂性(树的深度)惩罚评分函数。我不认为随机森林(sklearn)有这个选项。 他们的决策树有,因此您可以从中构建自己的随机森林,但由于随机森林中有 max_depth 参数,我认为这不值得。

第四;考虑bayesian optimization

当随机森林(根据您的结果)表现更好且训练速度更快时,为什么要使用 SVM?

【讨论】:

我最初确实使用了随机森林。我想添加正则化,所以我尝试使用 GridSearchCV 和 RandomSearchCV 更改不同的超参数值,但这需要很长时间。然后我决定尝试支持向量机,我想执行超参数优化,但由于它需要很长时间并且交叉验证分数非常好(0.998),我决定通过使用 GridSearchCV 更改 C 参数和 gamma 参数来添加正则化和 RandomSearchCV 也花了很长时间。 正则化用于避免过拟合。随机森林“天生”减少了过度拟合。当 RF 表现如此出色时,为什么必须在作为最终模型的 SVM 中进行正则化? 我最终使用了 cuML 的 svm 包并使用贝叶斯优化来调整超参数。对于随机森林,为了添加正则化,我使用 GridSearchCV 和 RandomSearchCV 更改了 n_estimators、max_features、max_depth 和 min_samples_leaf 超参数,这可能是它花了这么长时间的原因。我会尝试对贝叶斯优化做同样的事情,看看它是否有所作为 作为一种集成方法,RF 确实比决策树更好地解决过拟合问题,但我读过它确实过拟合的案例:datascience.stackexchange.com/questions/1028/…。所以我认为如果过度拟合,添加正则化会有所帮助 这是不正确的 - RF 与决策树具有相同的偏差(理论上),但集成有助于减少方差,从而减少过度拟合。请在此处查看我的答案中的证明:***.com/questions/63406684/…

以上是关于svm 需要很长时间进行超参数调整的主要内容,如果未能解决你的问题,请参考以下文章

使用 Keras 和 Theano 进行模型选择需要很长时间

svm 超参数调整:使用 e1071 tune.control 进行随机搜索。 random != NULL 在外部函数调用中给出 NA/NaN/Inf (arg 10)

与 ember.js 中的模态叠加一起使用时,ag-grid 调整列的大小需要很长时间才能响应

构建用于调整超参数的网格搜索

如何进行超参数调整?

BigQuery 查询需要很长时间