我使用典型的决策室弱学习者使用了Scikit-Learn的adaboost。我想了解数据尺寸n和弱学习者的数量的运行时复杂性。。
对Orgrisel没有不尊重,但他的答案缺乏,因为它完全忽略了功能的数量。
adaboost的时间复杂性是微不足道的O(t f),其中f是使用弱学习者的运行时。
对于正常样式的决策树(例如C4.5),时间复杂性为o(n d^2),其中d是特征的数量。一个级别的决策树将是o(n d)
您绝对不应将实验如建议的确定算法的运行时复杂性。首先,您将无法轻松区分类似的复杂性,例如O(n log(n))和O(n log(n)^2)。这也有可能被基本的实施细节所欺骗。例如,当数据大部分被分类或包含一些唯一属性时,许多种类都可以表现出O(n)行为。如果您给出一个唯一值的输入,则运行时会显示出更快的结果,然后预期的一般情况。
它是o(n。t)。线性依赖性肯定是可以肯定的,因为用户可以选择树的数量并依次训练。
我认为在sklearn中安装树木的复杂性是o(n),其中n是训练集中的样品数量。当max_features
留为默认值时,功能的数量也具有线性影响。
确保您可以编写一个脚本,以测量10%,20%,... 100%的数据和n_estimators = 10,20,... 100的训练时间,然后绘制matplotlib的结果。
edit :由于adaboost通常应用于浅树(通常在1到7之间的max_depth
),因此可能是复杂性的依赖性实际上不是线性N。我认为过去,我测量了对完全发达的树木的线性依赖性(例如,如随机森林中的)。浅树可能的复杂性可能更接近O(n。log(n)),但我不确定。