Professional Documents
Culture Documents
WEKA API 그리고 커맨드라인 인터페이스
WEKA API 그리고 커맨드라인 인터페이스
스텝
바이
스텝 3
사실 외카(WEKA) GUI환경도 상당히 유용하지만 외카 커맨 윈도우에는 runweka.ini 파일이나 runweka.bat 파일을 적절
드라인 인터페이스도 나름대로의 장점을 가지고 있다. 특히 메모 하게 수정하면 된다. 이는 Mac 설정과 크게 다르지 않다.
리 사용량이 GUI 환경에 비해서 훨씬 적어 때로 GUI에서 돌리 위 파일들은 운영체제마다 다른데, 특히 메모리 설정과
지 못하는 크기의 데이터도 때에 따라 잘 돌릴 수 있고, 간편하게 libsvm이라는 SVM 라이브러리를 외카GUI 실행시 인클루드 시
어떤 배치 프로세스를 만들어 쉘스크립트로 돌리게 할 때도 상당 키는데 유용하게 활용할 수 있다. 자바에 익숙하다면 이 파일을
히 유용하다. 수정하는데 큰 어려움은 없을 것이다.
그럼에도 불구하고 GUI환경에서 더 많은 데이터를 로딩하고
싶은 독자라면 외카를 아래와 같은 옵션을 줘서 실행해 사용하기 외카의 핵심 패키지
바란다. 먼저 외카 API를 살펴보기 위해 외카 설치 디렉토리의 doc 디
패키지 설명
java -Xmx1024m /somewhere/weka.jar weka.gui.GUIChooser
weka.core 다른 패키지에서 사용하는 일반적인 컴포넌트들을 포
함하는 패키지. 속성, 데이터셋, 컨버터(converter), 행
위 옵션은 1G의힙 메모리를 자바VM에 할당하다는 명령어다. 렬 조작, 텍스트 파싱, 트리 표현, XML과 같은 모델링
256 m a s o
WEKA API 그리고 커맨드라인 인터페이스
속성 정의가 되었으니 Instances 객체를 생성해 실제 데이터 이곳에서 사용한 isTestingSet 은 isTrainingSet을 생성한
를 Instance로 변환해 Instances에 입력해 보도록 하자. 방법과 동일하게 생성된 데이터셋이다.
m a s o 257
스 텝 바 이 스 텝 | 3
<표 2> 혼동행렬 Name Type Nom Int Real Missing Unique Dist
1 sepallength Num 0% 11% 89% 0 / 0% 9 / 6% 35
혼동행렬을 잘 살펴보면 분류기가 어떤 부분에 대해서 잘 분류 2 sepalwidth Num 0% 19% 81% 0 / 0% 5 / 3% 23
하고 잘못 분류하고 있는지 좀더 자세하게 볼수 있는 장점이 있 3 petallength Num 0% 9% 91% 0 / 0% 10 / 7% 43
다. 외카의 Explorer에서는 결과 로그에 기본적으로 이 혼동행렬 4 petalwidth Num 0% 9% 91% 0 / 0% 2 / 1% 22
을 보여준다. 5 class Nom 100% 0% 0% 0 / 0% 0 / 0% 3
지금까지 데이터셋을 인스턴스화 해 이를 기반으로 분류기를
만들고 이들을 평가하기 위한 API까지 개략적으로 살펴봤다. 사 우리가 이전 강좌에서 설명했던 iris.arff 데이터에 대한 간략
실 여기서 소개된 방법은 아주 간단한 방법으로 API를 참고하여 한 정보들이 나오는 것을 볼 수있을 것이다. 외카 공식 포맷인
여러분들이 원하는 코드를 완성해 볼 수 있다. arff 이외의 데이터 파일 형식을 로딩하기 위한 다양한 클래스들
을 제공하고 있는데, 이들에 대한 목록은 weka.core.converters
커맨드라인 인터페이스 패키지 내에서 확인 가능하다. 예를 들어 많이 쓰이는 CSV파일
커맨드라인 인터페이스를 사용하기 위해서 시스템 자바 환경 포맷을 arff로 변환하기 위해서는 간단하게 아래의 명령어로 변
을 설정해줄 필요가 있다. 일단 시스템에는 자바가 설치되어 있 환 가능하다.
다고 가정하고 간단히 CLASSPATH 환경 변수에 weka.jar파일
을 연결해 주면 간편하게 쓸 수 있다. 예를 들어 필자의 Mac 머 java weka.core.converters.CSVLoader data.csv > data.arff
신 환경 변수는 아래와 같이 작성해 두었다.
그리고 이 변환의 역으로 수행을 하기 위해서는
CLASSPATH=/Applications/weka/weka-3-6-
1/weka.jar:$CLASSPATH; export CLASSPATH java weka.core.converters.CSVSaver -i data.arff -o data.csv
만일 잘 연결이 되었다면 콘솔 창에서 아래의 명령어에 대해서 와 같이 실행하면 된다. 아시다시피 arff 파일 포맷이 더 많은
다음과 같은 결과가 출력 되어야 한다. 정보를 포함하고 있기 때문에 CSVLoader로 변환을 시키기 위
해서는 명령행 옵션을 통해 정보를 전달해 주는 것이 좋다.
chairservice-lm:weka-3-6-1 heewon$ java weka.core.Instances -h
258 m a s o
WEKA API 그리고 커맨드라인 인터페이스
자바에 익숙한 독자라면 단순히 자바 클래스 내의 main함수 그리고 출력된 모델 파일인 iris를 가지고 다시 로딩해 데이터
를 호출하는 방법이라는 것을 쉽게 알 수 있을 것이다. 따라서 셋을 평가해 보자.
WEKA API문서(/wekat설치디렉토리/doc/index.html)의 각클
래스의 main 함수 부분을 확인해 보면 자세한 옵션을 확인할 수 java weka.classifiers.bayes.NaiveBayesSimple -l iris -T
있을 것이다. data/iris.arff
일단 이전 강좌에서 설명했던 데이터 파일인 iris.arff 파일을
가지고 몇가지 실험을 해보도록 하겠다. 그리고 이번에는 결정트 이런 식으로 새로운 데이터의 평가가 가능하다. 물론 예제에
리와 나이브 베이지언 뿐만 아니라 실제 외카에는 wrapper 클래 서는 학습셋을 넣었지만 실전에서는 테스트셋을 넣어줘야 할
스만 존재하는 SVM이라는 분류기까지 사용해 보도록 하겠다. 것이다.
SVM 분류기는 단독으로 사용될 때 가장 성능이 좋다는 평가를
받고 있는 분류 알고리즘이다. 무엇보다 일반화(generalization) 결정트리
능력이 가장 뛰어난데, 이 일반화 능력은 학습셋 이외의 미지의 그렇다면 결정트리를 사용하기 위해서는 어떻게 해야 할까?
데이터를 얼마나 잘 분류하느냐를 의미한다. SVM은 실제 구현 이전 컬럼에서 언급했듯이 결정트리(id3)는 명목형(nominal) 값
및 알고리즘 이해가 까다로운 면이 있으므로 자세히 살펴보고자 을 속성으로 받아들인다. 물론 연속형 값을 받아들이는 결정트
하는 분들은 관련 서적을 참고해 주기 바란다. 리 종류도 있지만 filter의 동작을 살펴보기 위해 id3 알고리즘
일단 지난 강좌에서 익스플로러로 돌려본 것을 커멘드라인 기 을 사용하도록 하자. 우리가 Explorer에서 했던 과정과 동일한
반으로 해서 결정트리와 나이브 베이지언 기반으로 돌려보도록 과정을 거치기 위해 filter를 사용해 데이터 이산화(Discretize)
하겠다. 그러면 커맨드라인 분류기에서 일반적으로 많이 사용되 를 시켜보자.
는 옵션들을<표 3>으로 살펴보자. 데이터 이산화를 하기 위해 아래의 명령어를 실행해
iris_dis.arff 파일을 생성한다.
옵션 설명
-t 학습셋 파일명(ARFF포맷)
-T 테스트셋 파일명(ARFF포맷), 만일 명시되지 않으면 학습셋을 교 java weka.filters.supervised.attribute.Discretize -i data/iris.arff -o
차검증(cross-validataion)을 하게 된다. data/iris_dis.arff -c last
-x 교차검증의 폴드(fold)개수를 정한다. 기본값은 10이다.
-c 클래스 인덱스, 기본값은 last이다.
출력된 데이터인 iris_dis.arff 파일을 한번 살펴보는 것도 데이
-d 모델을 출력할 출력 파일 이름, 학습 후에 모델일 생성하면 이옵
션을 이용해 모델을 출력해 놓을 필요가 있다. 교차검증을 해서
터 변환을 이해하기 위해 필요하니 살펴보면 많은 도움이 될 것
나온 결과 모델들이 저장이 되는 것이 아닌 전체 학습셋의 학습 이다. 그리고 바로 이를 id3알고리즘에 태워보자.
결과가 저장된다.
-l 저장된 모델을 로딩 하기 위한 옵션,
java weka.classifiers.trees.Id3 -t data/iris_dis.arff -i
-d 옵션을 통해 나온 모델 파일을 추후 이곳에 입력하면 된다.
-p# 이옵션이 설정되면 모든 데이터에 대해서 예상값을 보여주고 #번
째 속성에 대한 값도 보여준다. 만일 테스트셋이 설정되지 않은 이렇게 하면 앞의 나이브 베이지언 결과와 비슷한 포맷의 로그
상태라면 학습셋을 기반으로 교차검증 결과를 보여주게 된다. 가 출력 되는 것을 볼 수 있을 것이다. 역시 이 명령도 같은 방법
-i 혼동행렬을 기반으로 다양한 테스트 결과들을 보여준다.
으로 모델 파일을 생성할 수 있으며 이를 다시 새로운 데이터 셋
-o 모델에 대한 정보를 보여주지 않고 일반적인 결과들을 보여주기
에 적용할 수 있다.
위한 옵션이다.
<표 3> 분류기의 일반적인 옵션 설명
SVM
나이브베이지언 이제 마지막으로 SVM(support vector machine)을 사용하는
아래의 명령으로 데이터 파일을 학습 시킨다. 방법을 알아보자. 이 SVM 방법은 Vladimir Vapnik이라는 러시
아 과학자가 만들어낸 분류 알고리즘으로 많은 논문의 실험에서
java weka.classifiers.bayes.NaiveBayesSimple -t data/iris.arff -d 가장 좋은 성능을 보여주는 분류기라고 증명되었고 이 때문에 실
iris 제 업무에서도 많이 사용하고 있는 분류 알고리즘이다.
m a s o 259
스 텝 바 이 스 텝 | 3
필자 메모
260 m a s o
WEKA API 그리고 커맨드라인 인터페이스
참고자료
이번 컬럼에서는 지난 호의 컬럼에서 GUI를 다룬 것과 같은 1. 패턴인식, 오일석 저
데이터와 알고리즘을 이용해 커맨드라인으로 이용하는 방법을 2. http://weka.wiki.sourceforge.net/ 외카 공식 위키
3. Collective Intelligence in action, Manning, 2008
알아봤다. 윈도우 사용자들이나 일반적인 사용자는 왜 커맨드라
전망 좋은 창가에서
전망 좋은 창가에 서서
밖을 내다본 적 있으세요?
마음이 한결 뿌듯해집니다.
도전하는 용기가 생깁니다.
미래가 그려질 것입니다.
m a s o 261