2014-12-03 5 views
0

일부 다중 레이블 분류 문제를 실행하기 위해 libsvm (Matlab 인터페이스 사용)을 사용하려고합니다. 여기 IRIS 데이터를 사용하여 몇 가지 장난감 문제가 다음 내가 가지고 확률을 예측하기위한다중 레이블 분류에 대한 libsvm 출력 예측 확률

load fisheriris; 

featuresTraining      = [meas(1:30,:); meas(51:80,:); meas(101:130,:)]; 
featureSelectedTraining     = featuresTraining(:,1:3); 

groundTruthGroupTraining    = [species(1:30,:); species(51:80,:); species(101:130,:)]; 
[~, ~, groundTruthGroupNumTraining]  = unique(groundTruthGroupTraining); 

featuresTesting       = [meas(31:50,:); meas(81:100,:); meas(131:150,:)]; 
featureSelectedTesting     = featuresTesting(:,1:3); 

groundTruthGroupTesting     = [species(31:50,:); species(81:100,:); species(131:150,:)]; 
[~, ~, groundTruthGroupNumTesting]  = unique(groundTruthGroupTesting); 

% Train the classifier 
optsStruct        = ['-c ', num2str(2), ' -g ', num2str(4), '-b ', 1]; 
SVMClassifierObject      = svmtrain(groundTruthGroupNumTraining, featureSelectedTraining, optsStruct); 

optsStruct        = ['-b ', 1]; 
[predLabelTesting, predictAccuracyTesting, ... 
    predictScoresTesting]    = svmpredict(groundTruthGroupNumTesting, featureSelectedTesting, SVMClassifierObject, optsStruct); 

그러나이

1.08812899093155 1.09025554950852 -0.0140009056912001 
0.948911671379753 0.947899227815959 -0.0140009056926024 
0.521486301840914 0.509673405799383 -0.0140009056926027 
0.914684487894784 0.912534150299246 -0.0140009056926027 
1.17426551505833 1.17855350325579 -0.0140009056925103 
0.567801459258613 0.557077025701113 -0.0140009056926027 
0.506405203427106 0.494342606399178 -0.0140009056926027 
0.930191457490471 0.928343421250020 -0.0140009056926027 
1.16990617214906 1.17412523596840 -0.0140009056926026 
1.16558843984163 1.16986137054312 -0.0140009056926015 
0.879648874624610 0.876614924593740 -0.0140009056926027 
-0.151223818963057 -0.179682730685229 -0.0140009056925999 

내가 혼란 스러워요 (결과의 첫 12 행은 여기에 보여 주었다) 그 방법의 일부 확률이 1보다 크고 그 중 일부가 부정적입니까? 그럼 어떻게 예측 확률의 결과를 해석하는

1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
3 

Accuracy = 93.3333% (56/60) (classification) 

의 최종 출력 :

그러나, 예측 라벨은 매우 정확한 것 같다? 고마워. A.

답변

1

svm의 출력은 확률이 아닙니다!

점수 기호는 클래스 A 또는 클래스 B에 속하는지 여부를 나타냅니다. 점수가 1 또는 -1이면 마진표에 표시되지만 특히 유용하지는 않습니다.

확률이 실제로 필요한 경우 Platt scaling을 사용하여 변환 할 수 있습니다. 당신은 기본적으로 그들에게 시그 모이 드 함수를 적용합니다.

0

이 답변은 아마도 너무 늦었지만 동일한 문제가 발생하는 사람들에게 도움이 될 수 있음을 이해합니다.

libsvm 실제로 '-b'옵션이 사용되는 확률이 발생할 수 있습니다.

내가 실수 한 것은 optsStruct 변수를 정의한 방식이라고 생각합니다. 다음과 같이 정의해야합니다 : ['-b ' num2str(1)] OR ['-b 1'].

svmtrain으로 전송 된 옵션에도 동일하게 적용됩니다.

+0

' '-b''대신''-b ''따옴표 앞뒤에 공백을 두어야합니다. – PatternRecognition