BookmarkSubscribeRSS Feed

[EM] 로테이션 포레스트(Rotation Forest)

Started ‎06-10-2020 by
Modified ‎06-10-2020 by
Views 129

안녕하세요 MySAS홍보대사 한노아입니다.

 
오늘은 지난 시간에 이어서 SAS코드노드 등을 이용해 사용자가 원하는 앙상블 모형을 커스터마이징 하는 방
법에 대해 알아보도록 하겠습니다. 데이터는 지난시간과 동일한 'Image Segmentation Data Set'을 이용할 것입니다. 오늘 구현해 볼 앙상블 모형은 비교적 최근에 소개된 로테이션 포레스트(Rotation Forest) 모형입니다.
 
INTRODUCTION
​지난 시간에는 신경망 모형의 모수(히든 유닛의 수)를 조정하여 앙상블 모형을 구축하는 방법 및 이를 이용해서 최적 히든 유닛의 개수를 추정하는 방법 등에 대해서 알아보았습니다. 오늘은 비교적 최근에 소개된 로테이션 포레스트의 근사 모형을 E-miner의 SAS코드 노드와 주성분분석(Principal Components Analysis)노드를 이용하여 구현해 보도록 하겠습니다. 오늘 실습의 맹점은 앙상블 모형을 커스터마이징 하는 방법에 대해 알아보는 것이기 때문에 이론에 대한 자세한 설명은 레퍼런스를 참고해 주시기 바랍니다.
 
DATA DESCRIPTION
SE22017011519455070.png
오늘 실습에서 이용할 데이터는 지난시간과 동일한 UCI의 “Image Segmentation Data Set”입니다. 이 데이터는 이미지의 픽셀정보를 이용한 다양한 특징(feature)들을 이용하여 어떤 이미지 인지를 맞추는 기계학습 문제를 갖고 있는 데이터 입니다. 이 데이터의 입력변수는 총 19개이고 자세한 내용은 위와 같습니다.
 
 
SE22017011519462370.jpg
목표변수(target)는 위와 같이 7개의 수준을 갖는 범주형 변수입니다. 위 목표변수는 직접 사진을 보고 사람이 어떤 사진인지를 명명해 준 것으로 예를 들어 “SKY” 하늘을 찍은 사진을 의미합니다.
 ​
DESCRIPTIVE STATICS
SE22017011519465470.jpg
위 표를 통해 알 수 있듯 “region-pixel-count”변수의 경우 모든 데이터에서 동일한 값을 갖기 때문에 자동으로 reject가 된 것을 알 수 있습니다. 나머지 변수들의 경우 대체로 분포 왜곡이 심판 편이지만 결측치는 없는 것으로 보아 변수변환 노드를 이용한 변수변환 절차만을 진행하는 것이 좋을 것으로 보입니다.
 
PREDICTIVE MODELING
SE22017011520082370.jpg
이번 실습에서는 앞선 연재를 통해 살펴본 배깅 및 랜덤포레스트와 유사한 형태를 갖는 로테이션 포레스트 모형입니다. 본 모형은 구조상 배깅과 매우 유사한 프로세스를 갖습니다. 차이가 있다면 (1) 모형 학습에 이용할 변수를 임의 선택 ​한다는 것과 (2) 주성분 분석을 이용한 차원축소​를 이용한다는 점입니다. 추가 된 두 단계에서 두 번째 단계(주성분 추출)를 생략하게 되면 랜덤포레스트 모형과 동일한 프로세스를 갖게 됩니다. 
 
먼저 상단의 각 옵션의 경우 앞선 연재와 동일하게 연속형 변수에 대해 정규성을 최대화 할 수 있는 방향으로 변수변환을 진행했습니다. 그 다음 표본 추출의 경우 학습용(Train) 70%, 평가용(Validate) 30%으로 설정하였고 각 SAS 코드 노드의 경우 랜덤시드 값만 서로 상이하게 하여 모형을 생성했습니다. 주성분분석(Principal Components Analysis) 노드의 경우 기본 값(default)값을 그대로 이용했고 각 의사결정 트리의 경우 최대 깊이(Maximum depth)를 모두 50으로 설정했습니다.  E-miner에서 자체적으로 제공하는 랜덤포레스트 모형과의 비교를 위해 랜덤포레스트 모형의 경우 최대 트리의 개수를 8개로 설정했습니다.
 
앞 서 언급한 두 단계(변수 임의 선택 및 주성분 분석) 중 변수 임의 선택단계를 구현하기 위해 이번 실습에서는 E-miner의 SAS코드 노드를 활용했습니다. 세부적인 내용은 코드를 살펴보면 설명을 이어가도록 하겠습니다. 
SE22017011520092970.png
 

SAS Code Node

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

20

21

%macro _bootstrapping_(input, outd, seed);

 

  proc sql noprint;

    select count(*) as cnt

    into :cnt

    from &input

  ;quit;

 

  proc surveyselect data = &input

        n = &cnt

   out = &outd(drop = NumberHits)

        seed = &seed

   method = urs

   noprint

   outhits;

  run;

 

%mend _bootstrapping_;

 

%_bootstrapping_(&EM_IMPORT_DATA, &EM_EXPORT_TRAIN, 1234);

 

먼저 살펴볼 코드는 부스팅 실습때 이용했던 'boostrapping'매크로입니다. 위 코드에서 각 분류기에 대응되는 SAS 코드마다 랜덤시드 값(매크로 함수의 세 번째 인수)만 변경해 주어 적용하면 됩니다. 위 코드는 크게 두 스탭으로 나눠져 있는데 첫 번째 단계(3~7 줄)를 통해서 입력된 데이터의 관측치의 개수를 구하고 두 번째 단계(9~16줄)에서 Surveyselect 프로시저를 이용해 단순임의 복원추출을 진행하게 됩니다. 개별 옵션에 대한 자세한 설명은 아래 링크를 참고하시기 바랍니다.

