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 基分类器的执行时间的主要内容,如果未能解决你的问题,请参考以下文章
机器学习day12 机器学习实战adaboost集成方法与重新进行疝马病的预测
为啥使用 1 个估计器的 adaboost 比简单的决策树更快?