2017-02-14 26 views
0

所以我想確定我的SVM分類器的alpha,betagamma值,我訓練了我的SVM分類器並確定了alpha和支持向量。我的支持向量具有每行3個變量,下面是從我的支持向量短短十行:添加符號變量後很長的數字?

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 

,同樣下面是我的阿爾法短短十行:

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

所以我基本上做的是確定如下係數:

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

等等,直到我的尺寸爲alpha

所以我編碼在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); 

下列但是這創造了一個非常奇怪的輸出:

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

這是預期的輸出?爲什麼我將它作爲分數?

從輸出看,我是否正確實現了我的方程?

回答

1

您的計算輸入是符號變量,因此使用這些變量的任何計算都會產生一個確切值,即也是的一個符號變量。如果你想要的結果的近似浮點表示,你要投的總和爲double

double(sum_it) 

爲了雖然做到這一點,你需要爲x1指定實際值,x2,和

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

話雖這麼說,我覺得你其實什麼是解方程的系統。您可以使用\操作人員的答覆做到這一點

variables = svm_vec \ alpha; 
+0

謝謝,我不能使用雙,因爲我不知道X1,X2和X3的價值,我只對那些變量的係數感興趣。我不知道'''''實現了什麼,我讀了它,並沒有完全理解它的目的。話雖如此,我的執行是否正確?如果是這樣,我可以用''x1''手工分割這些數字來得到這個係數,對吧? – StuckInPhD

+2

@StuckInPhD:使用['vpa'](https://www.mathworks.com/help/symbolic/vpa.html)。不知道爲什麼你需要這個應用程序的符號或變量精度。 – horchler

+0

@StuckInPhD你不是想解決'x1','x2'和'x3'嗎? – Suever