簡體   English   中英

為什么scikit-learn的RandomForestClassifier在顯式設置中不能確定?

[英]Why is RandomForestClassifier of scikit-learn not deterministic in explicit setup?

我想知道為什么當我在同一數據集上重復學習時,使用scikit-learn在Python中創建的RandomForestClassifiers會產生不同的結果。 有人可以向我解釋一下嗎?

我的代碼的相關部分是這樣的:

from sklearn.ensemble import RandomForestClassifier as RFC
RFC(n_estimators=100, max_features=None, criterion="entropy", bootstrap=False)

這種設置實際上應該可以防止任何隨機性,對嗎? 它應強制算法為每個基礎學習者使用相同數量的數據實例(即完整的數據集),並為每個拆分考慮每個功能。

我得到的一個解釋是:也許算法在從所有特征的集合中取出特征的方式上保留了一些隨機性,例如:

  • 給定特征f1和f2
  • 對於節點1中的拆分,算法選擇f1,然后選擇f2進行此拆分
  • 兩個要素可能具有相同的分割質量,並且首先繪制f1時才選擇它
  • 對於節點2中的拆分,算法也可以先選擇f2,然后再選擇f1,因此創建的模型可能與該算法創建的其他模型不同

誰能提供可靠的信息?

不,該設置不能保證可重復的結果。 您已經詳細描述了大多數RF實現中發生的情況:隨機分割取決於隨機數函數的種子。

要控制它,請查看文檔以查找您的ML算法使用哪個隨機數包。 您可能可以導入該包並將值強制為種子方法。 如果您想嘗試快速解決方案,請嘗試

import random
random.seed(<value>)

...哪里 是您選擇的任何可哈希常量。 我建議您喜歡一個整數或字符串。 我建議這樣做是因為我懷疑您的RF軟件包使用的是Python 隨機軟件包-試試看可能會節省您瀏覽文檔的麻煩。

大多數軟件包將系統時間用作默認種子。 這是為了確保您獲得不同的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM