AdaBoost 与 SVM 基分类器的执行时间

Posted

技术标签:

【中文标题】AdaBoost 与 SVM 基分类器的执行时间【英文标题】:Execution time of AdaBoost with SVM base classifier 【发布时间】:2020-01-17 23:27:15 【问题描述】:

我刚刚用这些参数做了一个 Adaboost 分类器,

1.n_estimators = 50

2.base_estimator = svc(支持向量分类器)

3.learning_rate = 1

这是我的代码:

from sklearn.ensemble import AdaBoostClassifier
from sklearn.svm import SVC

svc = SVC(kernel = 'linear',probability = True)

ABC = AdaBoostClassifier(n_estimators = 50, base_estimator = svc, learning_rate = 1)

ABC.fit(X,Y)

数据集有 18 个自变量,1 个分类因变量数据集有 10480 个数据点

每当我运行它时,它都会花费很多时间但没有任何结果。

有没有办法检查执行时间?或者有更好的方法吗?

【问题讨论】:

你为什么不用 1 或 2 个估算器试试呢。如果它很快,请使用更多,看看它的表现如何。或者尝试用更少的数据来感受一下你的算法有多快或多慢。 是的,我已经尝试过了,它减少了您所说的执行时间,非常感谢您的评论 【参考方案1】:

我最近也有类似的经历。不过,就我而言,我意识到在使用 SVM 作为基本估计器之前我并没有缩放 X。只需确保将数据从 0 扩展到 1(您可以使用 sklearn 中的 StandardScaler()),这在使用 SVM 之前始终是必需的。

【讨论】:

【参考方案2】:

在实践中,我们从不使用 SVM 作为 Adaboost 的基础分类器。

Adaboost(和类似的集成方法)是使用决策树作为基础分类器(更具体地说,决策 stumps,即深度仅为 1 的 DTs)构思的;如果您没有明确指定base_classifier 参数,那么今天仍然有充分的理由假设DecisionTreeClassifier(max_depth=1) 的值。 DT 适合这种集成,因为它们本质上是不稳定分类器,而 SVM 则不是这种情况,因此后者在用作基分类器时预计不会提供太多。

最重要的是,SVM 在计算上比决策树(更不用说决策stumps)要昂贵得多,这就是您观察到处理时间长的原因。

除非您有非常充分的理由坚持将 SVM 作为基分类器(我非常怀疑您这样做),否则请删除 base_estimator = svc 以恢复到默认设置,并且大多数也许你会没事的。

【讨论】:

以上是关于AdaBoost 与 SVM 基分类器的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

ML-Review-Adaboost

机器学习day12 机器学习实战adaboost集成方法与重新进行疝马病的预测

随机森林与Adaboost

为啥使用 1 个估计器的 adaboost 比简单的决策树更快?

OpenCV3 SVM ANN Adaboost KNN 随机森林等机器学习方法对OCR分类

以 SVM 作为弱学习器的 Opencv 级联分类器