Support Vector Machine


Ide dasar Support Vector Machine (SVM) adalah memaksimalkan batas hyperplane (maximal margin hyperplane), seperti yang diilustrasikan pada Gambar 2.1 (a) ada sejumlah pilihan hyperplane yang mungkin untuk set data, dan 2.1 (b) merupakan hyperplane dengan margin yang paling maksimal. Meskipun 2.1 (a) sebenarnya juga bisa menggunakan hyperplane sembarang, hyperplane dengan margin yang maksimal akan memberi generalisasi yang lebih baik pada metode klasifikasi.
Untitled

Konsep klasifikasi dengan SVM dapat dijelaskan secara sederhana sebagai usaha untuk mencari hyperplane terbaik yang berfungsi sebagai pemisah dua buah kelas data pada ruang input (Nugroho, 2007). Gambar 2.1 memperlihatkan beberapa pola yang merupakan anggota dari dua buah kelas data: +1 dan -1. Data yang tergabung pada kelas -1 disimbolkan dengan bentuk lingkaran, sedangkan data pada kelas +1 disimbolkan dengan bentuk bujur sangkar.

Hyperplane (batas keputusan) pemisah terbaik antara kedua kelas dapat ditemukan dengan mengukur margin hyperplane tersebut dan mencari titik maksimalnya. Margin adalah jarak antara hyperplane tersebut dengan data terdekat dari masing-masing kelas. Data yang paling dekat ini disebut support vector. Garis solid pada Gambar 2.1 (b) sebelah kanan menunjukkan hyperplane terbaik, yaitu yang terletak tepat pada tengah-tengah kedua kelas, sedangkan data lingkaran dan bujur sangkar yang dilewati garis batas margin (garis putus-putus) adalah support vector. Usaha untuk mencari lokasi hyperplane ini merupakan inti dari proses pelatihan pada SVM.
Untitled

Download source code support vector machine untuk pengenalan pola

Berikut ini merupakan contoh pemrograman matlab untuk mengklasifikasi bentuk objek dalam suatu citra. Pada contoh ini, bentuk yang diklasifikasikan adalah bentuk lingkaran dan bentuk hati. Masing-masing bentuk tersebut kemudian diekstraksi cirinya berdasarkan parameter metric dan eccentricity. Metric merupakan nilai perbandingan antara luas dan keliling objek. Sedangkan eccentricity merupakan nilai perbandingan antara jarak foci ellips minor dengan foci ellips mayor suatu objek. (Materi mengenai ekstraksi ciri citra dapat dilihat pada laman berikut: link). Langkah-langkah klasifikasi bentuk objek menggunakan algoritma Support Vector Machine yaitu:

1. Mempersiapkan data latih untuk pelatihan, pada proses ini digunakan 30 citra yang terdiri dari 15 citra dengan objek berbentuk lingkaran dan 15 citra dengan objek berbentuk hati.
data latih

2. Mempersiapkan data uji untuk pengujian, pada proses ini digunakan 10 citra yang terdiri dari 5 citra dengan objek berbentuk lingkaran dan 5 citra dengan objek berbentuk hati.
data uji

3. Mengekstraksi ciri bentuk pada citra data latih berdasarkan parameter metric dan eccentricity

clc; clear; close all;

image_folder = 'Pattern Recognition2\data latih';
filenames = dir(fullfile(image_folder, '*.gif'));
total_images = numel(filenames);

for n = 1:total_images
full_name = fullfile(image_folder, filenames(n).name);
our_images = logical(imread(full_name));
our_images = bwconvhull(our_images,'objects');
stats = regionprops(our_images,'Area','Perimeter','Eccentricity');
area(n) = stats.Area;
perimeter(n) = stats.Perimeter;
metric(n) = 4*pi*area(n)/(perimeter(n)^2);
eccentricity(n) = stats.Eccentricity;
trainset = [metric;eccentricity]';
end

4. Nilai metric dan eccentricity yang telah diekstrak kemudian digunakan sebagai data masukan dalam proses pelatihan SVM. Pada contoh ini, nilai metric digunakan sebagai sumbu-x, sedangkan nilai eccentricity digunakan sebagai sumbu-y. Kernel SVM yang digunakan adalah kernel linier.

