1

私はこのウェブサイトが初めてで、Matlab と Support-Vector-Machines に関しては初めてで、先生がこのコードを教えてくれました。

clear all;
clc;
X_plus = load('example2_SVM.m');
[m,n] = size(X_plus);
ligne = m;
ligne_plus = 0;
for i=1:ligne
    if(X_plus(i,n)==1)
        ligne_plus = ligne_plus +1;
    end
end

ligne_moins = ligne-ligne_plus;
colonne = n-1;
for i=1:ligne
    y(1,i) = X_plus(i,colonne+1);
end

for i=1:ligne
    for j=1:ligne
        s=0;
        for k=1:colonne
            s = s + X_plus(i,k)*X_plus(j,k);
        end
        H(i,j) = y(i)*y(j)*s;
    end
end

f = ones(1,ligne);

A = [];
b = [];

beq = zeros(1,1);
lb = zeros(1,ligne);
ub = zeros(1,ligne);

bornes_sup = 0.5;
for i=1:ligne
    ub(i) = bornes_sup;
end

Aeq = y;
f = -f;

alpha = quadprog(H,f,A,b,Aeq,beq,lb,ub);

for k=1:colonne
    s=0;
    for i=1:ligne
        s = s + alpha(i)*y(i)*X_plus(i,k);
    end
    w(k) = s;
end

for i=1:ligne
    if(alpha(i)>0.001)
        support = i;
    break;
    end
end

s = 0;


for k=1:colonne
    for i=1:ligne
        s = s + alpha(i)*y(i)*X_plus(support,k)*X_plus(i,k);
    end
end
w0 = y(support) - s;


for i=1:m
if(X_plus(i,3)==1)

    plot(X_plus(i,1),X_plus(i,2),'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',5)

else

    plot(X_plus(i,1),X_plus(i,2),'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','r','MarkerSize',5)

end

hold on
end
hold on

x = -10:0.1:10;
y = -10:0.1:10;

if(w(2) ~= 0)

     plot(x,-w(1)/w(2)*x-w0/w(2),'--rs','LineWidth',0.2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',1)  
else

     plot(x,-w0/w(1),'--rs','LineWidth',2,'MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',1)
end

これは example2_SVM.m です:

1 0 +1
2 0 +1
1 1 +1
0 1 +1
0 2 +1
4 -1 +1
3 0 +1
3 3 -1
4 3 -1
5 3 -1
5 4 -1
5 2 -1
6 4 -1
4 2 -1
4 5 -1 

このコードで何をしているのか:正と負の値を含むexample2_SVM.mからデータを読み取っています。

http://i.stack.imgur.com/Jkpsm.jpg

ポイントが線形に分離可能であることがわかるように、私の質問は、このコードを変更して、このデータを使用して多項式除算器を描画する方法です。

1 2 +1
3 1 +1
3 2.5 +1
1 1 -1
2 3 -1
2 1 -1  
4

0 に答える 0