0

내가 RandomForestClassifiers를 사용하여 파이썬에서 만든 이유를 알고 싶습니다. 같은 데이터 세트에서 학습을 반복 할 때 scikit-learn은 다른 결과를 생성합니다. 누군가 제발 설명해 주실 수 있습니까?명시 적 설정에서 scikit-learn의 RandomForestClassifier가 결정적이지 않은 이유는 무엇입니까?

내 코드의 관련 부분은 이것이다 :

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

이 설정은 실제로 오른쪽 어떤 임의성을 방지해야합니까? 알고리즘은 모든 기본 학습자가 성장하고 모든 스플릿에 대해 모든 기능을 고려할 수 있도록 동일한 양의 데이터 인스턴스 (완전한 데이터 세트)를 사용하도록 알고리즘을 강제해야합니다. 내가 가진

한 explaination은 이것이다 : A의 주어

  • 이 기능 F1을하고 F2
  • : 어쩌면 알고리즘은 일부 기능은 모든 기능의 세트에서 촬영하는 방법에 임의성, 예를 유지 이 노드 2 알고리즘에 순간적
  • 제 그려진대로 알고리즘은 F1 및 이후 F2를 선택 노드 1 분할은 수도 먼저 포착된다
  • 두 기능은 동일한 분할 품질과 F1을 가질 수이 스플릿 고려 먼저 f2를 먼저 선택하고 f1을 나중에 선택하십시오. 따라서 생성 된 모델은 알고리즘에 의해 생성 된 다른 모델과 다를 수 있습니다.

누구든지 신뢰할 수있는 정보를 제공 할 수 있습니까?

답변

1

아니요, 해당 설정으로는 재현 할 수있는 결과가 보장되지 않습니다. 대부분의 RF 구현에서 발생하는 사건을 자세히 설명했습니다. 임의의 분할은 난수 함수에 대한 시드에 따라 다릅니다.

제어하려면 설명서에서 ML 알고리즘이 사용하는 난수 패키지를 찾으십시오. 패키지를 가져 와서 seed 메소드로 값을 강제 지정할 수 있습니다. 짧은 솔루션을 시도 할 경우, 당신의 선택의 해쉬 일정

import random 
random.seed(<value>) 

을 ...보십시오. 원하는 정수 또는 문자열을 사용하는 것이 좋습니다. 귀하의 RF 패키지가 파이썬 랜덤 패키지를 사용하고있는 것으로 의심됩니다.이 방법을 사용하면 문서를 검토하는 번거 로움을 줄일 수 있습니다.

대부분의 패키지는 시스템 시간을 기본 시드로 사용합니다. 즉, 으로 변경하면 결과가 달라집니다.

+0

시간과 답변을 주셔서 감사합니다, 가지 치기! 예, 알고리즘을 결정적으로 만들어서 시드가 물론이 문제를 "해결"합니다. 문제는 내가 해결해야 할 매우 특별한 문제가 있으며 씨앗을 전달할 여유가 없다는 것입니다. 설명 된 설정에 남아있는 모든 임의성을 표현하려고 했습니까? 예제에서 설명한대로입니까? – vern

+0

Btw. RF 생성자는 seed를 정의하기 위해 random_state 매개 변수를 제공합니다. – vern

+0

아. 당신이 묘사하고있는 범위를 봅니다. 그러나 필자는 여전히 글 머리 기호로 표시된 단계가 일련의 실행과 다른 결과를 얻는 사례를 정확하게 정의한다고 생각합니다. 두 가지 기능이 동일한 분할 품질을 가질 수없는 일련의 기능으로이 가설을 테스트해볼 수 있습니까? – Prune