You are on page 1of 6

WECA를 이용한 예측프로그램 만들기

WEKA API 그리고


커맨드라인 인터페이스
1회에서 우리는 기본적인 WEKA GUI 인터페이스에 대해서 살펴보았고, 데이터 마이닝 작업이 어떤 방식으로 수행되는지 알
아보았다. 이번 컬럼에서는 WEKA API에 대해서 살펴보고, 이들 API를 이용한 커멘드라인 인터페이스에 대해서 살펴보도록
하겠다.

연 재 가 이 드 전희원 gogamza@freesearch.pe.kr, www.freesearch.pe.


1회 | 2009. 7 | 데이터 마이닝 및 WECA GUI를 알아보자 kr|학교에서는 정보검색 및 Machine Learning을 주로 연구했으며, 수년
2회 | 2009. 8 | WECA API 그리고 커멘드 라인 인터페이스 간의 검색엔진 개발 및 데이터마이닝 경험을 가지고 있다. 대용량 데이터 처
3회 | 2009. 9 | 오류 쿼리 분류기 예제 리 및 데이터 마이닝에 많은 관심을 가지고 있고, 현재 야후! 아시아 서치 엔
지니어링(Asia Search Eng)팀에서 방대한 양의 웹 데이터를 들여다보며 흥미로운 시간을
보내고 있다.

스텝
바이
스텝 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과 같은 모델링

필자의 기억으로는 WEKA의기본 설정이 16~64M인것으로 알 관련 클래스가 있다.


weka.classifiers 다양한 분류 알고리즘을 구현하고 있다. 숫자형 예측을
고 있다.
위한 알고리즘도 포함되어 있다. weka.clusterers다양
필자의 Mac 머신에서는“
“/Applications/weka/weka-3-6- 한 클러스터링 알고리즘을 구현하고 있다.
1.app/Contents/Info.plist”
”파일을 수정하는 것으로 간단하게 weka.attributeselection 속성 선택을 위한 알고리즘을 포함하고 있다.

마칠 수 있었다. weka.associations 연관규칙을 찾기 위한 알고리즘을 포함하고 있다.


weka.filters 데이터셋에 적용하기 위한 필터에 관련된 패키지이다.
이전에 설명했던 연속형값을 이산형값으로 변환할 때
<key>VMOptions</key>
사용한 필터도 이 패키지에 속해 있다.
<string>-Xmx1024M</string> weka.gui 첫번째 연재에서 설명한 각종 GUI에 대한 API이다.

<표 1> 외카의 핵심 패키지들

256 m a s o
WEKA API 그리고 커맨드라인 인터페이스

렉토리의 index.html을 브라우저로 열어놓을 필요가 있다. 페이 <리스트 2> 빈 학습셋 생성

지를 열어보면 알겠지만 외카에는 상당히 다양한 패키지들을 포 // 빈 학습셋을 만든다.


함하고 있다. 일단 이들 패키지 중에서 중요한 몇 가지 패키지 정 Instances isTrainingSet = new Instances("Rel",
fvWekaAttributes, 10);
도를 <표 1>에 정리해 두었다. // 클래스 인덱스를 설정한다.
외카core 패키지에 중요한 몇가지 클래스들이 있다. 먼저 isTrainingSet.setClassIndex(3);

Instance 클래스는 외카에서 하나의 데이터 레코드를 의미한다.


