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.

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.

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 halaman berikut: Ekstraksi Ciri). 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.

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.

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

clc;clear;close all;

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

area = zeros(1,total_images);
perimeter = zeros(1,total_images);
metric = zeros(1,total_images);
eccentricity = zeros(1,total_images);

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
figure,
SVMModel = fitcsvm(trainset,class);
sv = SVMModel.SupportVectors;
gscatter(trainset(:,1),trainset(:,2),class)
grid on
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('circle','heart','Support Vector')
hold off
xlabel('Metric')
ylabel('Eccentricity')

save SVMModel.mat SVMModel

5. Sehingga hasil dari proses pelatihan adalah sebagai berikut

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 Recognition\data uji';
filenames = dir(fullfile(image_folder, '*.gif'));
total_images = numel(filenames);

area = zeros(1,total_images);
perimeter = zeros(1,total_images);
metric = zeros(1,total_images);
eccentricity = zeros(1,total_images);

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 SVMModel
Group = predict(SVMModel,testset)

7. Sehingga dihasilkan kelas keluaran berikut ini:

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’,…

  8. Mau nanya dong, untuk gambar HSV di codingnya itu apanya yg diubah?

  9. Saya punya gambar hasil segmentasi warna HSV terus saya mau klasifikasikan objek tersebut, bantu dong proses trainingnya gimana.

  10. contoh untuk multisvm gmn? apa cukup nambah data training lain ?

  11. mas, saya mencoba programnya, tapi kenapa pas saya run pengujiansvm tidak ada output apa apa yah?

  12. matlab saya versi 2016. Cara menjalankan programnya gimana mas?

  13. liona soleman

    Mas Adi, saya mencoba koding program tersebut dengan data yang saya miliki, matlab saya versi 2015a, setiap menjalankan program pelatihan selalu muncul system error dan file svmstruct.mat-nya tidak berhasil dibuat (disimpan), jadi tidak bisa menjalankan pada file pengujian. itu kenapa ya mas? mohon bantuannya ya mas

  14. liona soleman

    perintah yg membedakan penggunaan svm pada versi matlabnya apa ya mas? bagian yg membuat error koding perform run of svm mas

  15. ‘Error while evaluating uicontrol Callback’, itu maksud error apa ya mas adi?

  16. Selamat pagi broo,
    Saya lagi sementara bikin aplikasi pendeteksi objek,
    kira2 kerangka teori pas apa ?
    minta saranya..

  17. selamat siang mas adi apakah ada contoh program tentang SVM yang berbentuk video? terima kasih sebelumnya

  18. assalamualaikum, kalau dalam bentuk excel datanya, bagaimana caranya?
    terima kasih sebelumnya

  19. halo mas, apakah ada tutorial mengenai pemrosesan sinyal gelombang otak ya mas? kalo belum, bisa minta tolong bikin kan tutorial mengenai itu mas ya.

  20. Sore mas mau tanya, kira-kira untuk klasifikasi jenis buah (misal jenis buah jeruk bali, jeruk purut, dsb) cocok menggunakan metode apa ya mas? Apakah svm ini bisa digunakan untuk pengklasifikasian jenis buah buahan? Terima kasih mas

  21. slamat malam mas, untuk kode klasifikasi metode svm itu gmna ya mas. trimakasih.

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: