在ID3實現中,此時算法中的遞歸應該停止。在ID3實現中,此時算法中的遞歸應停止
1
A
回答
0
只要滿足分裂標準,那麼你繼續分裂(從現存的兩個新節點形成)。
分裂準則通常是父節點信息增益,又名熵,之間的差的負值(或方差如果變量是離散的,而不是絕對的)和的加權平均IG假定子節點的加權平均信息增益:
if weighted_mean(IG_child1, IG_child2) < IG_parent :
createNodes(IG_child1, IG_child2)
else :
continue
因此,這是微不足道的答案,但有可能有你的問題,而如果你不介意的背後更復雜的意圖,我會重新WO rd略微如只要分裂準則滿足,你應該繼續創建節點嗎?
正如你可能剛剛發現,如果你是一個編碼ID3算法,應用分割標準無約束往往會導致過度擬合(即你從訓練數據構建樹沒有按因爲它沒有將真正的模式與噪音區分開來,所以概括得很好)。
因此,這更可能是回答你的問題:技術,以「約束」節點分離(並因此處理過擬合問題)全部落入兩個大類 - 自上而下或下一個up。自上而下的一個例子:設置一些閾值(例如,如果子節點的加權平均值小於5%以下,那麼不要分割)?
自下而上的示例:pruning。修剪意味着在分裂標準滿足之後讓算法分裂,然後停止,從底層的節點開始並「非分裂」任何節點,其中子節點與父節點之間的IG差異小於某些節點閾。
這兩種方法並不具有相同的效果,事實上修剪是優越的技術。原因是:如果你自上而下執行分裂閾值,那麼當然會阻止一些分裂;然而,如果它已被允許發生,則下一次拆分(兩個子節點中的一個或兩個拆分爲孫子)可能是有效的拆分(即,高於閾值),但該拆分永遠不會發生。修剪當然會對此作出解釋。
2
當沒有留下要分類的示例或者沒有屬性需要分類時,分支停止。 algorithm description on Wikipedia非常容易遵循,並且還有一些鏈接指向示例和討論。
相關問題
- 1. 停止遞歸算法
- 2. 在Prolog中停止遞歸?
- 3. 在方法中停止遞歸循環
- 4. 如何在序言中實現樹算法的尾遞歸
- 5. 在python中實現遞歸深度優先算法的錯誤
- 6. 如何正確實現遞歸算法?
- 7. 如何實現遞歸算法向後
- 8. 停止時鐘在wp7中的實現
- 9. 在javascript中實現遞歸
- 10. 如何在SQL中實現此算法?
- 11. 如何在DP表中實現這個遞歸算法?
- 12. 如何在2次迭代後停止此遞歸方法
- 13. 方法的遞歸實現
- 14. 停止prePersist LifeCycleEvent在Doctrine2中遞歸Entiy
- 15. 在jQuery中停止遞歸動畫
- 16. 在BeautifulSoup4中,Python3,如何停止發現標籤內的遞歸?
- 17. 遞歸不停止
- 18. 如何計算此遞歸算法的時間複雜度
- 19. 用遞歸算法中
- 20. 遞歸方法爲什麼會停止?
- 21. 短時間後遞歸循環停止
- 22. 如何在Java中實現遞歸
- 23. 如何在U-SQL中實現遞歸?
- 24. 在Java中實現遞歸lambda函數
- 25. 在Python中遞歸地實現排列
- 26. 在重複程序中實現遞歸
- 27. 在Haskell中遞歸實現LCM
- 28. 在OpenCV中實現自適應算法
- 29. 遞歸算法
- 30. 停止遞歸函數
+1等價說明,當節點上的所有示例都具有相同的目標類時(不需要分割) – Amro 2010-09-19 22:17:15