當m是特徵的數量,n是樣本的數量時,python scikit-learn站點(http://scikit-learn.org/stable/modules/tree.html)指出構建二叉決策樹的運行時間爲mnlog(n)。爲什麼運行時構造決策樹mnlog(n)?
我知道log(n)來自分裂後樹的平均高度。我明白,在每次拆分時,都必須查看每個特徵(m)並選擇最佳的拆分。我知道這是通過計算每個樣本在該節點(n)的「最佳度量」(在我的情況下,基尼雜質)完成的。但是,要找到最佳分割,這是否意味着您不得不看每種可能的方式來分割每個特徵的樣本?那不是像2^n-1 * m那樣的東西,而不僅僅是mn?我在想這個錯嗎?任何建議都會有幫助。謝謝。
即使排序,找不到最佳分割仍需要2 * n次爲每個功能?既然你將不得不檢查每種可能的方式來分割數據?這比n log n增長得更快,所以我認爲這將主導運行時。 – iltp38
@ iltp38雖然說得對,有兩個不同的數據分區分成兩組,但請記住,通過構建一些簡單的規則來構建決策樹,您可以使用該規則來確定要進入哪個子樹。在你所描述的決策樹的背景下,這通常是通過選擇一些簡單的分裂標準來完成的,比如「選擇某個特徵,選擇一個閾值,並將這些點分成'低於閾值'和'上面的那些閾值「。」這大大減少了可能的分裂數量。 (續...) – templatetypedef
@ iltp38它也確保樹可用。畢竟,當你得到一個新的測試點時,你需要知道你將如何確定每個點要走哪個方向,並且如果你選擇了節點上的任意聚類,你不一定知道哪個分區要下降成。 – templatetypedef