링크 : http://support.sas.com/documentation/cdl/en/statug/63347/HTML/default/viewer.htm#statug_surveyselect...

 

 

 
SE22017011520101270.jpg
 

SAS Code Node

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

%macro keepsomevars(randomseed);

 

       proc sql;

             create table _temp_ as

             select NAME

             from &EM_IMPORT_DATA_CMETA

             where role = "INPUT"

       ;quit;

 

       %let rejected_number = %eval(&sqlobs- %sysfunc(ceil(%sysfunc(sqrt(%eval(&sqlobs))))));

       proc sql outobs = &rejected_number;

             create table _temp_ as

             select NAME

             from _temp_

             order by ranuni(&randomseed)

       ;quit;

 

       proc sql noprint;

             select *

             into :my_input1- :my_input&rejected_number

             from _temp_

       ;quit;

 

       %do i = 1 %to &rejected_number;

             %let &&my_input&i = %sysfunc(strip(&&my_input&i));

             %put Rejected variables : &&my_input&i;

             %EM_METACHANGE(name = &&my_input&i, role = REJECTED);

       %end;

 

       proc datasets lib = work noprint;

        delete _temp_;

       run;

 

%mend keepsomevars;

%keepsomevars(1234);

 

위 매크로는 임의로 변수를 선택하기 위한 매크로 입니다. 위 코드는 크게 3단계로 구성되어있습니다. 우선 첫 번째 단계(3~8줄)의 경우 입력된 데이터의 메타 데이터에서 역할이 INPUT으로 설정되어 있는 변수리스트의 이름을 '_temp_'데이터에 저장합니다. 

 

두 번째 단계(10~23줄)에서는 첫 번째 단계에서 추출한 변수이름들 중 Rejected할 데이터를 '전체 데이터의 수(&sqlobs) - 루트 입력데이터의 수'를 이용해 구합니다. 그 다음 해당 변수의 수 만큼을 첫 번째 단계에서 추출한 테이블에서 임의 추출하고 추출된 변수들을 매크로 변수에 저장(INTO문을 이용)합니다.

 

마지막으로 위에서 추출된 변수(Rejected 시킬)들을 각가 %do-%end 루프를 이용하여 %EM_METACHAGE 매크로 함수를 이용해 역할을 'Rejected;로 변경합니다. 

 

위 코드의 경우 기존 SAS paper[1]에서 제공하는 코드와 다소 상이 할 수 있습니다. 변경한 이유는 기존에 제공하는 코드의 경우에는 추출되는 변수의 개수가 일정하지 않아 1개의 변수만 추출되는 경우가 존재하기 때문에 위와 같이 트리의 수가 많지 않은 경우 추출되는 변수의 개수에 따라서 퍼포먼스의 편차가 너무 크기 때문에 기존 랜덤포레스트 알고리즘에서 주로 사용되는 루트(전체 입력 변수의 수)를 이용하도록 하기 위해서 입니다.

 

 

GOODNESS-OF-FIT

SE22017011520302770.jpgSE22017011520303670.png

이번 실습의 모형 평가 결과를 살펴보면 평가오분류율면에서 로테이션 포레스트 모형이 EM에서 제공한 랜덤포레스트 모형보다 더 높은 오분류율을 나타내는 것을 알 수 있었습니다. 이러한 점으로 미뤄봤을 때 본 데이터의 경우에는 로테이션 포레스트가 일반적인 랜덤포레스트보다 더 좋은 성능을 나타내지 않는 것을 알 수 있었습니다.

 

CONCLUSION

이번 실습과정의 목적은 앙상블 모형을 커스터마이징 하는 방법에 대해 알아 보는 것이었습니다. 부스팅 계열 모형을 커스터 마이징 하고 싶은 경우에는 그룹처리 노드를 이용하거나 앞서 살펴본 SAS코드 노드를 적절하게 활용하면 이번 연재에서와 같이 구현이 가능합니다. 이번에 알아본 모형은 로테이션 포레스트 모형이었습니다. 기존의 랜덤포레스트 모형에 주성분분석을 이용한 차원축소 개념을 추가한 개념의 모형으로 2006년에 소개된 매우 최근 알고리즘 중 하나입니다. 결과적으로는 기존 랜덤 포레스트 모형보다 더 안 좋은 성능을 나타냈지만 트리의 개수가 8개 밖에 되지않아 사실상 정확한 비교를 했다고는 말하기 어렵습니다. 만약 트리의 개수가 일반적인 랜덤 포레스트 노드 처럼 100~150개 정도 생성하여 비교하게 된다면 더 좋은 성능을 나타낼 수 있지 않을까 하는 아쉬움이 있었습니다.  끝으로 다음 연재에서는 앞 서 부스팅 및 배깅 앙상블 방법을 이용하며 살펴 보았던 그룹처리 노드의 다양한 기능들에 대해서 알아보도록 하겠습니다.

 

REFERENCES 

[1] http://support.sas.com/resources/papers/proceedings14/SAS133-2014.pdf

​[2] http://archive.ics.uci.edu/ml/datasets/Image+Segmentation

[3] Rodriguez, Juan José, Ludmila I. Kuncheva, and Carlos J. Alonso. "Rotation forest: A new classifier ensemble method." IEEE transactions on pattern analysis and machine intelligence 28.10 (2006): 1619-1630.

Version history
Last update:
‎06-10-2020 04:01 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags