전공관련/기타 etc.

[LibSVM] libsvm을 이용한 2-class classifier (3) - Optimal parameter를 찾고 자동으로 학습하자!

매직블럭 2014. 2. 14. 15:54


지난 두편에서 SVM 의 개념과 exe 파일을 이용한 학습방법을 살펴 보았다.


[LibSVM] libsvm을 이용한 2-class classifier (1) - SVM이란 무엇인가.

[LibSVM] libsvm을 이용한 2-class classifier (2) - Training/Test (exe파일 이용)


이번에는 svm 학습시에 사용되는 파라미터의 최적값을 찾기위한 python script [ grid.py ] 와 [ easy.py] 사용법에 대하여 알아보자


이 방법은 svm의 기본값인 C-SVM 과 RBF 커널 에 대해서 사용가능하고 다른 커널이나 svm 모드에 대하여는 모르겠다! ㅋ


grid.py 스크립트는 최적의 파라미터를 반환해주는 스크립트고 easy.py는 최적의 파라미터를 찾고 트레이닝까지 다 해주는


스크립터이다. 


나는 한번 입력으로 model 까지 만들어 주는 easy.py 을 주로 사용한다.


사용할때 가장 해멘 부분이 실행만 하면 자꾸 exe 파일이 없다는 경고와 함께 실행이 불가능한 부분이었다.


Google 검색 중에 해당 스크립트의 파이선 소스코드를 발견했다.


그중에 문제가 되는 부분이 아래 부분인듯 하다.


  1. is_win32 = (sys.platform == 'win32')
  2. if not is_win32:
  3.         svmscale_exe = "../svm-scale"
  4.         svmtrain_exe = "../svm-train"
  5.         svmpredict_exe = "../svm-predict"
  6.         grid_py = "./grid.py"
  7.         gnuplot_exe = "/usr/bin/gnuplot"
  8. else:
  9.         # example for windows
  10.         svmscale_exe = r"..\windows\svm-scale.exe"
  11.         svmtrain_exe = r"..\windows\svm-train.exe"
  12.         svmpredict_exe = r"..\windows\svm-predict.exe"
  13.         gnuplot_exe = r"c:\tmp\gnuplot\binary\pgnuplot.exe"
  14.         grid_py = r".\grid.py"


내 PC의 OS 는 64bit 를 사용중인지라 exe 파일의 경로가 아래 else 항 대로 설정이 되어야 하는 듯 하다.


python script 를 수정 할 방법이 있다면 경로를 수정하면 좋겠지만 나는 그러한 방법을 모르기에 해당 경로에


파일을 옮겨 주기로 한다.


상위폴더에 windows 폴더를 만들고 svm 파일들 넣어주고.. c에 tmp 이하 경로를 설정하고.. exe 파일을 복사 해준다.


경로 설정을 해주니 실행이 가능하다. 이게 문제였어.. ㅋ 


아무튼 easy.py의 실행 방법은 svm 과 마찬가지로 명령프롬프트 창에서 수행한다.


easy.py 스크립트가 위치한 폴더로 이동후에 


파일경로>easy.py [training_data] [test_data] 


이때 주의할 점은 training data 와 test data 는 scaling 되지 않은 데이터를 넣어 줘야한다는 것이다.


이유는 해당 스크립트에서 먼저 스케일링을 수행하고 5 fold cross validation 을 수행하여 최적의 파라미터를 찾기 때문이다.


뭐 스케일된거 넣으면 그냥 같은 결과가 나오겠지....


아무튼 수행하면 gnuplot으로 트레이닝 양상을 시각화 하여 보여준다.





원래 이렇게 오래 걸리는 건지 모르겠지만 본인의 경우에는 하나의 파일을 트레이닝 하는데 24시간이 넘어 걸렸다.


feature 960 차원 / data_set 10000 개 기준으로 26시간 정도 걸리는거 같다.. 시간을 줄일수 있는 방법 아시는분 알려줘요..


뭐 켜놓고 다른일 하다 퇴근하고 다음날 오면 되있을테니..


아무튼  학습이 끝나면 Best 파라미터와 해당 파라미터를 이용한 Cross Validation 결과를 보여준다.


또한 해당 파라미터로 학습한 모델을 이용하여 같이 입력한 테스트 파일에 대한 테스트 결과도 


이어서 보여주므로 학습 데이터가 아닌 unknown 데이터에 대한 대략적인 인식률도 미리 확인 가능하다.




학습 시에 최적 파라미터를 이용하는것과 기본 파라미터를 이용하는 것은 최종 인식률에서 큰 차이가 나타나므로


grid/easy.py 를 이용하여 반드시 최적 파라미터를 확인하고 학습 하도록 하자.