몇 달전에 알파고가 나오면서 머신러닝이 다시 한번 주목 받았다. 머신러닝에 대해 잘 모르지만 또한 이쪽 분야가 아니라.. 간단한 툴로 머신러닝의 기초를 알아보겠다.
아주 쉽게 설치 할 수 있는 툴이 있는데 그 툴은 weka 라는 툴이다. weka 는 데이터 마이닝 프로그램이다. 집에서도 빠르게 할 수 있으니 관심있는 사람은 설치를 해보자.
여기서 다운 받을 수 있고 맥 윈도우 둘다 지원한다.
실행을 시키면 아래와 같은 화면이 나온다.
그리고 데이터를 가져와야 하기 때문에 proprocess 탭에 open URL을 눌러 아래의 링크를 넣는다.
http://condor.depaul.edu/ntomuro/courses/578/assign/hw1files/tic-tac-toe.arff
다들 아시다시피 tic tic toe 게임으로 tic tic toe 게임의 경우의 수가 데이터로 들어있다. 잠깐 데이터를 살펴보자.
주석이 끝나는 바로 아래에 이런 속성들이 있다.
@attribute top-left-square {b,o,x}
@attribute top-middle-square {b,o,x}
@attribute top-right-square {b,o,x}
@attribute middle-left-square {b,o,x}
@attribute middle-middle-square {b,o,x}
@attribute middle-right-square {b,o,x}
@attribute bottom-left-square {b,o,x}
@attribute bottom-middle-square {b,o,x}
@attribute bottom-right-square {b,o,x}
@attribute Class {negative,positive}
위의 데이터의 top-left-square는 top-left에 올 수 있는 데이터를 말한다. 상단 왼쪽에는 빈값과 O 또는 X가 올수 있다는 것을 말한다. 나머지도 다 똑같지만 제일 중요한건 Class라는 놈이다. 이놈은 게임이 승리를 한지 못하지는 판별하는 속성이다. 아직은 이해가 잘 안될 것이다. 좀 더 살펴보자.
그리고 바로 아래의 @data라는 필드가 있는데 그 아래의 데이터를 보자.
@data
x,x,x,x,o,o,x,o,o,positive
x,x,x,x,o,o,o,x,o,positive
x,x,x,x,o,o,o,o,x,positive
x,x,x,x,o,o,o,b,b,positive
x,x,x,x,o,o,b,o,b,positive
x,x,x,x,o,o,b,b,o,positive
...
...
맨 첫 줄을 보면 x,x,x,x,o,o,x,o,o,positive 라는 데이터다. top-left에는 x가 top-middle에도 x가 top-right x가 들어 있는 것이다.
이걸 해석하면 아래와 같다.
x,x,x
x,o,o
x,o,o
이렇게 돠면 x가 승리를 한건데 아까도 말했듯이 제일 중요한 class의 속성이 positive이다. positive는 x가 이긴 것을 말한다.
데이터를 더보자.
...
x,x,o,x,b,o,o,x,o,negative
x,x,o,x,b,o,b,b,o,negative
x,x,o,o,x,o,x,b,o,negative
x,x,o,o,o,x,o,x,b,negative
x,x,o,o,o,x,o,b,x,negative
...
중간 아래에 보면 위와 같은 데이터들도 존재한다. 이걸 보면 x가 진 것을 의미한다.
이제 데이터들의 의미들을 다 알았으니 트래이닝을 시켜보자. 트래이닝 시킨다는 의미가 뭐냐면 우리 컴퓨터는 tic-tac-toe 게임의 룰을 모른다. 그래서 저 데이터를 통해서 이런 상황에는 x가 이긴거고 저런 상황에는 o가 이긴거다를 컴퓨터에게 알려주는 것이다.
아래 화면과 같이 셋팅을 하자.
classify 탭으로 가서 classifier는 J48(decision tree)로 고르고 test options에 percentage split 속성을 90으로 주자. 저 90의 속성의 의미는 전체 데이터에서 90%는 트래이닝을 시키는 것이다. 나머지 10프로는 트래이닝된 데이터를 통해서 컴퓨터가 맞히는 것이다. 다시 말해 10%의 이런 데이터 x,x,o,x,b,o,o,x,o,negative 들 중에 마지막 class 속성인 negative를 지우고 컴퓨터에게 x,x,o,x,b,o,o,x,o 이 데이터가 누가 이긴지 맞히는 그런 테스트를 하는 것이다. 일단 돌려보자. 아니 설명도 어렵네. 밑에 보면 Start라는 버튼이 있다.
버튼을 클릭하면 위와 같은 화면이 나온다. 위의 더 많은 데이터가 있는데 그것은 decision tree 알고리즘을 보여주는 것이라 넘어가고 화면에 보이는 중요한 데이터를 보자
Correctly Classified Instances 82 85.4167 %
Incorrectly Classified Instances 14 14.5833 %
Summary 아래에 보면 위와 같은 데이터가 있다. 전체 데이터가 900건이 조금 넘으니까 90프로는 트래이닝 하는데 쓰고 나머지10프로인 96개를 테스트 했다. 그 중에 85프로는 정확하게 맞혔고 14프로는 틀린 것이다. 그래도 상당한 %로 정답을 맞혔다. 다시말해 컴퓨터는 게임의 룰을 모르지만 데이터만으로 누가 이긴건지 알려주고 그 데이터를 통해 컴퓨터가 맞히는 것이다.
MultilayerPerceptron이라는 뉴럴 네트워크 알고리즘이 있는데 이것은 위의 decision tree 보다 좀더 정확하지만 시간은 좀더 오래 걸린다. 필자의 경우에는 100프로가 나왔다. 한마디로 모두다 맞힌 것이다.
설명을 잘했는지 모르겠는데 설명조차 어렵다. 이 데이터 말고 다른 데이터들도 해볼라고 했는데 너무 덥다.. 더 재밌는 데이터가 있긴한데.. 아무튼 weka라는 툴이 있으니 관심 있으면 한번 사용해봐도 괜찮을 듯 하다. 물론 오픈소스다.
그리고
여기 보면 자바와 자이썬 그루비 예제들도 존재하니 사용할 일이 있으면 참고해서 사용해도 되겠다.