2013-03-22 3 views
2

나는 상황에 맞는 물체 인식을하고 있으며, 이전에 관찰이 필요하다. 예 : 이 공간에는 "개"라는 레이블이 붙어있었습니다. 올바르게 라벨이 붙어있을 확률은 얼마입니까? matlabs svmclassify에 분류가있는이 확실성 수준을 반환하는 인수가 있는지 알고 있습니까?matlabs에서 불확실성을 측정 svmclassify

SVM = 
     SupportVectors: [11x124 single] 
       Alpha: [11x1 double] 
       Bias: 0.0915 
     KernelFunction: @linear_kernel 
    KernelFunctionArgs: {} 
      GroupNames: {11x1 cell} 
SupportVectorIndices: [11x1 double] 
      ScaleData: [1x1 struct] 
     FigureHandles: [] 

당신이에서 불확실성의 좋은 측정을 계산하기 위해 어떤 방법을 생각할 수 :하지 않으면

는, SVM은 그 안에 다음과 같은 구조를 가지고 matlabs? (어떤 벡터를 사용할 수 있습니까?) SVM의 불확실성을 설명하는 논문/기사가 환영합니다. MATLAB SVM에 대한 자세한 설명도 환영합니다.

이렇게 할 수 없다면이 불확실성 측정치를 가진 SVM이있는 다른 라이브러리를 생각해 볼 수 있습니까?

+0

당신은 후부를 의미합니까, 맞습니까? 훈련이 주어지면 테스트 데이터 포인트에 대해 분류기는 최상의 클래스를 반환하지 않고 각 클래스에 대한 확률을 계산하여 가장 높은 확률을 가진 클래스가 최상의 결과를 얻도록해야합니다. –

답변

0

데이터를 제공하고 직접 교육을 받고 있습니까? 그렇다면 가장 좋은 방법은 데이터를 교육 및 테스트 세트로 분할하는 것입니다. Matlab에는 cvpartition이라는 함수가 있습니다. 테스트 데이터에 대한 분류 결과를 사용하여 위양성 및 실패율을 추정 할 수 있습니다. 2 진 분류 작업의 경우,이 두 숫자는 불확실성을 정량화합니다. 여러 가설을 사용한 분류 테스트의 경우 가장 좋은 방법은 혼동 행렬로 결과를 컴파일하는 것입니다.

편집. 조금

P=cvpartition(Y,'holdout',0.20); 

rbfsigma=1.41; 

svmStruct=svmtrain(X(P.training,:),Y(P.training),'kernel_function','rbf','rbf_sigma',rbfsigma,'boxconstraint',0.7,'showplot','true'); 

C=svmclassify(svmStruct,X(P.test,:)); 

errRate=sum(Y(P.test)~=C)/P.TestSize 
conMat=confusionmat(Y(P.test),C) 
+0

위대한,이 제안을 주셔서 감사합니다. 내가 뭔가를 놓친다면 용서해주세요. 그러나 거짓 긍정/실패율은 단 하나의 숫자가 아닐까요? 나는. 사진에 10 개의 라벨이있는 경우이 라벨을 모든 라벨에 적용해야합니까? "이 특정 라벨링은 매우 확실합니다.이 라벨은 적습니다"라는 것을 알려드립니다. 불확실성은 평균 또는 집계가 아닌이 특정 표시의 실제 불확도에 상대적이어야한다. 이 일을 할 수있는 방법이 있습니까? svmclassify가 실제로이 레이블에 부여한 실제 점수를 얻을 수있는 방법이 있습니까? – Mark

+0

그리고 네 훈련 및 테스트 데이터를 제공하고 있습니다. – Mark

+2

알겠습니다. 내가 아는 한 SVM은 본질적으로 확률 적이 지 않으므로 일부 신뢰할 수있는 테스트 데이터에서 분류자를 평가하는 것 이외에 불확실성을 논의하는 것이 어려울 수 있습니다. 그러나 당신이 볼 수있는 한 가지는 당신이 분류 한 특정 예제에 대한 목적 함수의 실제 값입니다. 0에 가까운 값은 경계선임을 나타냅니다. – bogle

