• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

'SVM'에 해당되는 글 3건

  • 2014.02.14 [LibSVM] libsvm을 이용한 2-class classifier (3) - Optimal parameter를 찾고 자동으로 학습하자! 14
  • 2014.02.13 [LibSVM] libsvm을 이용한 2-class classifier (2) - Training/Test (exe파일 이용) 14
  • 2014.02.12 [LibSVM] libsvm을 이용한 2-class classifier (1) - SVM이란 무엇인가. 5

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

전공관련/기타 etc. 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 를 이용하여 반드시 최적 파라미터를 확인하고 학습 하도록 하자.




저작자표시 비영리 (새창열림)

'전공관련 > 기타 etc.' 카테고리의 다른 글

해시 / MD5 / SHA / 무결성검사 에 관한 정리  (0) 2017.07.18
HOG Feature / Descriptor  (1) 2014.12.10
[LibSVM] libsvm을 이용한 2-class classifier (2) - Training/Test (exe파일 이용)  (14) 2014.02.13
[LibSVM] libsvm을 이용한 2-class classifier (1) - SVM이란 무엇인가.  (5) 2014.02.12
[자료구조] 여러가지 Sorting 기법을 시각/청각적으로 표현  (0) 2014.01.26
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

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

전공관련/기타 etc. 2014. 2. 13. 13:38




지난번 1편에서 SVM 이 무엇인가 그 개념에 대하여 간략하게 살펴 보았다.


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


마지막에 이 SVM 을 잘 구현 해 둔 라이브러리 2종을 소개했는데 그중에서 LibSVM 을 이용하여 


Training 및 Test를 하는 방법에 대하여 다뤄보고자 한다.


가장 먼저 할일은 당연히 libsvm 을 다운로드 하는 것.


해당 사이트에서 zip 형식이나 tar 형식의 파일을 바로 다운로드 받을 수 있다. => libsvm 바로가기


받은 파일의 압축을 풀어보면 windows 폴더 안에 svm-train / svm-predict / svm-scale 등의 파일이 있다.


기본적인 학습에서는 저 세가지 파일을 이용하여 학습을 해 보려 한다.


1. 학습데이터 만들기


먼저 학습을 하기위해서는 svm 에서 요구하는 형태로 학습 데이터를 만들어 줘야 한다.


libsvm 에서 요구하는 학습데이터 형태는 아래와 

 <label> <index1>:<value1> <index2>:<value2> ...


여기서 label 이란 class 번호 이고 index는 0번부터 1씩 차례대로 증가 하면 된다. 

그리고 value에 들어가는 값이 feature 의 값이 된다.


예를들어 아래와 같은 형태의 학습 데이터가 있다고 가정을 하자.


 학습 데이터를 만들때 녹색동그라미를 Class0 / 빨간네모를 Class1 이라고 정하고 feature로는 x좌표,y좌표를 이용하기로 하자


그렇다면 학습에 필요한 데이터 파일의 형태는 다음과 같은 형태가 될 것이다.


0 0:1 1:7

0 0:3 1:6

0 0:2 1:4

0 0:1 1:2

1 0:6 1:3

1 0:7 1:1

1 0:5 1:1


0 1:1 2:7

0 1:3 2:6

0 1:2 2:4

0 1:1 2:2

1 1:6 2:3

1 1:7 2:1

1 1:5 2:1


( 수정 : feature index는 1부터 시작 )


지금은 단순히 x,y 좌표만을 이용 하기에 특징 하나당 feature의 차원이 2차원 밖에 되지 않지만


나중에 다른 특징값을 사용한다면 이 차원은 매우 길어 질 수 있다.



2. svm-train 을 이용하여 학습하기


svm-train을 사용하기 위해서는 시작 - 실행 - cmd 를 입력하여 명령프롬프트에서 수행한다.


라이브러리를 이용하여 프로젝트 내에서 사용하는 방법은 나중에 다시.. 하기로 하고


svm-train 을 사용하는 방법은 svm-train.exe 파일이 위치하는 곳으로 이동 한 뒤 아래의 서식대로 명령어를 입력한다.


파일위치>svm-train.exe [option] [training_data] [model_file]


여기서 training_data 는 방금 위에서 미리 만들어둔 학습 데이터이고 model_file은 학습된 svm 파라미터들이 


저장될 파일 명이다. 파일명을 입력하면 해당 이름으로 파일이 생성되고 별도의 입력이 없다면 training_data.model 로 


자동 생성 된다.


option에는 svm 학습을 위한 여라가지 옵션을 입력 할 수 있는데 사용 가능한 옵션은 아래와 같다.


options:
-s svm_type : set type of SVM (default 0)
	0 -- C-SVC
	1 -- nu-SVC
	2 -- one-class SVM
	3 -- epsilon-SVR
	4 -- nu-SVR
-t kernel_type : set type of kernel function (default 2)
	0 -- linear: u'*v
	1 -- polynomial: (gamma*u'*v + coef0)^degree
	2 -- radial basis function: exp(-gamma*|u-v|^2)
	3 -- sigmoid: tanh(gamma*u'*v + coef0)
-d degree : set degree in kernel function (default 3)
-g gamma : set gamma in kernel function (default 1/num_features)
-r coef0 : set coef0 in kernel function (default 0)
-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
-m cachesize : set cache memory size in MB (default 100)
-e epsilon : set tolerance of termination criterion (default 0.001)
-h shrinking: whether to use the shrinking heuristics, 0 or 1 (default 1)
-b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
-wi weight: set the parameter C of class i to weight*C, for C-SVC (default 1)
학습을 수행하면 다음과 같은 식으로 간략하게 파라미터를 보여주고 상세 데이터는 모델파일로 저장된다.



3. scaling 

학습 하기 전에 사용가능한 기능이다.

학습 하고자 하는 학습데이터의 범위를 사용자가 임의의 범위로 Re-Scaling 해 주는 기능이다.

기본 값은 [-1,1] 로 scaling 하게 된다.

libsvm 웹사이트에서 제공하는 guide 파일에서는 이러한 스케일된 셋을 이용하여 학습하는 방법을 다음과 같이 소개하고 있다.

$ ./svm-scale -l -1 -u 1 -s range1 svmguide1 > svmguide1.scale
$ ./svm-scale -r range1 svmguide1.t > svmguide1.t.scale
$ ./svm-train svmguide1.scale
$ ./svm-predict svmguide1.t.scale svmguide1.scale.model svmguide1.t.predict
-> Accuracy = 96.15%

4. predict


이제 모델 파일도 다 만들었으니 임의의 데이터를 넣고 이를 svm 으로 분류 시켜 보자 


test파일은 train파일과 형태는 똑같이 작성하면 된다.


임의의 데이터를 넣고 어느 클래스인지 찾아주는건 라이브러리를 이용하여 프로젝트 내에서는 사용할 수 있지만


exe 파일을 이용하여 Class 만 리턴 받는 방법은 아직 사용해보질 않아서 잘 모르겠다.


추후 검색하여 추가 하기로 하고 


일단은 test 파일에도 학습파일처럼 클래스를 미리 지정 해두고 이 클래스가 svm 결과와 같나 틀리나를 판별하는 것만 소개하기로 한다.


svm-train과 마찬가지로 해당위치에서 명령 프롬프트를 이용하여


파일경로>svm-predict.exe [test_data] [model_file] [result_file]


위와 같은 방법으로 실행한다. 


실행결과는 다음과 같이 검출률로 표시가 된다.



이상 간단하게 exe 파일을 이용하여 학습 및 검출테스트를 하는 방법을 봤는데 사실 exe 파일은 학습 모델만들때 사용하지


실제 검출할때는 exe 파일로 잘 실행을 안하지 않나.. 싶은 생각이다.( 사실 잘 모르겠다.. )


다음에는 기본 파라미터로 학습하던 일련의 과정을 최적 파라미터를 찾아 자동으로 학습까지 시켜주는 python script 의 사용법에 대하여 알아보기로 하자.




저작자표시 비영리 (새창열림)

'전공관련 > 기타 etc.' 카테고리의 다른 글

해시 / MD5 / SHA / 무결성검사 에 관한 정리  (0) 2017.07.18
HOG Feature / Descriptor  (1) 2014.12.10
[LibSVM] libsvm을 이용한 2-class classifier (3) - Optimal parameter를 찾고 자동으로 학습하자!  (14) 2014.02.14
[LibSVM] libsvm을 이용한 2-class classifier (1) - SVM이란 무엇인가.  (5) 2014.02.12
[자료구조] 여러가지 Sorting 기법을 시각/청각적으로 표현  (0) 2014.01.26
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,

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

전공관련/기타 etc. 2014. 2. 12. 18:10




모든내용은 개인 공부내용 기록용이며 매우 초보적인 내용이며 

처음 개념을 접하는 사람에게 약간의 도움이 될수도 있겠지.. 라는 생각에 기록합니다.

틀린 내용이 많을 수 있습니다.


==================================================================================


자 눈앞에 사진 한장이 있다고 가정을 해보자.


이 사진에 있는것이 사람인가 아닌가


또는 자전거가 있는가 아닌가.


이러한 문제들은 주어진 상황이 A라는 상황인지 아니면 A가 아닌 상황인지 이런식으로 두가지 class로 구분하는


문제이다.


이러한 2-class classifier 중에서 일반화 능력이 가장 좋다고 알려진 것이 바로 SVM 이다.


SVM 은 Support Vector Machine 의 약자로 학습데이터를 두개의 클래스로 나누는 가장 적절한 결정선을 찾아주는 classifier 이다.


이해를 쉽게 하기 위해 2차원에서 먼저 생각을 해보자


학습 샘플이 아래의 그림과 같이 초록색과 빨간색으로 주어 졌다고 가정을 하자.


이때 주어진 학습 샘플에 대해서는 A, B, C, D 모두 올바르게 클래스를 구분하는 결정 직선을 제시하였다.



물론 이렇게 결정직선을 정하고 새로운 자연상태의 데이터가 들어왔을때 저 학습샘플의 범주 내에서만 나타난다면


얼마나 좋겠는가.. 어떤 데이터가 들어오던지 올바르게 분류할 테니까 말이다..


하지만 실제로 우리가 사용하게 되는 환경에서는 데이터가 저런 형태로만 들어오는 것이 아니다.


예를 들어 C의 형태로 클래스 구분을 한다면 녹색 특징들이 모여있는곳에서 약간 오른쪽 아래로 새로운 특징이


들어올 가능성이 매우 다분하다. 


이럴 경우에는 녹색이 속한 클래스와 매우 근접하고 빨간색이 속한 클래스와는 매우 멀리 떨어져 있음에도


결정직선이 초록색 그룹에 가까이 붙어있어서 녹색 클래스의 데이터임에도 빨간색 그룹으로 분류해 버릴 가능성이 더 크다


이러한 문제를 해결하기 위해 트레이닝 데이터를 그냥 나누는 것이 아니라 새로운 데이터에 대비하여 일반화 능력을 


극대화 하는 결정 직선을 찾는것이 SVM 의 역할이다.


위 그림에서 보면 D 의 결정직선이 육안으로 보기에도 가장 두 클래스를 적절하게 나눠 준다.


클래스 사이의 거리도 적절히 멀기 때문에 새로운 데이터가 들어왔을때 올바르게 분류 할 확률도 가장 높다.


자 그럼 SVM에서 Support Vector 가 무엇을 의미하느냐 하는건 아래의 그림을 보면 알수 있다.



Support Vector 란 말 그대로 도움을 주는 벡터들 이다.


이 벡터들은 어떻게 결정되는고 하니 일단 클래스를 나누는 결정직선이 선택 되면 


그 직선에서 제일 가까운 벡터들이 Support Vector 가 되는것이다.


이때 A Class 의 Support Vector 와 B Class 의 Support Vector 사이의 거리를 margin(여백) 이라 하는데


SVM 의 역할을 다시 말하자면 이 Margin을 최대로 하는 결정직선을 찾는것이다.


이 결정직선을 찾는 과정은 수학적으로 풀어 나가려면 조건부 최적화니 KKT니 Wolf duel 이니 뭐 복잡하다.


수식은 나중에 필요하면 찾아보도록 하고.. 


일단 SVM 이 이런 개념이라는 것만 알고 넘어가도록 하자.


그리고 하나 추가로 알아야 할 개념이 Kernel 에 대한 개념이다.


위에서 예시로 보인대로 하나의 직선으로 두개의 클래스가 딱 나뉘면 얼마나 좋겠냐마는 일반적으로


그런 경우보다는 하나의 직선으로 나뉘지 않는 경우가 더 욱 많이 존재한다.


예를들어 아래와 같은 형태로 데이터가 들어왔다고 가정을 해보자.

이런 형태의 데이터는 하나의 직선으로 빨간네모 집합과 초록 동그라미 집합으로 나눌수가 없다.


이럴 경우 한번에 두개의 집합으로 나누는 방법은 크게 두가지가 있는데 이는 KAIST 김창익 교수님이 


강의때 예시로 설명하신 방법으로 처음 개념을 이해하기에 매우 좋은 방법인 듯 하여 이곳에 설명한다.


첫번째 방법은 아래 그림처럼 곡선 형태의 결정선을 구하여 가운데 집합을 잘라내는 방법이다.


다른 하나의 방법은 직선으로 주어져 있던 입력샘플의 공간을 아래처럼 휘어진 공간으로 변형시키고


이전에 사용하던 직선으로 잘라내는 방법이다.



잘라내는 곡선형태의 칼을 만들기는 간단하지 않은 방법이지만 데이터 공간의 차원을 변화시키는 일은 상대적으로


쉽게 해결 할 수 있다고 한다.


이렇게 샘플의 차원을 바꿔주는 역할을 하는것이 Kernel 이라고 한다.


이러한 Kernel 을 이용하여 차원을 변경하면 아래 예시처럼 쉽게 나누기 어렵던 문제도 간단하게 나눌수 있게 변형된다는


장점이 있다.




뭐 이런 개념이라는것만 알아두고 우리가 SVM을 직접 구현 하기는 매우 어렵고 


이미 개발되어 라이브러리로 제공되는 유용한 SVM이 대표적으로 두가지가 있다.


하나는 SVM Light ( http://svmlight.joachims.org/ )이고


다른 하나는 다음 포스팅에서 사용할 LibSVM( http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) 이다.


둘다 간단한 조작으로 사용 가능하게 구현 되어 있고 설명문도 같이 있어서 기본적인 사용은 크게 어렵지 않다.





저작자표시 비영리 (새창열림)

'전공관련 > 기타 etc.' 카테고리의 다른 글

해시 / MD5 / SHA / 무결성검사 에 관한 정리  (0) 2017.07.18
HOG Feature / Descriptor  (1) 2014.12.10
[LibSVM] libsvm을 이용한 2-class classifier (3) - Optimal parameter를 찾고 자동으로 학습하자!  (14) 2014.02.14
[LibSVM] libsvm을 이용한 2-class classifier (2) - Training/Test (exe파일 이용)  (14) 2014.02.13
[자료구조] 여러가지 Sorting 기법을 시각/청각적으로 표현  (0) 2014.01.26
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

,
  • «
  • 1
  • »

카테고리

  • 살다보니.. (448)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (147)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (58)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (8)
    • 전공관련 (80)
      • Algorithm (6)
      • Deep Learning (54)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (8)
    • Computer (118)
      • Utility (21)
      • Windows (31)
      • Mac (4)
      • Ubuntu, Linux (58)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • 에누리닷컴
  • 칼로리 대폭발
  • CStdioFile
  • DSLR
  • 일본
  • function
  • 매트랩
  • 포르투갈
  • SVM
  • utility
  • Deep Learning
  • ReadString
  • DeepLearning
  • 스마트체험단
  • 딥러닝
  • Convolutional Neural Networks
  • 크롬
  • Computer Tip
  • matlab
  • matlab function
  • portugal
  • review
  • 갤럭시노트3
  • 오봉자싸롱
  • 매트랩 함수
  • 큐슈
  • ColorMeRad
  • random variable
  • LIBSVM
  • 후쿠오카

달력

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
05-18 11:31

LATEST FROM OUR BLOG

RSS 구독하기

BLOG VISITORS

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바