SAS Viya는 혁신적인 분석 문제 해결 플랫폼으로 클라우드 기반의 인메모리(in-memory) 분석 엔진으로서 빠르고 정확한 분석 결과를 도출하기 위한 기능과 내결함성(fault-tolerant)프로세싱 기술으로 복잡한 분석 문제를 해결하면서 필요에 따라 손쉽게 확장할 수 있습니다.
SAS Viya의 장점 중 하나인 오토 튜닝은 머신러닝 기법에서 요구되는 주요 옵션 설정을 자동으로 튜닝하는 것으로 오픈 소스 커뮤니티에서는 찾아보기 힘든 기능입니다.
분석 프로시저에서 일부 머신러닝 모델링 기법인 gradient boosting, decision tree, random forest, support vector machine, factorization machine, 신경망에 대한 오토 튜닝(Auto-tuning)기능 을 제공합니다.
그 중 이번 게시글은 RandomForest 개념과 SAS Viya에서 RandomForest의 options들에 대해 설명하겠습니다.
[RandomForest]
Machine Learning 중 하나의 모델인 decision tree는 주어진 학습 데이터에 따라 생성되는 의사결정트리가 매우 달라져서 일반화 하여 사용하기가 어렵고, decision tree를 이용한 학습 결과 역시 성능과 변동의 폭이 크다는 단점을 가지고 있습니다. 이런 단점을 극복하기 위해 랜덤 포레스트가 등장하게 되었습니다. 랜
랜덤포레스트는 다수의 결정트리들을 학습하는 앙상블 방법으로 검출, 분류, 그리고 회귀 등 다양한 문제에 활용되고 있습니다.
랜덤 포레스트는 우리말로 무작위 숲으로 직역할 수 있습니다. 이 무작위 숲은 여러 개의 무작위 의사결정트리로 이루어진 숲이라는 개념으로 이해할 수 있습니다.
위의 그림을 보면, single treee보다 100개의 trees개 decision boundary에 따라 더 잘 분류하는 것을 볼 수 있습니다. decision boundary는 주어진 sample의 종류를 잘 구분할 수 있는 경계라는 의미로 어떤 하나의 값(value)이 아니라 경우에 따라서는 수십차원의 고차원상에서 sample을 분류해 내는 경계입니다.
랜덤 포레스트의 학습 원리에 대해서 알아보겠습니다.
step 1.주어진 트레이닝 데이터 세트에서 무작위로 중복을 허용해서 n개 선택합니다.
step 2.선택한 n개의 데이터 샘플에서 데이터 특성값(아이리스의 데이터의 경우, 꽃잎 너비, 꽃잎 길이 등이 데이터의 특성값; 변수로 이해)을 중복 허용 없이 d개 선택합니다.
step 3.이를 이용하여 의사결정 트리를 학습하고 생성합니다.
step 4. step1 ~ 3단계를 k번 반복합니다.
step 5. step 1~ 4단계를 통해 생성된 k개의 의사결정트리를 이용해 예측하고 예측된 결과의 평균이나 가장 많이 등장한 예측 결과를 선택하여 최종 예측값으로 결정합니다.
step1에서 무작위로 중복을 허용해서 선택한 n개의 데이터를 선택하는 과정을 bootstrap이라고 합니다. 부트스랩으로 추출된 n개의 데이터를 부트스트랩 샘플이라고 부릅니다.
step2에서 d값으로 보통 주어진 트레이닝 데이터의 전체 특성의 개수의 제곱근으로 주어집니다. 즉, 트레인닝 데이터의 전체 특성의 개수를 m이라고 하면 d의 값은 m의 제곱근 입니다. d = root(m)
step5에서 여러개의 의사결정트리로부터 나온 예측결과들의 평균이나 다수의 예측 결과를 이용하는 방법을 앙상블 기법이라고 합니다. 다수의 예측 결과를 선택하는 것은 다수결의 원칙과 비슷하다 해서 Majority Voting(다수 투표)이라고 부릅니다.
부트스트랩을 이용해 무작위 의사결정 트리의 집합인 랜덤 포레스트를 구성하는것처럼, 부트스트랩으로 다양한 분류기에 대해 앙상블 기법을 활용하여 특징적인 하나의 분류기로 구성하는 것을 bagging이라고 부릅니다.
Random Forest 알고리즘과 Decision Tree 알고리즘의 차이를 알아보면 다음과 같습니다.
다음은 SAS Viya에서 RandomForest Options에 대해 알아보겠습니다.
①[트리 수]100(기본값): 포리스트 내 생성할 트리의 개수 지정
②[Class 타겟 다수결 방법:] 확률(기본값): 예측확률값을 계산하는 방법 지정
•확률: 모든 트리의 타겟의 확률값의 평균을 사용
•과반수: 타겟으로 예측되는 트리의 수의 비중 사용
③[Class 타겟기준:] 정보이득비(기본값): 범주형 타겟에서 각 입력변수의 최상의 분할을 위해 분리기준 지정
•CHAID/ Gini/ 엔트로피/ 정보이득비/ 카이제곱:
④[Interval 타겟기준:] 분산(기본값): Interval 타겟에서 각 입력변수의 최상의 분할을 위해 분리기준 지정
•CHAID/ F-test/ 분산
⑤[최대가지수] 2(기본값): 트리에서 티치 노드 분할을 고려할 최대 분기 수를 지정. 가능한 값의 범위는 2에서 5.
⑥[최대 깊이] 20(기본값): 포리스트 내의 생성 된 각 트리의 최대 깊이를 지정. 가능한 값의 범위는 1에서 50.
①[최소 리프 크기] 5(기본값): 새로운 가지가 가질 수 있는 관측치의 최소 수 지정. 그 수는 이용 가능한 관측치의 수로 표현되며, 가능한 값의 범위는 1에서 64.
②[결측값]검색에 사용(기본값): 변수값에 누락(missing)이 있는경우 처리할 방법 지정
•검색에 사용/무시/기계최소값으로 사용
③[검색에 사용할 최소 결측값] 1(기본값): 분할 검색에서 누락(missing) 된 값을 사용하기위한 임계 값을 지정
•[결측값] 처리 방법에서 “ 검색에 사용”으로 지정할 경우 사용
④[Interval 구간수] 20(기본값): Interval 변수에 사용될 구간수를 지정, 구간의 크기는 (최대값-최소값)/구간수.
⑤[Interval 구간화 방법] 버킷(기본값): Interval 변수를 구간화 하는데 사용되는 방법을 지정
•버킷: 최대값과 최소값의 차이에 따른 입력을 균등간격으로 구간화
•분위수: 동일한 크기의 그룹으로 구간화
①[In-bag 표본 비율] 0.6(기본값): 하나의 트리를 train하기 위해 사용되는 관측치의 비율(In-bag 비율).
②[분할당 고려할 기본입력변수 수 사용] 기본값으로 체크 포리스트 분할당 고려할 기본입력수 즉, 입력수의 제곱근을 지정.
③[분할당 고려할 기본 입력변수 수] 100(기본값): 분할당 랜덤하게 샘플되어 사용되는 입력변수의 수.
④[LOH를 사용하여 서브셋을 지정할 입력변수 수] 0(기본값): LOH방법을 사용하여 샘플링할 입력변수의 수를 지정,0으로 지정하면 더 이상의 입력샘플링이 수행되지 않음.