如何在matlab svm图中得到决策边界的方程?

时间:2015-11-25 17:53:21

标签: svm matlab-figure

enter image description here
我的数据
y n Rh y2
1 1 1.166666667 1
-1 2 0.5 1
-1 3 0.333333333 1
-1 4 0.166666667 1
1 5 1.666666667 2
1 6 1.333333333 1
-1 7 0.333333333 1
-1 8 0.333333333 1
1 9 0.833333333 1
1 10 2.333333333 2
1 11 1 1
-1 12 0.166666667 1
1 13 0.666666667 1
1 14 0.833333333 1
1 15 0.833333333 1
-1 16 0.333333333 1
-1 17 0.166666667 1
1 18 2 2
1 19 0.833333333 1
1 20 1.333333333 1
1 21 1.333333333 1
-1 22 0.166666667 1
-1 23 0.166666667 1
-1 24 0.333333333 1
-1 25 0.166666667 1
-1 26 0.166666667 1
-1 27 0.333333333 1
-1 28 0.166666667 1
-1 29 0.166666667 1
-1 30 0.5 1
1 31 0.833333333 1
-1 32 0.166666667 1
-1 33 0.333333333 1
-1 34 0.166666667 1
-1 35 0.166666667 1

我的代码r

  data=xlsread('btpdata.xlsx',1.)
  A = data(1:end,2:3)
  B = data(1:end,1)
  svmStruct = svmtrain(A,B,'showplot',true)
  hold on
  C = data(1:end,2:3)
  D = data(1:end,4)
  svmStruct = svmtrain(C,D,'showplot',true)
  hold off 

如何在给定的mat-lab图中得到这条黑线的近似方程?

2 个答案:

答案 0 :(得分:1)

这取决于您使用的是哪个包,但由于它是线性支持向量机,因此或多或少有两个选项:

  • 您受过训练的svm包含属性coefs(有时称为wweights)和b(或intercept)中的直线等式,所以你的行是<coefs, X> + b = 0
  • 你的svm包含alphas(双系数,拉格朗日乘数),然后是coefs = SUM_i alphas_i * y_i * SV_i,其中SV_i是我的支持向量(你的情节中的圆圈)和{{1是它的标签(-1或+1)。有时y_i已经乘以alphas,然后乘以y_i

如果您尝试从实际绘图(图像)中获取等式,那么您只能读取它(它或多或少coefs = SUM_i alphas_i * SV_i,这意味着y = 0.6和{{1}基于图像分析的方法(对于任意这样的图)将需要:

  • 检测图像部分(物体检测)
  • 读取刻度/比例(OCR +物体检测)&lt; - 这实际上是最难的部分
  • 过滤掉所有非黑色并执行线性回归到左边的点,然后通过之前检测到的比例进行变换。

答案 1 :(得分:1)

我遇到了同样的问题。要建立决策边界的线性方程(y = mx + b),您需要梯度(m)和y轴截距(b)。 SVMStruct.Bias是b-term。渐变由SVM beta权重决定,SVMStruct不包含,因此您需要从alphas(包含在SVMStruct中)计算它们:

alphas = SVMStruct.Alpha;
SV = SVMStruct.SupportVectors;
betas = sum(alphas.*SV);
m = betas(1)/betas(2)

顺便说一下,如果您的SVM已经缩放了数据,那么我认为您需要对其进行缩放。