5

살람 도움이 될 내가 사용했던 일부 오래된 코드를 발견

힌트 : 난 당신이 svmdecision.m의 F 값을 전달하기 위해 svmclassify.m 기능을 수정하는 것이 제안 사용자에게 이것은 outputclass에 추가됩니다.

단지 상기 매트랩 커맨드 라인에서 다음 입력 svmclassify.m 액세스하려면 : 그 svmdecision.m (https://code.google.com/p/auc-recognition/source/browse/trunk/ALLMatlab/AucLib/DigitsOfflineNew/svmdecision.m?spec=svn260&r=260)를 발견

open svmclassify 

은 F 값을 전달할 수있다; svmclassify.m에서 svmdecision.m 호출 그래서 다음은 substitude 수있다 : 상기 사용자에게이 F 값을 전달하여

[classified, f] = svmdecision(sample,svmStruct); 

를 멀티 클래스 구현은 같은 하나의 VS 모두가 설계 될 수있다 이미 Matlab에 내장 된 바이너리 분류기.

f 값은 출력 클래스와 관련된 여러 입력의 비교 측면에서 찾고자하는 값입니다.

코드를 작성하고 이해하는 데 도움이되기를 바랍니다. 아마도 지금까지 문제를 해결했을 것입니다.

+0

이것은 내 작업에서 사용하는 정확한 방법입니다. – Joe

0

LIBSVM (또한 Matlab 인터페이스가 있음)에는 분류 기능이 확률 추정치를 반환하는 옵션 -b이 있습니다. 그들은 결정 값에 적용되는 1 차원 로지스틱 회귀를 수행하는 Platt (2000)의 일반적인 접근법에 따라 계산되는 것으로 보인다.

Platt, J. C. (2000). SV 기계에 대한 확률. Smola, A.J. et al. (편집) 큰 여백 분류 자의 발전. pp. 캠브리지 : MIT Press.

0

오래전에 게시 된 것으로 알고 있지만 저자가 출력이 예상 레이블인지 추정 확률인지에 관계없이 모두 훈련 된 SVM의 출력에서 ​​불확실성 측정을 찾고 있다고 생각합니다. 견적. 하나의 측정 값은 동일한 입력 x에 대한 출력의 분산입니다. 문제는 정규 SVM이 확률 적/베이지안 신경망과 같은 확률 모델이 아니라는 것입니다. 같은 x가 주어지면 SVM에 대한 추론은 항상 동일합니다.

확증이 필요 하겠지만 확률 적 정규화로 SVM을 훈련시키는 것이 가능할 수도 있습니다. 어쩌면 최적화 루틴의 단계에서 입력 벡터가 작은 확률 적 교란을 겪을 수 있거나 무작위로 선택된 피쳐가 빠질 수있는 확률 적 마진 최대화의 형태 일 수 있습니다. 마찬가지로 테스트 도중 무작위로 선택한 여러 기능을 삭제하거나 수정하여 매번 다른 지점 추정치를 산출 할 수 있습니다. 그런 다음 불확실성 측정치를 산출하여 추정치의 분산을 취할 수 있습니다.

입력 x가 모델에 익숙하지 않은 패턴을 제시하면 포인트 추정치가 크게 불안정하고 가변적이라고 주장 할 수 있습니다.

두 개의 클래스가 잘 구분되어 있으며 치밀한 범위의 특징 값을 차지하는 두 번째 장난감 예제를 상상해보십시오. 이 세트에 대해 훈련 된 모델은 열차 데이터에 나타난 값의 분포/범위에 해당하는 지점에 일반적으로 잘 적용되지만, 두 등급에서 멀리 떨어져 있지만 같은 위도에있는 시험 관찰을 보면 매우 불안정합니다 말하자면, 분리 초평면으로. 이러한 관찰은 지원 벡터 중 하나의 작은 섭동이 훈련 또는 유효성 오류를 크게 변경시키지 않고 분리 초평면에서 미세한 회전을 일으킬 수 있기 때문에 모델에 대한 도전 과제를 제시하지만 멀리있는 시험 관찰의 추정을 잠재적으로 변경합니다 많이.