2017-02-14 11 views
0

alpha, betagamma 내 SVM 분류기 값을 확인하고 SVM 분류자를 교육하고 알파 및 지원 벡터를 결정했습니다. 그래서 기본적으로 뭘기호 변수를 추가 한 후 매우 긴 숫자입니까?

-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 
-1 

입니다 : 유사 아래에있는 내 알파에서 불과 열 행된다

0.0904235536887480 -0.269325475875919 -0.678528701392414 
-0.321039098061280 -0.507618180664821 -1.42365662798284 
-0.0737761304021185 -0.269641311369441 -0.647521877863172 
0.00105779420640393 -0.311226557946309 -0.667506146498475 
0.0913098589312967 -0.289462325547514 -0.391261050348894 
0.00622693949845773 -0.166248587146820 -0.149546793127464 
-0.292302915842567 -0.564676268888150 -1.60153093563523 
0.112997393643248 -0.310512134534035 -0.725281274142312 
-0.135361511770186 -0.456321702624641 -1.26973221898260 
-0.173160731078767 -0.434439033384469 -1.22687774941370 

및 내 지원 벡터에서 불과 열 행이 아래에있는 내 지원 벡터, 행당 3 개 변수를 계수를 결정하는 것 :

c = (-1)*[0.0904*x1 + (-0.2693)*x2 + (-0.6785)*x3] + (-1)*[(-0.321)*x1 + (-0.5076)*x2 + (-1.4236)*x3]..... 

등등 내 alpha의 크기까지.

(107845064549358722206080751595348329973204613074833920445585562521882937008164658045489239834546021458299139*x1)/50534761550197893278639420198779799540396107395587434771118149413836407509953624874438129483687080755200 + (95720990302914087945142311872326568914380675701489099929103269189530321664249312169660240242394455632803627*x2)/134178504805697854567421908803656709124500009291732154392279224305703564767807900528680550698065697177600 + (90626366614084720573448362168042659133754200934323766866906741825007634289583081638045482944881264585156183*x3)/125521827076297992982426946945356276277758073208394596044390242092432367040852552107475353878835652198400 

이 예상 된 출력 :

은 그래서 matlab에

syms x1, syms x2, syms x3; 

alpha = SVMStruct.Alpha; 
svm_vec = SVMStruct.SupportVectors; 

for i = 1:size(alpha,1) 
    c(i) = alpha(i)*(svm_vec(i,1)*x1 + svm_vec(i,2)*x2 + svm_vec(i,3)*x3); 
end 

sum_it = sum(c); 

에서 다음 그러나 이것은 매우 이상한 출력을 생성 코딩? 왜 그것을 분수로 사용합니까?

출력을 보면 내 방정식을 올바르게 구현 했습니까?

답변

1

귀하의 계산 입력은 기호 변수이므로, 해당 변수를 사용하는 모든 계산은 기호 변수의 정확한 값을 산출하게됩니다. 당신은 결과의 대략적인 부동 소수점 표현을 원한다면, 당신은, 당신은 x1에 대한 x2를 실제 값을 지정해야하지만이를 위해

double(sum_it) 

double

으로 합계를 캐스팅 할 것 및 말했다되고 그건

double(subs(sum(c), [x1, x2, x3], [1, 2, 3])) 

, 나는 실제로이 원하는 당신이 방정식의 시스템을 해결하기 위해 무엇을 생각합니다. 당신은 내가 X1, X2와 X3의 가치를 모르는 나는 그 변수의 계수에만 관심이 이대로 두 번 사용할 수 없습니다 응답이

variables = svm_vec \ alpha; 
+0

감사를 수행 할 \ 연산자를 사용할 수 있습니다. 나는''\'이 무엇을 성취했는지 모르겠다. 나는 그것을 읽었으며 그 목적을 정확히 이해하지 못했다. 그런 말은, 내 구현이 맞습니까? 그렇다면이 수를 "x1"로 수동으로 나눠서 계수를 구할 수 있습니다. 맞습니까? – StuckInPhD

+2

@StuckInPhD : ['vpa'] (https://www.mathworks.com/help/symbolic/vpa.html)를 사용하십시오. 하지만이 응용 프로그램에서 왜 기호 또는 가변 정밀도 수학이 필요한지 잘 모릅니다. – horchler

+0

@ StuckInPhD'x1','x2','x3'을 해결하려고하지 않습니까? – Suever