[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 검색 중에 해당 스크립트의 파이선 소스코드를 발견했다.
그중에 문제가 되는 부분이 아래 부분인듯 하다.
- is_win32 = (sys.platform == 'win32')
- if not is_win32:
- svmscale_exe = "../svm-scale"
- svmtrain_exe = "../svm-train"
- svmpredict_exe = "../svm-predict"
- grid_py = "./grid.py"
- gnuplot_exe = "/usr/bin/gnuplot"
- else:
- # example for windows
- svmscale_exe = r"..\windows\svm-scale.exe"
- svmtrain_exe = r"..\windows\svm-train.exe"
- svmpredict_exe = r"..\windows\svm-predict.exe"
- gnuplot_exe = r"c:\tmp\gnuplot\binary\pgnuplot.exe"
- 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 (3) - Optimal parameter를 찾고 자동으로 학습하자! (14) | 2014.02.14 |
[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으로 predict를 시킬 때 exe 파일로 한 거와 easy.py를 실행한 후 나오는 accuracy 가 크게 차이가 나서 혹시 어떤 이유에서 많이 나는지 알고 계신지 여쭤보려고 댓글을 쓰게 되었습니다.
만약 다르게 나오는 것이 맞다면 어느 부분에 신뢰성을 더 두어야 하는지 그것도 알고 싶습니다.
혹시 wjddms7392@naver.com 이쪽으로 답변을 해주실 수 있으시면 이쪽으로 답변을 해주시면 정말 감사드리겠습니다.
메일 드렸습니다.
안녕하세요. 배터리의 잔존 수명 혹은 용량을 예측하는 연구를 하려고 합니다. SVM을 사용할때 클래스를 2개 이상 나눠야 한다고 나오더라구요 그런데 예측하고자 하는 데이터가 진행된 싸이클숫자에 대한 용량 즉, 곡선형태인데 클래스를 어떻게 나눠야 하는건가요? 홀수번 데이터는 0 짝수번 데이터는 1 이런식으로 클래스를 나누면 모든 데이터를 지나가는 벡터를 그릴 수 있는건가요?
그리고 predict를 통해 얻어진 데이터를 그래프화 시키는 것이 가능한가요? 윈도우에서 .predit 데이터를 text로 읽어들이면 0과 1로만 이루어진 데이터가 나옵니다. 그런데 클래스를 나눌때 사용되어진 벡터를 어떻게 그릴 수 있는지 궁금합니다. 클래스를 나눌때 만들어진 곡선이 있을텐데 말이죠.
세번째는, 트래이닝 데이터와 테스트 데이터의 차이점을 알고싶습니다. 트래이닝 데이터를 통해 학습되어진 SVM을 통해 테스트 데이터를 테스트 해 보는건가요?? 그렇다면 트래이닝 데이터와 테스트 데이터의 차이를 모르겠습니다. 제상황으로 놓고 볼때는 동일 조건으로 만들어지 배터리의 용량 데이터를 테스트 데이터로 사용하면 되는건가요? 아니면 트래이닝 데이터 다른 데이터들을 더 집어넣어서 정확도를 높이는게 더 좋은건가요? 그리고 트래이닝 데이터를 그대로 테스트 데이터로 사용하여도 되는지 궁금합니다. SVM을 처음 접해보는데 하면 할 수록 어렵내요 ㅠㅠ 두서 없이 물어봤는데 답변 주시면 정말 감사하겠습니다.
제가 맞게 이해 한건진 모르겠지만 일단 진행하시는 연구에 대해서는 classification 문제가 아닌 regression 문제로 푸셔야 한 것 아닌가 하는 생각이 드네요. 두번째 질문에 대해서는 libsvm에서는 prediction 된 class 결과가 아닌 score를 출력하는 방법이 있는 것으로 알고 있습니다. 이에 대해서는 libsvm 사이트에서 찾아 보시는게 가장 빠를 것 같습니다. ( https://www.csie.ntu.edu.tw/~cjlin/libsvm/ ).
마지막 질문에 대한 답변은 테스트 데이터는 말 그대로 학습 된 모델의 성능을 평가하기 위한 테스트 데이터 셋입니다. 데이터 자체에 차이가 있는 것은 아닙니다. 수집된 데이터 중에서 1/10을 테스트 데이터로 사용 하는 방법이나 일반적으로 흔히 사용하는 n-fold cross validation 방법을 사용하여 성능을 평가 할 수 있습니다. 트레이닝 데이터를 그대로 테스트셋으로 사용할 경우는 이미 답안지를 보고 공부를 한것과 같은 것이기에 테스트 성능은 잘 나오지만 그것이 학습되지 않은 unknown 정보에 대해서도 동일한 성능을 보인다고 기대할 수 없습니다. 즉, training/test dataset은 완벽히 분리 해 주시고 테스트셋을 학습에 절대 사용하시면 안됩니다.
쥔장님 블로그 글 덕분에 svm의 실전 사용법까지 익히게 되었습니다.프로그래밍자체에 문외한이라 cmd에서 27피쳐,1800개 데이터를 가진 주가정보를 가지고 두부류로 구분하고 있는데 (30개선택,1770개 탈락)ㅡsvm홈피에서 피쳐가 구분자보다 훨씬 많은경우 선형분석을 하는것이 낫다고 하여 밤새가며 수동으로 돌렸는데 테스트셋에서 거의 안맞더군요.근데 파이썬에서 자동으로 찾는 법이 있다니 너무 반가운 나머지 댓글을 남깁니다.혹 파이썬의 소스코드정보와 사용법을 알려주실 수 없는지요?
수개월간 정말 어렵게 이까지 왔는데 ㅠ힘드네요
감사합니다.즐건 주말 되세요
자동으로 옵티멀 파라미터 찾고 학습까지 수행하는 스크립터가 easy.py 입니다. SVM 설치하시면 기본으로 포함되어있고 얘는 내부적으로 grid.py 파일을호출하여 사용합니다.
먼저 easy.py 파일의 아래부분에 경로를 맞게 설정 해 주시고
is_win32 = (sys.platform == 'win32')
if not is_win32:
svmscale_exe = "..\windows\svm-scale.exe"
svmtrain_exe = "..\windows\svm-train.exe"
svmpredict_exe = "..\windows\svm-predict.exe"
gnuplot_exe = "c:\Program Files (x86)\gnuplot\bin\pgnuplot"
grid_py = ".\grid.py"
else:
# example for windows
svmscale_exe = r"..\windows\svm-scale.exe"
svmtrain_exe = r"..\windows\svm-train.exe"
svmpredict_exe = r"..\windows\svm-predict.exe"
gnuplot_exe = r"C:\Program Files (x86)\gnuplot\bin\gnuplot.exe"
grid_py = r".\grid.py"
그다음 grid.py파일에서
self.c_begin, self.c_end, self.c_step = -1, 5, 2
self.g_begin, self.g_end, self.g_step = -5, -9, -2
이 부분을 수정하셔서 검사 범위를 제한하시는게 좋을것 같습니다.
검사 범위는 옵션이지만 전체를 다 탐색 할경우 시간이 너무 오래걸려서 저는 범위를 줄여서 사용하고 있습니다. 정확히 기억은 안나지만 아마 저 파라미터가 제가 줄여서 사용했던 수정된 파라미터 일 겁니다.
이 두군데만 수정하시고
파일경로>easy.py [training_data] [test_data]
이와같이 실행하시면 알아서 파라미터 찾고 학습까지 진행 해 줍니다.
친절한 설명 너무감사드립니다.말씀한신대로 해보니 그래프 그리는 프로그램을 안깔았는데 파일없다고 해서 파이썬 깔고 소스부분의 gnuplot 부분을 다 삭제하고 진행했습니다.다행히 데이터가 작아서 그런지 결과가 빨리 나오더군요. 근데 테스트셋의 결과가 백개의 데이터중 10개만 구분하는건데 정작구분해야될 데이터는 모두 분류를 못하네요. 다른 좋은 방법이 없을까요?감사합니다.
윗 댓글로 짐작컨데 리니어 커널 사용중이시지 않을까 합니다. 가장 쉽게 바꿔볼수 있는게 RBF 커널로 바꿔서 사용해 보심이 어떠할까 합니다. 기본적으로 RBF커널이 기본값이고 이녀석은 비선형 커널이라 다른 성능을 낼 수도 있지 않을까 합니다.
(참고)
-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)
본문에 기술하신것 처럼 easy py 로 자동최적화 결과를 만들고 난 값이라...기본 c svm 에 rbf 커널아닌가요? 리니어커널은 수동으로 할때 지정해 봤었구요.지금은 easy py로 하고 있는데도 테스트셋 결과가 안좋네요.혹 grid py 에서 커널 옵션변경이 되나요?감사합니다.
easy.py 파일에
cmd = '{0} -c {1} -g {2} "{3}" "{4}"'.format(svmtrain_exe,c,g,scaled_file,model_file)
해당 구문 수정하시면 옵션 모두 사용 가능하십니다.
이런저런 시도 해 보셔도 성능이 정 안좋다면 데이터 자체가 svm으로 classification 이 안되는 형태의 데이터인지도 점검이 필요할 듯 합니다.
cmd 라인을 보니 svm종류 c값 감마값 훈련셋 훈련모델인데 커널은 임의로 삽입하니 -t {0} 작동에 변함이 없네요ㅠ 어찌 수정해야 될까요?번거롭게 해드려 죄송함다.홈피에보니 liblinear 도 있던데 요런것도 easy py 가 되려나요?정 두클래스로 구분이 안된다면 확률분석을 해도 괜찮을듯 한데....회귀로 풀면 될런지...감사합니다.
비밀댓글입니다
안녕하세요, 이번에 SVM을 이용해서 차종분류 하는 프로젝트를 맡게되어 SVM을 공부하다가 들르게 되었습니다. 좋은 설명 감사합니다. 이해하는데 많은 도움이 되었습니다.
[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:70 0:3 1:60 0:2 1:40 0:1 1:21 0:6 1:31 0:7 1:11 0:5 1:10 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 학습을 위한 여라가지 옵션을 입력 할 수 있는데 사용 가능한 옵션은 아래와 같다.
이제 모델 파일도 다 만들었으니 임의의 데이터를 넣고 이를 svm 으로 분류 시켜 보자
test파일은 train파일과 형태는 똑같이 작성하면 된다.
임의의 데이터를 넣고 어느 클래스인지 찾아주는건 라이브러리를 이용하여 프로젝트 내에서는 사용할 수 있지만
exe 파일을 이용하여 Class 만 리턴 받는 방법은 아직 사용해보질 않아서 잘 모르겠다.
추후 검색하여 추가 하기로 하고
일단은 test 파일에도 학습파일처럼 클래스를 미리 지정 해두고 이 클래스가 svm 결과와 같나 틀리나를 판별하는 것만 소개하기로 한다.
svm-train과 마찬가지로 해당위치에서 명령 프롬프트를 이용하여
파일경로>svm-predict.exe [test_data] [model_file] [result_file]
위와 같은 방법으로 실행한다.
실행결과는 다음과 같이 검출률로 표시가 된다.
이상 간단하게 exe 파일을 이용하여 학습 및 검출테스트를 하는 방법을 봤는데 사실 exe 파일은 학습 모델만들때 사용하지
실제 검출할때는 exe 파일로 잘 실행을 안하지 않나.. 싶은 생각이다.( 사실 잘 모르겠다.. )
다음에는 기본 파라미터로 학습하던 일련의 과정을 최적 파라미터를 찾아 자동으로 학습까지 시켜주는 python script 의 사용법에 대하여 알아보기로 하자.
'전공관련 > 기타 etc.' 카테고리의 다른 글
매직블럭
작은 지식들 그리고 기억 한조각
댓글을 달아 주세요
안녕하세요"" 또 질문드리게 되네요ㅠ
저는 SVM을 사용해서 보행자를 검출해보고자 합니다.
svm을 공부하면서 여러 블러그들을 참조하며 공부하고있는데... 아직 프로그램이 많이 미숙해서.. 포스팅 된 것만으로는 많은 어려움이 있어 질문드립니다ㅠ
일단 매직블럭님의 블로그를 보고 LibSVM을 다운받고 dataset에있는 a1a의 test파일과 train파일을 다운받아서 *.model을 생성하고, *.out파일을 생성하였습니다.
여기서 궁금한게 학습데이터를 <label> <index1>:<value1> <index2>:<value2> ...이런 포맷으로 만들어 줘야 한다고 하셨는데... 어떤식으로 이렇게 만들어야 하는지 감이 안잡힙니다ㅠㅠ
haarcacade training을 했었을때 positive와 negative로 영상에서 사람과 사람이 없는 장면을 사용했었는데... 그것과 비슷한지.. 그리고 training data file과 testing data file은 같은 포맷이라고 되있었는데.. 둘의 차이는 어떤건지 궁금합니다ㅠ
마지막으로 svm_predict.exe로 생성되는 *.out 파일을 이용해서 어떻게 사람을 검출할 수 있는지 궁금합니다.
두서 없이 질문드려 죄송합니다ㅠ
오늘도 많이 배워갑니다"
확인이 좀 늦었네요. OpenCV 카페에도 비슷한 글 올려두신거 같던데..
일단 하고자 하시는 프로젝트와 동일한 내용이 포스팅된 곳이 있어 알려드립니다.
http://blog.secmem.org/267 아마 여기저기 찾아보셨으면 여기도 보셨을거 같긴 하네요.
저도 아직 배우는 입장이라 답변이 정답이 아닐수도 있으니 참고만 하시고 혹 틀린부분 있다면 저도 좀 알려주세요.
학습데이터 관련한 질문을 하셨는데요.
위에 본문을 다시 보시면 데이터가 일곱개가 있지요. 물론 학습을 위한 정보기 때문에 각
데이터가 속한 클래스 정보도 알고 있습니다.
위의 데이터는 x-y 좌표상에 위치한 값이기 떄문에 feature는 2차원의 (x,y) 가 되는 겁니다.
본문에서 언급한듯이 클래스번호 feature번호:feature feature번호:feature.... 순으로 기록하면 됩니다.
HOG를 예로 들어 설명드리면 저같은 경우는 960 차원의 HOG Feature를 사용했었습니다. 이를 이용하면
0번 클래스에 해당하는 학습샘플 ( 예를들어 사람영상의 HOG Feature ) 은
0 0:xxx 1:xxx 2:xxx ......... 959:xxx
0 0:yyy 1:yyy 2:yyy ......... 959:yyy
이런식으로 학습샘플의 개수만큼 만들어주시면됩니다.
반대로 1번클래스에 해당하는 학습샘플 ( 예를들어 사람이 포함되지않은 영상 ) 의 경우라면
맨앞에 클래스 번호만 1로 바뀌고 뒤에는 똑같이 960 차원의 HOG Feature 가 나열되어 있겠지요.
학습파일과 테스트 파일의 역할을 궁금해 하셨는데 얘들이 하는일은 말그대로
학습파일은 얘를 이용해서 SVM 이 데이터를 분류하는 결정직선을 계산하게 되고요
테스트파일은 학습파일을 이용하여 모델을 만든 뒤 이 테스트파일에 쓰여진 데이터들을
분류 해 보는 겁니다. 그러면 이 결정직선이 어느정도의 결과를 낼 수 있는지 알 수 있겠죠.
마지막으로 predict.exe 파일을 이용하여 분류를 해 보시면 생성되는 파일중에 *.predict 파일이
분류 한 결과입니다.
이진분류 하신거라면 *.predict 파일안에
0
0
0
1
1
0
1
이런식으로 테스트파일에 주어진 샘플들을 분류한 결과가 쓰여져 있습니다.
ps 사람을 검출하려면 학습에 사용한 영상샘플과 동일한 사이즈로 roi를 잡고 그영역의 HOG 값을 구하시고
SVM으로 검사하여 확인합니다. sliding window search 방법 찾아보시면 보다 자세한 내용 알 수 있으실테고.
다양한 크기의 사람 검사하려면 pyramid search 방법을 이용하시면 여러 스케일에 대한 오브젝트 검출을 할 수 있습니다.
아.. 저도 늦게 확인했네요ㅎㅎ; 답변 감사합니다"" 이제 어떤 방법으로 SVM training data를 만들어야 할지 감이 잡히는 것 같습니다" ㅎㅎ 즐거운하루되세요^^"
안녕하세요 ^_^~
좋은 자료 감사합니다. 많은 참고가 되었네요.
몇가지 궁금한게 있어서 질문드려요~
혹시 Negative sample들의 이미지 사이즈를 Positive에 맞춰야 하나요??
0(사람의 HOG Feature)과 1번(사람이 아닌 HOG Feature)의 차원을 같게 하셔서
두개의 차원의 크기를 같게 하려면 이미지 사이즈도 같게 해야 되나 궁금해서요 ^^;
질문드립니다~ 위 자료만으로도 많이 배워갑니다 감사합니다 ^^
우선 SVM 학습하려면 학습샘플의 차원은 같아야 한다는거 다시한번 생각하면서 답변 드리겠습니다.
다른 사이즈의 영상을 사용한다면 HOG Feature를 뽑을떄 셀 블럭 나누는 파라미터를 다르게 사용해야겠죠. 뭐 그렇게하면 feature의 차원은 맞출수는 있겠네요.
근데 굳이 특징추출 연산을 다르게 하면서 여러 크기의 영상을 사용하는것보다 영상사이즈를 맞추고 한번에 뽑는게 더 편하니까 이렇게 사용했습니다.
아마.. 다른분들도 학습할때는 샘플 크기를 동일하게 사용하지 않을까요??
틀린부분 있다면 지적 감사합니다.
안녕하세요 정말 많은 도움이 되었습니다. 질문이 하나 있는데요 Training할때 #iter nu obj rho nsv nbsv 이게 무엇을 의미하는건지 알수 있을까요?
말씀하신 부분이 어디에서 나오는지 잘 모르겠습니다.
어느부분에서 발생한 메세지인지 알려주시면 확인하는데 도움이 될 것 같습니다.
댓글 작성후 조금 찾아본 내용을 말씀 드리겠습니다.
학습과정에서 svm이 optimal 한 파라미터들을 찾는데 이떄 찾아진 파라미터들을 의미하는군요 붙여 써있어서 하나의 문장인줄 알았습니다.
각 파라미터들의 의미는 아래와 같습니다.
#iter 반복횟수
nu 어느정도까지 outlier를 허용할 것인가 상한선을 결정하는 파라미터
obj 최적의 목표값
rho 라그랑지안 파라미터를 생성하는데 관여 / decision function 에서 -b 값
nSV support vector 의 개수
nBSV bounded support vector 의 개수
학습 데이터를 어떻게 생성시키는지 모르겠내요 ㅠㅠ
cmd 창에
c:\libsvm\windows\svm-train.exe train.txt model.txt
입렸했더니 can't open input file train.txt
라고 나오내요
혹시 train파일 만드는 형식이 있나요??
텍스트 파일 내부에
1 1:1 2:2.3505
1 1:2 2:4.5596
1 1:3 2:1.2447
1 1:4 2:1.1595
1 1:5 2:1.1093
1 1:6 2:1.0750
1 1:7 2:1.0497
1 1:8 2:1.0320
1 1:9 2:1.0175
1 1:10 2:1.0053
1 1:11 2:0.9950
1 1:12 2:0.9868
1 1:13 2:0.9792
1 1:14 2:0.9730
1 1:15 2:0.9666
1 1:16 2:0.9622
1 1:17 2:0.9583
1 1:18 2:0.9895
1 1:19 2:0.9502
1 1:20 2:0.9469
1 1:21 2:0.9435
1 1:22 2:0.9388
1 1:23 2:0.9347
1 1:24 2:0.9314
1 1:25 2:0.9279
1 1:26 2:0.9240
1 1:27 2:0.9206
1 1:28 2:0.9174
1 1:29 2:0.9159
1 1:30 2:0.9105
1 1:31 2:0.9016
1 1:32 2:0.9006
1 1:33 2:0.8982
1 1:34 2:0.8890
1 1:35 2:0.8830
1 1:36 2:0.8770
1 1:37 2:0.8847
1 1:38 2:0.8773
1 1:39 2:0.8873
1 1:40 2:0.8843
1 1:41 2:0.8812
1 1:42 2:0.8777
1 1:43 2:0.8745
1 1:44 2:0.8717
1 1:45 2:0.8683
1 1:46 2:0.8653
1 1:47 2:0.8624
1 1:48 2:0.8599
1 1:49 2:0.8570
1 1:50 2:0.8540
이런식으로 저장했습니다. libsvm에 들어가서 데이터 셋에 있는것도 복사해서 붙여넣어 봤지만 안되내유 ㅠㅠㅠ 학습데이터 생성방법이나 입력방법 좀 알려주실 수 있나요??
음 정확한 원인은 모르겠지만 일단 exe 파일과 txt 파일이 같은 위치에 있는건 맞겠죠? 아니면 음... 클래서가 0번/1번 클래스 둘다 포함되어 있는것.. 정도 일단 확인 해 볼 수 있겠네요..
데이터가 11행 299열이 20개 있습니다. 수작업으로 하기는 너무 힘든데 텍스트에서 자동으로 이러한 꼴로 만드는 방법좀 알 수 있을까요..?
데이터 양이 그리 많지는 않은 편이네요. 어떤 프로그래밍 언어를 쓰시는지는 모르겠지만 기본적인 파일IO 정도만 가지고도 저런 형태로 변환이 가능하지요.
matlab에서 wav파일의 LPC계수를 뽑아서 그것을 입력으로 돌려 SVM을 실행시키려고 하는데요.
매트랩에서 위의 txt형태로 c언어를 이용해서 바꿨습니다
0 1:1.000000 2:-0.566009 3:0.044681 4:-0.282392 5:-0.071596 6:-0.206774 7:0.060296 8:-0.100204 9:0.024253 10:0.108403 11:0.006846
0 1:1.000000 2:-0.267831 3:0.056245 4:-0.220105 5:-0.209564 6:-0.276546 7:0.011686 8:-0.154432 9:-0.025671 10:0.023684 11:0.116661
0 1:1.000000 2:-0.570705 3:0.019666 4:-0.256371 5:-0.018352 6:-0.200313 7:-0.051937 8:-0.181635 9:0.088916 10:0.100087 11:0.095536
0 1:1.000000 2:-1.112849 3:0.647743 4:-0.407957 5:0.108749 6:-0.274505 7:0.145380 8:-0.226752 9:0.230419 10:-0.061000 11:-0.003203
0 1:1.000000 2:-1.319033 3:0.807077 4:-0.635147 5:0.429990 6:-0.307327 7:0.208032 8:-0.198504 9:0.149413 10:-0.004189 11:-0.056351
0 1:1.000000 2:-1.424739 3:0.935632 4:-0.555628 5:0.308612 6:-0.341555 7:0.424553 8:-0.443120 9:0.203700 10:-0.023703 11:0.021791
0 1:1.000000 2:-1.598664 3:1.374310 4:-1.041787 5:0.765558 6:-0.795600 7:0.799433 8:-0.596434 9:0.396790 10:-0.180297 11:0.048604
0 1:1.000000 2:-1.674468 3:1.461379 4:-1.028929 5:0.581200 6:-0.473730 7:0.319680 8:-0.172312 9:0.261528 10:-0.256058 11:0.099761
0 1:1.000000 2:-1.504777 3:1.332157 4:-1.153368 5:0.865181 6:-0.825512 7:0.652441 8:-0.359929 9:0.311340 10:-0.188358 11:0.017789
0 1:1.000000 2:-1.501933 3:1.326177 4:-1.213966 5:0.886535 6:-0.628315 7:0.350610 8:-0.147465 9:0.136230 10:-0.082906 11:0.038999
0 1:1.000000 2:-1.598716 3:1.504504 4:-1.158648 5:0.711089 6:-0.635650 7:0.470179 8:-0.487269 9:0.445781 10:-0.288145 11:0.144399
0 1:1.000000 2:-1.598499 3:1.410249 4:-1.093491 5:0.575373 6:-0.585702 7:0.766169 8:-0.764512 9:0.684465 10:-0.486263 11:0.225968
0 1:1.000000 2:-1.595856 3:1.548274 4:-1.175610 5:0.846617 6:-0.784549 7:0.771600 8:-0.664724 9:0.466967 10:-0.221039 11:0.102305
0 1:1.000000 2:-1.572271 3:1.394770 4:-1.007291 5:0.689958 6:-0.624091 7:0.527004 8:-0.413388 9:0.235031 10:0.052371 11:0.006245
0 1:1.000000 2:-1.554026 3:1.336450 4:-0.999807 5:0.500782 6:-0.316676 7:0.205638 8:-0.334826 9:0.255398 10:0.010800 11:0.016021
0 1:1.000000 2:-1.713812 3:1.684391 4:-1.333424 5:0.655332 6:-0.228754 7:0.119225 8:-0.198867 9:0.188191 10:-0.066617 11:0.065788
0 1:1.000000 2:-1.682527 3:1.553005 4:-1.166559 5:0.712062 6:-0.502660 7:0.284804 8:-0.054053 9:-0.077235 10:0.146055 11:-0.103563
0 1:1.000000 2:-1.345182 3:1.099739 4:-0.704935 5:0.264524 6:-0.235334 7:0.041639 8:0.060587 9:0.084792 10:-0.080084 11:0.072590
0 1:1.000000 2:-1.526710 3:1.513697 4:-1.382496 5:0.955292 6:-0.841032 7:0.714103 8:-0.702895 9:0.585417 10:-0.368168 11:0.215202
0 1:1.000000 2:-0.995697 3:0.429672 4:-0.181692 5:-0.053944 6:-0.184064 7:0.232589 8:-0.106333 9:0.057874 10:-0.123175 11:0.187359
0 1:1.000000 2:-0.884183 3:0.086133 4:0.396634 5:-0.344865 6:-0.105367 7:0.057013 8:-0.128485 9:0.317008 10:-0.289999 11:0.153924
0 1:1.000000 2:-0.811360 3:0.093244 4:0.084902 5:0.005700 6:-0.485292 7:0.448830 8:-0.186294 9:0.028491 10:-0.017834 11:0.193695
0 1:1.000000 2:-0.731705 3:-0.030729 4:0.157060 5:0.020489 6:-0.569095 7:0.348646 8:0.046981 9:-0.145798 10:0.155693 11:0.021110
0 1:1.000000 2:-0.778333 3:0.308281 4:-0.476679 5:0.578919 6:-0.842616 7:0.553048 8:-0.259244 9:0.197899 10:-0.128346 11:0.091744
0 1:1.000000 2:-0.828011 3:0.311784 4:-0.342105 5:0.664761 6:-0.970018 7:0.439452 8:-0.029082 9:0.053174 10:-0.166231 11:0.110145
0 1:1.000000 2:-0.989823 3:0.455218 4:-0.698234 5:0.871771 6:-0.838257 7:0.464498 8:-0.131328 9:0.200325 10:-0.198369 11:0.142030
0 1:1.000000 2:-0.912421 3:0.498757 4:-0.480929 5:0.295921 6:-0.349213 7:0.081160 8:-0.006927 9:0.111950 10:0.095214 11:-0.037761
0 1:1.000000 2:-1.147937 3:0.752950 4:-0.762156 5:0.492818 6:-0.389308 7:0.191535 8:0.065741 9:-0.091885 10:0.152466 11:-0.083688
0 1:1.000000 2:-1.276072 3:0.975773 4:-0.916557 5:0.605934 6:-0.630384 7:0.441753 8:-0.190689 9:0.068855 10:0.165858 11:-0.057879
0 1:1.000000 2:-1.320681 3:0.876613 4:-0.599007 5:0.389354 6:-0.462413 7:0.408080 8:-0.181256 9:0.177013 10:-0.024965 11:-0.055256
0 1:1.000000 2:-1.301253 3:0.897670 4:-0.861476 5:0.728380 6:-0.635196 7:0.627396 8:-0.608839 9:0.431305 10:-0.042650 11:-0.053371
0 1:1.000000 2:-1.278923 3:0.752453 4:-0.556698 5:0.367306 6:-0.259471 7:0.107614 8:-0.098613 9:0.077885 10:-0.036440 11:0.068655
0 1:1.000000 2:-1.504563 3:1.199190 4:-0.733386 5:0.457647 6:-0.582207 7:0.450826 8:-0.245928 9:0.127533 10:-0.029682 11:0.007258
0 1:1.000000 2:-1.422355 3:1.040213 4:-0.587060 5:0.412940 6:-0.612389 7:0.350865 8:-0.130007 9:0.027431 10:-0.048633 11:0.099799
0 1:1.000000 2:-1.433326 3:1.230626 4:-0.964086 5:0.944205 6:-1.031780 7:0.731784 8:-0.590750 9:0.435690 10:-0.332114 11:0.169809
0 1:1.000000 2:-1.383492 3:1.097099 4:-0.788092 5:0.672749 6:-0.899980 7:0.681788 8:-0.599310 9:0.463022 10:-0.325685 11:0.199970
0 1:1.000000 2:-1.520042 3:1.067148 4:-0.568112 5:0.278610 6:-0.495332 7:0.516089 8:-0.518813 9:0.493395 10:-0.150349 11:0.049840
0 1:1.000000 2:-1.450073 3:1.123673 4:-0.864982 5:0.727931 6:-0.812655 7:0.605136 8:-0.430359 9:0.354595 10:-0.159205 11:0.018293
0 1:1.000000 2:-1.251659 3:0.745062 4:-0.268293 5:0.036067 6:-0.094594 7:0.037703 8:-0.015427 9:0.085716 10:0.033723 11:-0.024862
0 1:1.000000 2:-1.458978 3:1.100196 4:-0.701673 5:0.293180 6:-0.291298 7:0.156866 8:-0.022785 9:-0.038550 10:0.133055 11:-0.015653
0 1:1.000000 2:-1.582423 3:1.254120 4:-0.782096 5:0.372599 6:-0.347129 7:0.173914 8:0.034887 9:-0.174454 10:0.278708 11:-0.073764
0 1:1.000000 2:-1.531459 3:1.127172 4:-0.694648 5:0.320957 6:-0.309724 7:0.293458 8:-0.218520 9:0.112202 10:0.066347 11:-0.077226
0 1:1.000000 2:-1.460397 3:1.087583 4:-0.813729 5:0.486426 6:-0.498757 7:0.523907 8:-0.398455 9:0.267231 10:-0.066858 11:0.031344
0 1:1.000000 2:-1.337074 3:1.040626 4:-0.820936 5:0.537792 6:-0.477681 7:0.289778 8:-0.239699 9:0.157385 10:-0.126883 11:0.168112
0 1:1.000000 2:-1.374465 3:1.051143 4:-0.671735 5:0.260368 6:-0.206298 7:0.123319 8:-0.138859 9:0.036528 10:0.073390 11:0.011771
0 1:1.000000 2:-1.579130 3:1.252628 4:-0.672100 5:0.101121 6:-0.143940 7:0.175693 8:-0.087792 9:-0.038649 10:0.101886 11:0.025461
0 1:1.000000 2:-1.475273 3:1.249756 4:-1.000563 5:0.584857 6:-0.364622 7:0.070610 8:0.004415 9:0.028534 10:-0.022809 11:0.112615
0 1:1.000000 2:-1.392334 3:1.288845 4:-1.016722 5:0.480238 6:-0.433050 7:0.271713 8:-0.149060 9:0.013802 10:0.157660 11:-0.037677
0 1:1.000000 2:-1.430536 3:1.114555 4:-0.790752 5:0.426838 6:-0.446698 7:0.426651 8:-0.384980 9:0.157958 10:0.011236 11:0.006525
0 1:1.000000 2:-1.512287 3:1.231308 4:-0.839418 5:0.507780 6:-0.821041 7:0.866834 8:-0.646596 9:0.208763 10:0.084699 11:0.020636
0 1:1.000000 2:-1.341409 3:0.974231 4:-0.802375 5:0.667048 6:-0.769207 7:0.577240 8:-0.452739 9:0.351945 10:-0.217570 11:0.160246
0 1:1.000000 2:-1.315495 3:1.023468 4:-0.717524 5:0.365452 6:-0.262590 7:0.194419 8:-0.198090 9:0.037806 10:-0.075273 11:0.051579
0 1:1.000000 2:-1.711567 3:1.658644 4:-1.369008 5:0.860333 6:-0.449353 7:0.124846 8:0.089790 9:-0.257736 10:0.213515 11:-0.030944
0 1:1.000000 2:-1.599145 3:1.418534 4:-1.069050 5:0.707212 6:-0.627497 7:0.511310 8:-0.403512 9:0.286173 10:-0.105154 11:0.031364
0 1:1.000000 2:-1.649551 3:1.447334 4:-1.255068 5:1.049142 6:-1.067250 7:0.856754 8:-0.485188 9:0.180998 10:-0.035904 11:0.051762
0 1:1.000000 2:-1.448302 3:1.112705 4:-0.855774 5:0.773914 6:-0.841390 7:0.536713 8:-0.499418 9:0.583528 10:-0.406809 11:0.193777
0 1:1.000000 2:-1.405079 3:1.022235 4:-0.760917 5:0.501800 6:-0.606933 7:0.513667 8:-0.428605 9:0.474210 10:-0.350605 11:0.174886
0 1:1.000000 2:-1.146801 3:0.508712 4:-0.083529 5:-0.078437 6:-0.111112 7:0.062037 8:-0.238970 9:0.312136 10:-0.240649 11:0.202545
0 1:1.000000 2:-1.504588 3:0.969846 4:-0.376050 5:0.056040 6:-0.255816 7:0.445438 8:-0.486155 9:0.237573 10:0.024376 11:-0.036343
0 1:1.000000 2:-1.173819 3:0.720729 4:-0.555036 5:0.407574 6:-0.500899 7:0.351330 8:-0.383858 9:0.332768 10:-0.085848 11:0.186842
0 1:1.000000 2:-1.494388 3:1.157565 4:-0.808987 5:0.485254 6:-0.385242 7:0.274351 8:-0.172924 9:0.075009 10:0.187822 11:-0.148017
0 1:1.000000 2:-1.310065 3:1.037646 4:-0.920474 5:0.629188 6:-0.735609 7:0.715438 8:-0.533812 9:0.339456 10:-0.139987 11:0.060198
0 1:1.000000 2:-1.373281 3:1.028379 4:-0.722450 5:0.171017 6:-0.212581 7:0.140225 8:-0.179746 9:0.324199 10:-0.162010 11:0.092690
0 1:1.000000 2:-1.585032 3:1.370447 4:-0.972684 5:0.378637 6:-0.219676 7:0.262086 8:-0.302593 9:0.352280 10:-0.214911 11:0.054525
0 1:1.000000 2:-1.282802 3:0.865344 4:-0.556084 5:0.221028 6:-0.081909 7:0.026639 8:0.009935 9:0.054943 10:-0.109257 11:0.010594
0 1:1.000000 2:-1.434077 3:1.012476 4:-0.575858 5:0.226474 6:-0.363240 7:0.505864 8:-0.430040 9:0.070517 10:0.104347 11:-0.031661
0 1:1.000000 2:-1.355318 3:1.000493 4:-0.640668 5:0.265317 6:-0.362788 7:0.337037 8:-0.413767 9:0.457851 10:-0.310078 11:0.179748
0 1:1.000000 2:-1.577007 3:1.429401 4:-0.963234 5:0.341125 6:-0.131249 7:-0.001289 8:-0.073572 9:0.143029 10:-0.165115 11:0.158204
0 1:1.000000 2:-1.616528 3:1.466102 4:-1.121271 5:0.820300 6:-0.846511 7:0.743167 8:-0.649319 9:0.545682 10:-0.322998 11:0.104925
0 1:1.000000 2:-1.335033 3:0.923205 4:-0.627879 5:0.343836 6:-0.488208 7:0.432190 8:-0.232725 9:0.237766 10:-0.125299 11:0.018744
0 1:1.000000 2:-1.462921 3:1.132647 4:-0.754511 5:0.281398 6:-0.121640 7:-0.094809 8:0.181099 9:-0.021627 10:0.019758 11:-0.009793
0 1:1.000000 2:-1.544311 3:1.286708 4:-0.721883 5:0.168929 6:-0.091061 7:-0.002847 8:-0.021277 9:0.042158 10:0.041679 11:0.019871
0 1:1.000000 2:-1.477339 3:1.224758 4:-0.856164 5:0.550745 6:-0.775444 7:0.752558 8:-0.675709 9:0.504043 10:-0.097052 11:0.043469
0 1:1.000000 2:-1.412270 3:1.281054 4:-0.993918 5:0.724362 6:-0.675314 7:0.449740 8:-0.241200 9:0.225792 10:-0.137112 11:0.045198
0 1:1.000000 2:-1.509676 3:1.307777 4:-1.044780 5:0.785854 6:-0.717050 7:0.444214 8:-0.178400 9:0.099878 10:0.000649 11:-0.001044
0 1:1.000000 2:-1.582676 3:1.454747 4:-1.254042 5:0.985906 6:-0.986606 7:0.799912 8:-0.706495 9:0.571519 10:-0.222583 11:0.049118
0 1:1.000000 2:-1.542205 3:1.277643 4:-0.912148 5:0.597808 6:-0.560583 7:0.529518 8:-0.529009 9:0.524762 10:-0.276729 11:0.073371
0 1:1.000000 2:-1.267621 3:0.863022 4:-0.657918 5:0.411409 6:-0.472584 7:0.436313 8:-0.231765 9:0.229263 10:-0.115216 11:-0.077726
0 1:1.000000 2:-1.499712 3:1.340227 4:-1.132180 5:0.741793 6:-0.560874 7:0.540405 8:-0.389040 9:0.162229 10:-0.010018 11:-0.027651
0 1:1.000000 2:-1.461396 3:0.949017 4:-0.549846 5:0.332737 6:-0.316572 7:0.316388 8:-0.220296 9:0.053183 10:0.145531 11:-0.133840
0 1:1.000000 2:-1.538146 3:1.296933 4:-0.982218 5:0.681060 6:-0.597034 7:0.476085 8:-0.302303 9:0.211657 10:-0.090934 11:0.063575
0 1:1.000000 2:-1.427481 3:1.294550 4:-0.958444 5:0.541498 6:-0.555732 7:0.383254 8:-0.299397 9:0.174229 10:-0.150968 11:0.173631
0 1:1.000000 2:-1.373369 3:1.034446 4:-0.838243 5:0.385770 6:-0.392453 7:0.411265 8:-0.312084 9:0.251795 10:0.016685 11:-0.007605
0 1:1.000000 2:-1.458903 3:1.347819 4:-1.132381 5:0.714365 6:-0.568280 7:0.451875 8:-0.498116 9:0.269635 10:-0.025631 11:0.036081
0 1:1.000000 2:-1.476146 3:1.174502 4:-0.870540 5:0.353200 6:-0.269951 7:0.413740 8:-0.633836 9:0.467321 10:-0.349205 11:0.286233
0 1:1.000000 2:-1.483419 3:1.396430 4:-1.182232 5:0.804243 6:-0.778335 7:0.695981 8:-0.599167 9:0.388716 10:-0.299363 11:0.239460
0 1:1.000000 2:-1.416425 3:1.275485 4:-1.035880 5:0.575812 6:-0.536451 7:0.519528 8:-0.555787 9:0.432913 10:-0.204125 11:0.130960
0 1:1.000000 2:-1.517209 3:1.271779 4:-0.842031 5:0.334846 6:-0.184688 7:0.106203 8:-0.280051 9:0.305145 10:-0.185202 11:0.136542
0 1:1.000000 2:-1.609777 3:1.469631 4:-1.283627 5:0.879909 6:-0.817124 7:0.708485 8:-0.535059 9:0.470969 10:-0.301307 11:0.148928
0 1:1.000000 2:-1.607494 3:1.497214 4:-1.296298 5:0.903211 6:-0.654265 7:0.426474 8:-0.076181 9:0.016253 10:-0.087771 11:0.067006
0 1:1.000000 2:-1.640132 3:1.578381 4:-1.390893 5:1.147344 6:-1.134871 7:1.063824 8:-0.919151 9:0.697488 10:-0.402832 11:0.237153
0 1:1.000000 2:-1.558231 3:1.347258 4:-1.106762 5:0.728739 6:-0.562175 7:0.396404 8:-0.235566 9:0.191870 10:0.044933 11:-0.121131
0 1:1.000000 2:-1.643203 3:1.481576 4:-1.316429 5:0.939111 6:-0.891291 7:0.831074 8:-0.630158 9:0.487023 10:-0.164494 11:0.008945
0 1:1.000000 2:-1.481648 3:1.255284 4:-1.076968 5:0.487953 6:-0.321697 7:0.104828 8:0.013231 9:0.089581 10:0.096773 11:-0.033063
0 1:1.000000 2:-1.262165 3:1.214620 4:-0.796425 5:0.517446 6:-0.593547 7:0.389257 8:-0.321576 9:0.162805 10:-0.034876 11:0.090502
0 1:1.000000 2:-0.880917 3:1.218189 4:-0.539470 5:0.685355 6:-0.350482 7:0.159394 8:-0.079027 9:-0.116598 10:0.085294 11:-0.132211
0 1:1.000000 2:-0.543838 3:0.730594 4:0.394149 5:-0.189217 6:0.263714 7:0.138820 8:-0.685334 9:0.470963 10:-0.423899 11:-0.004121
0 1:1.000000 2:-0.442358 3:0.791163 4:0.499376 5:-0.138865 6:0.417243 7:0.262076 8:-0.694762 9:0.516475 10:-0.430265 11:0.015298
0 1:1.000000 2:-0.347537 3:0.797928 4:0.356602 5:0.248563 6:0.231459 7:0.355911 8:-0.301217 9:0.404040 10:-0.230715 11:0.179588
0 1:1.000000 2:-0.095923 3:0.736095 4:0.496155 5:0.260648 6:0.405304 7:0.211217 8:-0.208473 9:0.356546 10:-0.301427 11:0.234840
0 1:1.000000 2:-0.137772 3:0.785255 4:0.445461 5:0.179832 6:0.353691 7:0.126324 8:-0.399512 9:0.194394 10:-0.265178 11:-0.010186
0 1:1.000000 2:-0.169107 3:0.883349 4:0.220948 5:0.439379 6:0.195825 7:0.031766 8:-0.134068 9:-0.005078 10:-0.120222 11:-0.017809
많이 이러한 데이터를 train에 3만5천개, test에 3만5천개를 해서 실행하려고 하는데 정확도가 50프로 미만으로 나와서 train에 있는 데이터 3만5천개를 test에 넣고 돌려봤는데 그래도 여전히 50%대가 나오더라구요. 어디서 잘못된 것인지 알 수 있을까요?
클래스는 0과 1 (남성의 목소리, 여성의 목소리)로 했습니다.
손동작을 인식하여 음성으로 출력해주는 프로젝트를 하고 있는데요..
class가 0부터 10이넘어가는 숫자까지 분류하여 데이터를 저장하고 이를 학습하여 model을 생성했습니다. 이 후 예측할때 test파일을 예측한다고 하면 정확도가 몇퍼센트다 라고만 나오고 이게 몇번째 클래스에 해당되는지는 알수가없는데 이에대해 조언을 구하고 싶습니다...
[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.' 카테고리의 다른 글
매직블럭
작은 지식들 그리고 기억 한조각
댓글을 달아 주세요
안녕하세요..
SVM을 막 공부하기 시작한 학생입니다
SVM을 이용하여 보행자를 검출해보려고 하는데 정리하신글을 읽어보고 궁금한게 생겨서 질문드립니다
개발되어 라이브러리로 제공되는 SVM이 SVM Light와 LibSVM이 있는데 이 두 라이브러리가
openCV로 구성되어져 있는지 궁금합니다
만일 아니라며, 학습을 시킨후 생성되는 파일을 사용해서 SVM에서 detection할수 있는 tool을 제공하는지도 알려주시면 감사하겠습니다
감사합니다"
tool 이라 하시면 svm 2번째 글에 보시면 실행파일을 이용하는 방법은 기록 해 뒀고요 제가 사용하는 libsvm 의 경우 다운받으면 안에 svm.h 와 svm.cpp 파일 등 소스코드( train, predict, scaler..)가 제공 됩니다. 이를 이용하여 프로젝트 내에서 이용 가능합니다.
네"" 답변 감사합니다""
SVM 이 뭔지 궁금해서 찾던도중 쉽게 잘 설명되어있어서 어려운내용을 쉽게 이해 할수있었네요~
정리능력이 뛰어나신지 보면서 잘 이해가 되었습니다. 잘 읽었습니다.
3일간 svm 관련 정리글을 읽고 있었는데
가장 이해가 잘되는 좋은글 입니다^^
고맙습니다
카테고리
태그목록
달력
LATEST FROM OUR BLOG
BLOG VISITORS
Copyright © 2015 Socialdev. All Rights Reserved.
티스토리툴바