Matlab 添加符号变量后的非常长的数字?
所以我想确定我的SVM分类器的Matlab 添加符号变量后的非常长的数字?,matlab,vector,linear-equation,Matlab,Vector,Linear Equation,所以我想确定我的SVM分类器的alpha,beta和gamma值,我训练了我的SVM分类器,并确定了alpha和支持向量。我的支持向量每行有3个变量,下面是我的支持向量的10行: 0.0904235536887480 -0.269325475875919 -0.678528701392414 -0.321039098061280 -0.507618180664821 -1.42365662798284 -0.0737761304021185 -0.269641311369441 -0.
alpha
,beta
和gamma
值,我训练了我的SVM分类器,并确定了alpha和支持向量。我的支持向量每行有3个变量,下面是我的支持向量的10行:
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
类似地,下面是我的alpha的十行:
-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
这是预期产出吗?为什么我把它当作分数
从输出来看,我是否正确地实现了我的等式?计算的输入是符号变量,因此使用这些变量的任何计算都将产生一个同样是符号变量的精确值。如果需要结果的近似浮点表示,则需要将总和转换为
double
double(sum_it)
不过,为了做到这一点,您需要为x1
、x2
和x3
指定实际值
double(subs(sum(c), [x1, x2, x3], [1, 2, 3]))
也就是说,我认为你真正想要的是解方程组。您可以使用\
操作符执行此操作
variables = svm_vec \ alpha;
感谢您的回复,我不能使用double,因为我不知道x1、x2和x3的值,我只对这些变量的系数感兴趣。我不知道
\
取得了什么成就,我仔细阅读了它,但并不完全理解它的目的。话虽如此,我的实施是否正确?如果是这样的话,我可以手动用x1除以这些数字,得到那个系数,对吗?@StuckInPhD:use。不知道为什么您需要符号或变量精度数学来解决这个应用程序。@StuckInPhD您不是在尝试解决x1
、x2
、和x3
?@horchler vpa是我想要的,谢谢。我只对找出这些变量的系数感兴趣。@Suever No,我只对找出这些变量的系数感兴趣,基本上是alpha、beta和gamma的值,它们是这些支持向量的比例因子。