2012-06-13 3 views
5

저는 R 및 SVM에 익숙하지 않으며 기능을 e1071 패키지에서 프로파일하려고합니다. 그러나, 입력 데이터의 크기를 다양하게 변화시키는 좋은 프로파일 링 범위를 얻을 수있는 큰 데이터 세트를 찾을 수 없습니다. 누구든지 svm을 어떻게 일하는지 알고 있습니까? 어떤 데이터 집합을 사용해야합니까? svm에 대한 특정 매개 변수가 더 어려워 질까요?프로파일 링 SVM (e1071) in R

성능을 테스트하는 데 사용하는 일부 명령을 복사합니다. 아마도 내가 여기에 노력하고 무엇을 얻기 위해 가장 유용하고 쉽게 : 내가 행과 열을 복제 데이터 집합을 계속 증가

#loading libraries 
library(class) 
library(e1071) 
#I've been using golubEsets (more examples availables) 
library(golubEsets) 

#get the data: matrix 7129x38 
data(Golub_Train) 
n <- exprs(Golub_Train) 

#duplicate rows(to make the dataset larger) 
n<-rbind(n,n) 

#take training samples as a vector 
samplelabels <- as.vector([email protected]@data$ALL.AML) 

#calculate svm and profile it 
Rprof('svm.out') 
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10) 
Rprof(NULL) 

을하지만 난 ... svm 어렵게 작동 만드는 메모리의 한계를 대신 도달

+1

교육용 점을 복제한다고해서 문제가 더 어렵지는 않습니다. 대부분의 SVM에서는 전체 데이터 세트가 주 메모리에 적합해야하기 때문에 결국에는 메모리 오류가 발생합니다. – karenu

+0

그렇다면 적절한 데이터 세트로 어떻게 시도 할 수 있습니까? 내가 사용할 수있는 모범을 아십니까? – Manolete

+0

예, 답을 볼 수있는 경우 사용할 수있는 데이터 집합을 나열했습니다. 또한 최상의 매개 변수를 찾으려면 매개 변수 튜닝을 수행해야합니다. 가장 정확한 매개 변수를 검색 할 때 일부 매개 변수를 검색 할 때 다른 매개 변수보다 시간이 오래 걸립니다. 저자의 libsvm에서 실용 가이드를 확인하십시오. http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFYQFjAA&url=http%3A%2F%2Fwww.csie.ntu .edu.tw % 2F ~ cjlin % 2Fpapers % 2Fguide % 2Fguide.pdf & ei = WtLhT46NO-jw0gG30pHVAw & usg = AFQjCNFol0McRktHC6gsBxKXqQMvmQUFeg – karenu

답변

8

"SVM 작업"에 관해서는 SVM 작업을 "어렵게 만드는 것"은 쉽게 분리 할 수없는 더 복잡한 모델이며, 높은 차원과 더 크고 밀도가 높은 데이터 집합입니다.

  • 데이터 세트의 크기가 증가 (데이터 요소의 수)
  • 희소성 감소 (이하 제로)
  • 차원 증가 (속성의 수)
  • 비 :

    SVM 성능으로 저하 선형 커널이 사용됩니다 (커널 매개 변수를 사용하면 커널 평가가 더 복잡해집니다)

모수의 변화에 ​​

는 SVM이 더 오래 걸릴 수 있도록 변경할 수 있습니다 매개 변수입니다. 물론 매개 변수는 얻을 수있는 솔루션의 품질에 영향을 미치며 사용하기에 지장이 없습니다.

C-SVM을 사용하면 C를 변경하면 실행 시간이 달라집니다. (nu-SVM의 유사한 매개 변수는 nu입니다.) 데이터 세트가 합리적으로 분리 가능하면 SVM이 더 많은 학습 포인트를 지원 벡터로 허용하므로 C를 작게하면 런타임이 길어집니다. 데이터 세트가별로 분리되지 않으면 C를 더 크게 만드는 것은 SVM에 본질적으로 데이터에 꼭 맞는 좁은 마진 솔루션을 원하고 데이터가 쉽게 생성되지 않을 때 계산하는 데 훨씬 오래 걸리게되므로 갈라진.

매개 변수 검색을 수행 할 때 정확도가 크게 향상되지 않고 계산 시간이 증가하는 매개 변수가있는 경우가 종종 있습니다.

다른 매개 변수는 커널 매개 변수이며 커널을 계산하는 복잡성을 높이기 위해 변수를 변경하면 당연히 SVM 런타임이 증가합니다. 선형 커널은 간단하며 가장 빠릅니다. 비선형 커널은 물론 더 오래 걸릴 것입니다. 일부 매개 변수는 커널의 계산 복잡성을 증가시키지 않지만 훨씬 복잡한 모델을 필요로하므로 SVM이 최적의 솔루션을 찾는데 더 오래 걸릴 수 있습니다.

데이터 집합을 사용하는 :

UCI Machine Learning Repository은 데이터 세트의 좋은 소스입니다.

MNIST handwriting recognition dataset은 사용하기 좋은 하나입니다. 데이터 세트를 임의로 선택하여 점점 더 큰 크기의 데이터 세트를 만들 수 있습니다. 링크의 데이터에는 모든 자릿수가 포함되어 있음을 명심하십시오. SVM은 당연히 바이너리이므로 데이터를 두 자릿수로 줄이거 나 일종의 다중 클래스 SVM을 수행해야합니다.

데이터 세트도 쉽게 생성 할 수 있습니다. 선형 데이터 세트를 생성하려면 초평면에 대한 법선 벡터를 무작위로 선택한 다음 데이터 포인트를 생성하고 하이퍼 평면의 어느면에 레이블을 지정할지 결정하십시오. 초평면의 특정 거리 내에있는 점들이 때로는 다르게 라벨이 붙을 수 있도록 임의성을 추가하십시오. 클래스 간의 오버랩을 증가시켜 복잡성을 증가시킵니다. 또는 분포가 가장자리에서 겹치도록 1 또는 -1로 표시된 정규 분포 점의 클러스터 수를 생성합니다. 고전적인 비선형 예제는 바둑판입니다. 포인트를 생성하고 바둑판 패턴으로 라벨을 붙입니다. 더 어렵게 만들려면 사각형의 수를 늘리고 치수를 늘리고 데이터 수를 늘리십시오. 물론 비선형 커널을 사용해야 할 것입니다.

+0

대단히 감사합니다. 감사합니다. 이 질문이 도움이되는지 궁금하다. – Manolete

+0

karenu 입력 행렬은 어떻습니까? 나는 언제 그리고 왜 트랜스 포즈를 적용해야 하는지를 이해하기 위해 고심하고있다. 나는 몇 가지 예를 보았고, 모두 다른 것을하고있다. t() 입력 행렬을 적용해야 할 때를 어떻게 알 수 있습니까? – Manolete