Decision Tree(ID3) 소스공개

얼마전에 Decision Tree 레포트를 한다는 포스팅을 한적이 있다.

제출은 한2주전에 이미 한 상태이다.
뭐 어제로 해서 레포트 만료기간도 지났고, 그리고 같이 공부하시는 선배님들의 성원도 있고 해서 소스공개를 한다.

나중을 위해 자세한 레포트 Description을 넣어본다.

제 목 [ 프로그램 과제 ] 제 출 기 간 2005-10-10 ~ 2005-2005-11-25

내 용 ID3를 이용한 Decision Tree 생성 프로그램 과제입니다.

첨가 파일에 training, validation, test data 가 있습니다.
파일 첫줄의 숫자는 <총데이터갯수>, <속성갯수>, <속성값의범위> 입니다.

제출 내용은 다음과 같습니다.
==============================
1. 프로그램 소스
2. 프로그램
( training data 입력 –> tree 생성
validation/test data 입력 –> 정답 file 생성 )
3. validation data 테스트 결과 성능 비교 보고서

( tree 생성은 내부적으로 하시고, 정답 file은 +,- 값이 한줄에 하나씩 표시되는
파일을 생성하면 됩니다. )

제출은 zip 파일로 위 세가지를 묶어서 보내시면 됩니다.

참조파일 : 관련파일참조: 1539_decision tree data.zip
제출형식 : zip, 제출방법 : 개인별로 제출하세요

그리고 실행해 보면

이와같은 화면이 출력이 된다.
트리는 내부적으로 생성을 했고 그저 보여지는건 Progress정도이다.

이 소스에서 신경을 많이 쓴 부분이 Information Gain값을 구하기 위한 로그 계산인데 로그가 0이 되어버리면 안되니까. 로그에 곱하는 수가 0이 될때는 로그0의 계산은 무시해주는 로직에 신경을 좀 썼다.
정상적으로 계산만 했다면 NaN 값이 출력이 된다. (Not a Number)
약간의 코딩 노가다가 필요한 부분이였다.

그 밖에 재귀호출하는 부분은 Attribute List를 넘길때 객체를 복사해서 넘기고 있다. 이건 Decision Tree의 특성에 염두에 둔 코딩인데 잘 생각해보면 같은 레벨에서 나온 Attribute가 노드의 하부에 다시 나오니 인자에 넘겨줄때 List 객체를 복사해서 넘겨주었다. (고민 많이한 부분이다.)

기 포함된 txt 파일중에 trn_dr1_v1.txt 은 트리를 생성하기위한 Training Data이고, trn_dr1_v2.txt는 Validation Set 이다.
그리고 마지막 tst_dr2_v1.txt 파일은 test하기위한 데이터다.

두가지 파일이 생성이 되는데.

test_result.txt, val_analy_result.txt

test_result.txt 파일은 tst_dr1_v1.txt 의 결과 파일이고, val_analy_result.txt 파일은 val_dr1_v1.txt 파일의 validation 결과 파일이다.

그리고 JDK 5.0에 추가된 제네릭이라는걸 써서 실행시 반드시JRE 5.0이상으로 실행해봐야된다.

컴파일하고 실행하는건 뭐 따로 첨부안함

뭐 1년만에 자바로 프로그래밍을 해보니 기분이 남다르다. 5.0으로 되면서 한번도 사용을 안해봤는데 제네릭이란것도 사용해보고 참 재미있게 플밍했다. 느린감은 거의 못느꼈지만 코딩할때 쓸데없는 라인이 너무 많이 들어간다는 느낌을 많이 받았다. 1년전에는 전혀 느끼지 못했는데, 그동안 Python, C 등의 언어를 주로 쓰다보니 확연하게 느껴지더라.

그리고 요즘 블로그 통계를 보면 ID3, Decision Tree 등의 알고리즘 관련 검색어가 상위에 랭크되어 있는데 아마도 레포트 숙제때문인거 같기도 하다. 이글루스 통계기능 아주 재미있다. ㅋㅋㅋ

소스 받아가시는분들 그냥가지 마시고 덧글이라도 달아주는게 예의가 아닌가 하네요??(비공개라두 좋습니다.^^)

이제 기말고사 끝나고 나면 Viterbi 알고리즘 레포트 소스만 올리면 되는군.

XZ6n0hQabz.zip

CC BY-NC 4.0 Decision Tree(ID3) 소스공개 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.