% prepare class label for first run of svm
class=cell(30,1);
class(1:15,1)={'Circle'};
class(16:30,1)={'Heart'};

% perform run of svm
options = optimset('maxiter',100000);
figure,
SVMStruct = svmtrain(trainset,class,'Kernel_Function','linear',...
 'showplot',true,'quadprog_opts',options);
title(sprintf('Kernel Function: %s',...
 func2str(SVMStruct.KernelFunction)),...
 'interpreter','none');
xlabel('Metric')
ylabel('Eccentricity')

save SVMStruct.mat SVMStruct

5. Sehingga hasil dari proses pelatihan adalah sebagai berikut

svm

6. Setelah dilakukan proses pelatihan, maka diperoleh hyperplane grafik antara metric dan eccentricity. Pada grafik di atas, tampak bahwa hyperplane mampu untuk memisahkan dua kelas (lingkaran dan hati) dengan akurasi 100% (tidak ada data yang berada pada kelas yang salah). Hyperplane tersebut kemudian digunakan sebagai garis pemisah untuk mengklasifikasi pada proses pengujian. Pemrograman untuk proses pengujian yaitu:

clc; clear; close all;

image_folder = 'Pattern Recognition2\data uji';
filenames = dir(fullfile(image_folder, '*.gif'));
total_images = numel(filenames);

for n = 1:total_images
full_name = fullfile(image_folder, filenames(n).name);
our_images = logical(imread(full_name));
our_images = bwconvhull(our_images,'objects');
stats = regionprops(our_images,'Area','Perimeter','Eccentricity');
area(n) = stats.Area;
perimeter(n) = stats.Perimeter;
metric(n) = 4*pi*area(n)/(perimeter(n)^2);
eccentricity(n) = stats.Eccentricity;
testset = [metric;eccentricity]';
end

load SVMStruct
Group = svmclassify(SVMStruct,testset)

7. Sehingga dihasilkan kelas keluaran berikut ini:
svm keluaran

8. Kelas keluaran tersebut 100% sesuai dengan kelas keluaran pada data uji sebenarnya, sehingga proses pengenalan pola bentuk lingkaran dan hati menggunakan algoritma SVM menghasilkan akurasi yang sangat baik

>>Download source code support vector machine untuk pengenalan pola<<

  1. salam pagi mas adi, apakah SVM yang mas adi buat bisa digunakan untuk klasifikasi lebih dari 2 kelas, misalkan untuk klasifikasi jenis-jenis penyakit tanaman berdasarkan warna daun.? terima kasih mas adi

    • selamat pagi mas muslim
      untuk kelas klasifikasi bisa lebih dari dua kelas
      tetapi untuk ciri masukan hanya bisa dengan dua masukan
      jika ingin lebih dari dua ciri, bisa menggunakan metode multisvm

  2. mas mimin, bikinin tutorial semtimen analisis twitter dongšŸ˜€

  3. assalamu’alaikum ,
    untuk code multisvm itu gimana ya mas di matlab, mohon bantuannya mas, makasihšŸ˜€

  4. mas adi, saya sudah berhasil menggunakan multisvm, bagaimana pengecekan akurasi menggunakan k-fold cross validation? ada contoh ndak mas, kemudian apakah ada batasan tertentu jumlah data training untuk klasifikasi di SVM. terima kasih mas Adi.

  5. Apakah svm bisa digabungkan dengan pca ya mas adi?

    • fungsi svm pada matlab hanya dapat mengolah data dengan jumlah masukan sebanyak dua buah
      pca dapat diaplikasikan untuk mereduksi jumlah masukan menjadi dua buah untuk kemudian diaplikasikan pada algoritma svm

  6. siang mas adi
    itu yg d atas kan atribut utk input svm nya ada 2 mas
    klo atribut nya ada 7 apakah bisa menggunakan svm utk klasifikasi mas?

  7. Assalamualaikum mas Adi,
    mas, untuk setting toolbox SVM itu gimana ya?
    saya jalanin program yg mas Adi buat tp error.
    mungkin nggak karena toolbox svm?

    ini pesan error nya mas:

    Undefined function or variable ‘trainset’.

    Error in pelatihan_svm (line 27)
    SVMStruct = svmtrain(trainset,class,’Kernel_Function’,’linear’,…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: