여러 Decision Tree를 앙상블한 것으로 Bagging-like method의 일종이다.
기존의 데이터 셋의 부분 집합을 통해 각 base learner가 되는 Tree를 제작한다.
이 때 base learner들은 사용하는 feature들을 다양화 하여 여러 view point를 가지게 된다.
구성 요소가 되는 각 tree들은 bootstrap sample (기존의 데이터 셋의 부분 집합)을 통하여 제작된다.
tree를 구성하는 node들을 구분하는 기준은 모든 input feature들을 다 생각하거나 클래스를 생성할 때 지정한 max_features
파라미터의 개수만큼을 생각하여 구분된다.
이러한 Tree들의 평균을 구함으로 우리는 에러를 낮출 수 있다. 다양한 모델들이 모였기 때문에 서로 모델들의 차이점을 나타내는 variance 수치가 낮아지게 되고 그에 반해 얼마나 틀린 답을 주는지에 대한 bias 수치가 높아지게 된다.
식별이 쉬운, 차이나는
feature를 골랐다.n_estimators : forest를 구성하는 Tree의 개수 [default == 100]
max_features : node 구분 시 랜덤 부분 집합의 feature 몇 개를 사용할 지, 크기를 결정
ex) max_features == 1.0 모든 feature를 다 사용하겠다. [default]
max_features == "sqrt" => sqrt(n_features)의 의미로 루트를 취한 만큼의 수를 사용하겠다.
n_jobs 파라미터를 통해 기기의 core를 병렬적으로 사용할 수도 있다. 물론 inter-communication 오버헤드로 인해 성능의 상향은 linear적이지 않을 수 있으니 주의.
random selection of features 를 통해 node들을 분리 함으로 전체적인 결과의 오차가 더 줄었다. 이를 하는 이유는 different point of view를 얻기 위함이라고 보면 될 것 같다.
k개의 독립적인 tree(분류기)를 가진 집합체이다.
모든 tree는 동일한 데이터 셋을 대상으로 한다.
각 tree들은 서로 독립적인 random vector(데이터 셋의 feature)를 가지고 생성되었다.
각 tree들의 투표를 통해 입력값에 대한 분류를 진행한다.
Strong Law of Large Numbers에 의해 random forest의 일반화 오류가 언제나 수렴하기에 그렇다.
정확도를 올리기 위해선, 상관관계는 줄이고 strength는 유지해야 한다.
=> 그러나 생각보다 feature의 수에 민감하지 않다.
대부분 2개 정도의 feature를 가져오는게 결과가 좋더라.
사용하는 feature가 1, 10, 25로 늘리는데 결과가 갈수록 좋아지긴 함
reference