물론 이전 연재에서 설명한 속성들이 미리 정의되어 있어야 되는 <리스트 2>에서 보면 Rel이라는 이름의 학습셋을 앞서 정의한
데 이 역할을 담당하는 클래스는 Attribute클래스다. 그리고 fvWekaAttributes 인스턴스와 크기(10) 정보를 이용해 생성한
Instance 클래스가 모여서 Instances 클래스를 만들게 되는데 것을 볼수 있다. 그리고 우리는 네번째 속성을 클래스 속성으로
이 Instances 객체가 데이터셋이 된다. 지정한다. 그럼 이제 Instance 객체를 생성해 Instances 객체에
데이터를 채워 넣어 보자.
외카 API 실전 예제
<리스트 3> 학습 데이터 채우기
이번에는 실제 Attribute 객체를 만들고 Instance 객체들을 만
//Inctance 인스턴스 생성
들어 최종적으로 Instances 객체를 생성해 보도록 하겠다.
Instance iExample = new Instance(4);
Attribute객체를 만들기 위해서 FastVector라는 외카 내부 데이 iExample.setValue((Attribute)fvWekaAttributes.elementAt(0)
터 구조를 사용하는데, 이 클래스는 퍼포먼스를 이유로 java.util. , 1.0);
iExample.setValue((Attribute)fvWekaAttributes.elementAt(1)
Vector를 대체하기 위해 외카 내부에서 구현한 데이터 구조다. , 0.5);
iExample.setValue((Attribute)fvWekaAttributes.elementAt(2)
<리스트 1> Attribute와 FastVector를 이용한 데이터셋 속성 정의 , "gray");
iExample.setValue((Attribute)fvWekaAttributes.elementAt(3)
// 숫자형 속성 정의 , "positive");
Attribute Attribute1 = new Attribute(""firstNumeric"");
Attribute Attribute2 = new Attribute(""secondNumeric""); //Instance 인스턴스 추가
isTrainingSet.add(iExample);
// 명목형 속성 정의
FastVector fvNominalVal = new FastVector(3);
fvNominalVal.addElement(""blue""); 하나의 Instance 인스턴스는 대부분의 경우 각 속성값을 할당
fvNominalVal.addElement(""gray"");
fvNominalVal.addElement(""black""); 해야 한다. 따라서 각 속성에 맞게끔 Attribute를 참조해 값을 할
Attribute Attribute3 = new Attribute(""aNominal"", 당한다. 그렇게 Instance 인스턴스를 구성하고 이를 Instances
fvNominalVal);
인스턴스에 add()하면 된다. 이와 같은 방식으로 모든 학습 데이
//우리가 예측을 하고자 하는 클래스 속성 정의 터에 대해서 데이터 추가를 하면 학습셋이 완성되게 된다.
FastVector fvClassVal = new FastVector(2);
fvClassVal.addElement(""positive"");
<리스트 4> 모델 빌드
fvClassVal.addElement(""negative"");
Attribute ClassAttribute = new Attribute(""theClass"", //나이브 베이지언 분류기 생성
fvClassVal); Classifier cModel = (Classifier)new NaiveBayes();
cModel.buildClassifier(isTrainingSet);
// 속성 벡터 정의
FastVector fvWekaAttributes = new FastVector(4);
fvWekaAttributes.addElement(Attribute1); <리스트 5> 분류기 테스트
fvWekaAttributes.addElement(Attribute2);
fvWekaAttributes.addElement(Attribute3); //모델 테스트
fvWekaAttributes.addElement(ClassAttribute); Evaluation eTest = new Evaluation(isTrainingSet);
eTest.evaluateModel(cModel, isTestingSet);

속성 정의가 되었으니 Instances 객체를 생성해 실제 데이터 이곳에서 사용한 isTestingSet 은 isTrainingSet을 생성한
를 Instance로 변환해 Instances에 입력해 보도록 하자. 방법과 동일하게 생성된 데이터셋이다.

m a s o 257
스 텝 바 이 스 텝 | 3

<리스트 6> 결과 로그 출력 Usage:

//외카의 Explorer에 출력되는 결과와 같은 로그를 출력해줌 weka.core.Instances help


String strSummary = eTest.toSummaryString(); weka.core.Instances <filename>
System.out.println(strSummary);
weka.core.Instances merge <filename1> <filename2>
//혼동행렬(confusion matrix)을 가져온다. weka.core.Instances append <filename1> <filename2>
double[][] cmMatrix = eTest.confusionMatrix();
weka.core.Instances headers <filename1> <filename2>
weka.core.Instances randomize <seed> <filename>
여기에서 이야기하는 혼동행렬은 판정 오류의 경향을 보기 위
한 목적을 가지고 있는 행렬이다. nij 를 실제 클래스 i에 속한 데 그렇다면 실제 파일을 아래와 같이 커맨드라인에 입력해 보자.
이터를 클래스 j로 분류한 개수를 의미한다고 하자. 그렇게 되면
n11는1번 클래스에 실제 존재하는 데이터를 정확하게 1번 클래 chairservice-lm:weka-3-6-1 heewon$ java weka.core.Instances
스로 분류했다는 것을 의미하게 된다. 이를 혼동행렬로 나타내 data/iris.arff
보면 <표 2>와 같다. Relation Name: iris
Num Instances: 150
1번 클래스(분류 결과) 2번 클래스(분류 결과)
Num Attributes: 5
1번 클래스 (실제) n11 n12
2번 클래스 (실제) n21 n22

<표 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

분류기라고 이야기 할 것이다. 3번 분류기가 각클래스 w1, w2의



중간에 위치하고 두 클래스의 경계를 가장 잘 표현하고 있다는

� 것을 알 수 있다. 한마디로 두 클래스를 분류하는데 여백이 가장
큰 최적의 함수를 만들어 내었다는 것이다. 이런 3번과 같은 분
류 함수를 만들어 내는 알고리즘이 바로 SVM이다. 아쉽게도
SVM은 외카에서 전혀 구현되어 있지 않다. 하지만 wrapper 클
래스가 존재하며, 덕분에 libsvm(http://www.csie.ntu.edu.
tw/~cjlin/libsvm/)을 사용해 외카에서 직접 사용할 수 있다. 먼
저 위 사이트에서 libsvm을 다운 받아 압축을 풀어주면
libsvm.jar 파일을 발견할 수 있을 것이다. 이 파일만 CLASS
W1 W2 PATH에 등록하거나 java -cp 옵션을 이용해 path를 입력해 주
면 된다. 필자는 환경변수에 등록을 했다. 그럼 SVM을 구동하기
<그림 1> 세 가지 분류기 위해 아래의 명령을 실행해 보자.

예를 들어 <그림 1>과 같이 1,2,3번 분류모델이 있다고 했을 java weka.classifiers.functions.LibSVM -K 0 -t data/iris.arff -i


때, 1번 분류기는 오류가 있다는 것을 알 수 있다. 하지만 2,3번
분류기는 둘 다 오류가 0이다. 그렇다면 2,3번 중에서 어떤 분류 -K옵션은 선형 SVM으로 분류기를 만든다는 것을 의미한다.
기가 가장 안전한 분류기라 할 수 있을까? 아마도 여러분은 3번 이 외에도 비선형 SVM을 구동할 수 있는 다양한 옵션이 존재

필자 메모

공짜 점심은 없다 보다 정확하게 분류해 내지 못하는 분류기가 있다고 한다면 우리가


“모든 문제에 대해 최적화, 어떤 해를 찾는 알고리즘 중에 가장 좋은 원하는 모든 글자체에서 가장 높은 정확도를 가지는 이상적인 분류
알고리즘이 존재할 수 있을까?”이 문제에 대해서 지금까지 많은 고 기는 존재하지 않는다는 것이다. 한마디로 다른 점이 상대적으로 우
민들이 있어왔다. 물론 이번 컬럼에서 SVM이 가장 좋은 알고리즘 수하면, 다른 점에서 상대적으로 열등할 수밖에 없다는 이야기다. 이
이라고 언급한 것처럼 보였다면 독자들은 다시 생각을 고쳐먹기 바 게 바로“공짜 점심은 없다”
의 개념이다. 따라서 데이터 마이닝이나
란다. 머신 러닝을 할 때 가장 먼저 해야 할 작업은 우리가 해결하고자 하
SVM은 일반화 능력이 가장 우수한 알고리즘이라는 언급이었고, 이 는 문제에 대한 충분한 이해를 하는 것이다. 아까 예를 든 우편물 분
일반화 능력이 분류기의 성능에 영향을 많이 끼치는 부분 중 하나여 류기는 한번 잘못 분류가 되어 버리면 우편물의 지연이나 오발송이
서 그렇게 언급을 한 것이다. 이것과 관련된 유명한 말이“No free 발생되는 오판시 비용이 큰 판정이다. 그러니까, 거짓 긍정(False
lunch(NFL)”
라는 표현이다. 이 표현은 경제학에서 먼저 나온 개념 Positive, 긍정을 정확한 주소 판정이라고 한다면…)의 비용이 상당
이지만 1995년 Santa Fe 연구소의 David Wolpert와 William 히 큰 경우이다. 따라서 정확히 분류될 확률 값이 높을 경우에만 자
Mecready가 발표한 논문들에서 이것에 대한 답을 하고 있다. 예를 동으로 분류하고 나머지 경우에는 사람이 판정하게끔 하는 것이 더
들어 현재 우리나라에서 사용하고 있는 우편물 분류기의 경우 우편 나은 시스템이 될 것이며, 그렇지 않다면 미리 글자체를 조사해 가장
번호와 주소를 인식해 분류를 하게 되는데, 글쓴이의 글자체에 의해 사용자들이 많이 쓰는 글씨체에 특화된 알고리즘만을 사용하게끔 해
서 상당한 오류가 발생한다. 고딕형으로 또박또박 쓴 글자형이 있는 자동화 시키는 것도 괜찮을 것이다. 한마디로 가장 자동화 효과가 큰
가 하면 어떤 글인지 잘 알 수 없게 갈겨쓴 글자도 있다. 다른 글씨체 부분을 먼저 적용하는 자동화라고 할 수 있을 것이다. 이를 학습 알
에는 크게 높지 못한 정확도를 가지나 고딕형의 글씨체에서 큰 정확 고리즘에도 학습 및 테스트시 차용할 수 있는데, 잘못 판단한 것에
도를 가질 수 있는 분류기가 있고, 다른 모든 글자체에서 그저 괜찮 대한 비용을 테스트시 적용시켜 비용이 추가된 오류가 가장 적은 분
은 정확도(이전 것보다 나은)를 가지나 고딕형의 글씨체를 이전 것 류기를 선택하는 전략을 사용할 수도 있다.

260 m a s o
WEKA API 그리고 커맨드라인 인터페이스

한다. 이렇게 해서 나온 결과를 보면 아래와 같은 정확도를 볼 인을 사용하나 의아심을 가질 수 있지만, 이 커맨드라인을 잘 이


수있다. 용하면 BATCH로 모델 빌드와 모델 업데이트가 가능해 진다.
따라서 검색 시스템에 머신 러닝을 적용하고자 할 때 주기적으로
Correctly Classified Instances / 145 / 96.6667 % 색인 빌드하는 것과 같이 주기적으로 모델 빌드를 백그라운드로
수행하고 자동으로 모델 업데이트를 하게끔 스케줄링이 가능하
지금까지 같은 데이터 셋으로 세 가지 분류기에 돌려본 결과 다. 별다른 자바 코딩 없이 간단한 스크립트로 수행을 할 수 있다
중에서 가장 높은 정확도가 나왔다는 것을 알 수 있다. 물론 분류 는 이야기다.
기의 성능을 좌우하는 것은 분류하고자 하는 도메인의 성격이나 다음 컬럼에서는 오류 쿼리 분류기 모델을 실제 빌드해 보는
속성 선택, 그리고 전처리에 따라 많이 달라지지만 이런 성능에 실전 예제를 살펴볼 예정이다. 애초 아파치 로그에서 로봇 로그
영향을 미치는 조건들을 동일하게 주었을 때 SVM이 가장 좋은 를 분류하는 예제를 구현하고자 했는데 데이터 셋을 구하기 힘든
결과를 보여준다는 것이다. 관계로 급하게 오류 쿼리 분류기로 주제를 바꾼 것에 대해 독자
일반적으로 SVM에 설정할 수 있는 옵션은 그리 많지 않다. 몇 들의 이해를 부탁한다.
몇 비선형 SVM을 표현하기 위한 커널 함수 선택이 아마도 성능
에 가장 영향을 미치는 단하나의 옵션이 아닐까 한다.

참고자료
이번 컬럼에서는 지난 호의 컬럼에서 GUI를 다룬 것과 같은 1. 패턴인식, 오일석 저
데이터와 알고리즘을 이용해 커맨드라인으로 이용하는 방법을 2. http://weka.wiki.sourceforge.net/ 외카 공식 위키
3. Collective Intelligence in action, Manning, 2008
알아봤다. 윈도우 사용자들이나 일반적인 사용자는 왜 커맨드라

1년 후에도 내용이 살아있는 잡지

전망 좋은 창가에서
전망 좋은 창가에 서서
밖을 내다본 적 있으세요?

창 저 너머의 탁 트인 세상을 보노라면


마음 한구석의 시름과 두려움이 사라져
어느새 용기마저 솟아나곤 합니다.

<마소>가 꿈꾸는 역할 또한 그렇습니다.


개발자와 IT 산업을 위한
전망 좋은 창이고자 합니다.

기술 트렌드를 따라가기가 버겁고


반복되는 업무에 지쳐간다면
<마소>의 곁에 조금 더 다가오세요.

마음이 한결 뿌듯해집니다.
도전하는 용기가 생깁니다.
미래가 그려질 것입니다.

m a s o 261

You might also like