2016-10-14 3 views
0

내 데이터는 e1071 패키지에서 R에 svm으로 이상한 결과를 생성하므로 R svm이 WEKA (또는 Python)와 동일한 결과를 생성 할 수 있는지 확인하려고했습니다. 과거의 WEKA.R 및 WEKA에서 지원 벡터 머신

나는 그 질문을 봤는데, 나와 똑같은 혼란이 있지만 대답이없는 것을 발견했다. This is the question.

나는 여기에서 대답을 얻을 수 있기를 바랍니다.

더 쉽게 작업 할 수 있도록 필자는 홍채 데이터 세트를 사용하고 전체 홍채 데이터를 사용하여 모델 (WEKA의 SMO 및 R 패키지 e1071의 svm)을 교육하고 자체 테스트를 수행합니다.

WEKA 매개 변수 : 기본값보다

weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V 10 -W 1 -K "weka.classifiers.functions.supportVector.RBFKernel -G 0.01 -C 250007" 

기타, 나는 R의 fucntion와는 consistant 할 RBFKernel으로 커널을 변경했습니다. 나는 사람을 학습 기계가 아니에요

  true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   48   2 
    virginica  0   2  48 

, 그래서 나는 ':

a b c <-- classified as 
50 0 0 | a = Iris-setosa 
    0 46 4 | b = Iris-versicolor 
    0 7 43 | c = Iris-virginica 

R 스크립트 :

library(e1071) 
model <- svm(iris[,-5], iris[,5], kernel="radial", epsilon=1.0E-12) 
res <- predict(model, iris[,-5]) 
table(pred = res, true = iris[,ncol(iris)]) 

결과는

결과는 기본 매개 변수를 추측하는 것은이 두 가지 방법에서 매우 다릅니다. 예를 들어 e1071의 기본값은 epsilon이고 WEKA는 1.0E-12입니다. 매뉴얼을 읽으려고했지만 모든 파라미터를 동일하게 만들고 싶었지만 많은 파라미터가 나와 비교할 수없는 것 같습니다.

감사합니다.

답변

5

SMOO 용 RWeka 매개 변수는 http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/SMO.html을 참조하고? svm을 사용하여 e1071 svm 구현을위한 해당 매개 변수를 찾으십시오.

? svm에 따라 R e1071 svm은 libsvm에 대한 인터페이스이며 표준 QP 솔버를 사용하는 것으로 보입니다. K 수준 멀티 클래스 - 분류

k는> 2 libsvm가 '일 - 대 - one' - 접근하는 K의 (K-1)/2 진 분류기 훈련되어 사용; 적절한 클래스는 투표 방식에 의해 발견됩니다. libsvm은 내부적으로 SparseM 패키지에서 상위 수준으로 지원되는 스파 스 데이터 표현 방식을 사용합니다.

RWeka

의 반대? SMO으로

은 다항식 또는 RBF 커널을 사용하여 지원 벡터 분류를 훈련을 위해 존 C. 플랫의 연속 최소한의 최적화 알고리즘 을 구현합니다. 다중 클래스 문제는 pairwise 분류를 사용하여 해결됩니다.

따라서 두 가지 구현은 일반적으로 다릅니다 (결과가 약간 다를 수 있음).

library(RWeka) 
model.smo <- SMO(Species ~ ., data = iris, 
control = Weka_control(K = list("RBFKernel", G=2), C=1.0, L=0.001, P=1.0E-12, N=0, V=10, W=1234)) 
res.smo <- predict(model.smo, iris[,-5]) 
table(pred = res.smo, true = iris[,ncol(iris)]) 

      true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   47   1 
    virginica  0   3  49 

library(e1071) 
set.seed(1234) 
model.svm <- svm(iris[,-5], iris[,5], kernel="radial", cost=1.0, tolerance=0.001, epsilon=1.0E-12, scale=TRUE, cross=10) 
res.svm <- predict(model.svm, iris[,-5]) 
table(pred = res.svm, true = iris[,ncol(iris)]) 

      true 
pred   setosa versicolor virginica 
    setosa   50   0   0 
    versicolor  0   49   1 
    virginica  0   1  49 

는 또한이를 참조하십시오 : 우리는 같은 해당 하이퍼 매개 변수를 선택할 정지하는 경우, 혼란 행렬이 거의 동일 [https://stats.stackexchange.com/questions/130293/svm-and-smo-main-differences][1]이 [https://www.quora.com/Whats-the-difference-between-LibSVM-and-LibLinear][1]

+1

예는 커널 K는 바로이 것있다 커널의 이름과 대역폭 감마를 목록으로 사용합니다. –

+0

답변 해 주셔서 감사합니다! 그러나 2 클래스 문제의 경우 매개 변수를 모두 설정하더라도 두 가지 매우 다른 예측을 얻습니다. 구현이 다르기 때문입니까? – Yan

+0

SVM 및 SMO에 의한 다중 클래스 분류에 사용되는 전략은 동일합니다 (일대일 대응). 바이너리 분류의 경우, 가능한 모든 매개 변수 (기본 매개 변수 포함)를 모두 조사하고 모두 동일하게 설정하면 내 직감은 결과가 많이 달라지지 않아야하며, 그렇지 않으면 구현 차이 때문입니다. –

관련 문제