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 aplikasi 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

File source code beserta citra pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Penerapan algoritma Support Vector Machine (SVM) untuk klasifikasi citra daun jeruk dapat dilihat pada video tutorial berikut ini:

  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

    • waalaikumsalam
      data dari excel maupun dari ekstraksi ciri citra pada prinsipnya sama saja, perintah untuk membaca data dari file excel adalah xlsread
      seperti yang ada pada materi di halaman berikut ini

      Jaringan Syaraf Tiruan untuk Memprediksi Jumlah Penduduk

    • saya mau bertanya lagi, saya punya data latih dalam bentuk excel dan type data yg saya gunakan double, tapi waktu saya Run data latih saya itu dia error,

      Error using classreg.learning.FullClassificationRegressionModel.prepareDataCR (line 189)
      X and Y do not have the same number of observations.

      Error in ClassificationSVM.prepareData (line 624)
      classreg.learning.FullClassificationRegressionModel.prepareDataCR(…

      Error in classreg.learning.FitTemplate/fit (line 213)
      this.PrepareData(X,Y,this.BaseFitObjectArgs{:});

      Error in ClassificationSVM.fit (line 239)
      this = fit(temp,X,Y);

      Error in fitcsvm (line 278)
      obj = ClassificationSVM.fit(X,Y,varargin{:});

      Error in tryyyy (line 10)
      SVMModel = fitcsvm(data,class);

      itu kira2 kenapa?

    • Ukuran data nya bisa disesuaikan kembali

    • kalau untuk akurasinya bagaimana caranya dikasih tampil / dilihat?

    • Untuk akurasi bisa dilihat pada command window atau workspace

  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.

  22. assalamualaikum, saya mau bertanya, bisa tidak kira2 file matlab dihosting, kalau bisa , ada tidak referensi tentang itu, makasih sebelumnya

  23. Mas gimana caranya kalau pakai multisvm, kebetulan ciri fitur yg kupakai Ada 8.

  24. mas melihat dari sebagian komentar mengenai eror koding svm diatas yang minimal matla versi 2015b.terus untuk koding svm seperti kasus diatas tapi untuk matlab versi 2014a itu bagaimana? mohon info dan penjelasannya trimakasih.

  25. mas, bagaimana cara mmenampilkan hyperplanenya mas? soalnya waktu pogrammnya saya running cuma garis hyperplannya tidak tampil, saya pakai matlab 2016b. makasih sebelumnya mas

  26. malam mas, mau izin bertanya saya lagi mengerjakan tugas akhir kuliah disini tugas akhir saya bertema kan kebocoran pipa air, jadi disini mas saya menggunakan data tekanan pada pipa air untuk inputan svm, bagaimana untuk menentukan data uji dan data latih dan bagaimana cara mengimplemntasikan data tersebut ke svm mas. mohon bantuan nya terima kasih sebelumnya

  27. halo mas, bisa nga membuat identifikasi plate nomer mobil agar bisa men akses gerban secara otomatis…

  28. agung pratama putra

    Assalamualaikum mas
    saya memiliki data 3 kategorik untuk variabel Y
    dan 17 variabel X
    dimana saya memiliki variabel umur.
    Saya ingin bertanya apakah variabel umur perlu diganti menjadi data yang berbentuk kelas juga?

  29. agung pratama putra

    terimakasih mas adi sudah menjawab
    untuk 3 kelas apakah mas ada tutorial pengerjaannya menggunakan aplikasi Matlab atau program R?
    soalnya saya masih binggung untuk pengerjaannya menggunakan 3 kelas pada variabel Y.

  30. agung pratama putra

    terimakasih mas atas bantuannya
    bantuan mas sangat saya harapkan untuk penyelesaian penelitian saya.
    maaf kalo saya merepotkan mas.

  31. mas adi ijin bertanya apakah untuk ekstrasi ciri pada citra digital yang sudah di manipulasi dalam gambar apakah klasifikasi bentuk dengan svm…terima kasih

  32. Mas, kalau misalnya mau klasifikasi sinyal ECG pada aktivitas duduk dan berdiri berdasarkan features di time domain, bisa make coding di atas, nggak? Featuresnya disimpan di dalam file .txt.

    • Koding di atas bisa dicoba diimplementasikan untuk klasifikasi sinyal ECG pada aktivitas duduk dan berdiri berdasarkan features di time domain

    • Aan Sihotang

      Mas, boleh minta nomor Whatsapp atau e-mailnya, nggak? Saya sedang melakukan penelitian tugas akhir tetapi coding di bagian akhir (PLOT SVM-nya) bermasalah…

  33. Mas Adi, mau tanya kalau untuk klasifikasi kematangan buah yg berdasar fitur warna dan tekstur apakah bisa menggunakan SVM? Atau harus menggunakan MultiSVM? Terima kasih 🙂

    • Pada prinsipnya jika jumlah input sama dengan 2 dan jumlah output juga sama dengan 2 maka bisa menggunakan algoritma svm
      Tetapi jika jumlah input maupun output lebih dari 2 maka bisa menggunakan algoritma multi svm

  34. Terima kasih mas Adi atas penjelasannya… Jadi misal output klasifikasi nya ada 3 (matang,tidak matang,busuk) jadi termasuk multi svm ya? Terus kalau one against one dan one against all itu termasuk multi svm juga ya mas? Terima kasih 🙂

  35. Mau tanya mas caa menjalankan program yang benar bagaimana?

    Adakah step by stepnya dari menyimpan file dalam folder,dan program pertama yang perlu dibuat itu yang mana dan di simpan dengan nama apa.

    Mohon maaf mas masih tahap belajar.

  36. Jane Sihotang

    Cara menampilakan hyperplanennya itu ada di coding bagian mana, ya?

  37. Mas boleh tanya tahapan/langkah2 dan program untuk prediksi energi dg metode svm mas? Dan apa2 saja yg perlu diperhatikan dan disiapkan datanya mas?

    • bisa dipelajari lebih lanjut teori mengenai tahapan/langkah2 dan program untuk prediksi energi dg metode svm dan apa2 saja yg perlu diperhatikan dan disiapkan datanya

  38. Fanny Julianto

    Malam mas, saya ingin bertanya terkait error di line code ‘SVMModel = fitcsvm(trainset,class);’ ini kenapa ya mas?

  39. Andika Wylista Putra

    mau bertanya dong kak, untuk metode SVM bisa tidak menggunakan dataset citra ?

  40. Halo mas mau tanya, Kalo saya pakai 2 metode KNN untuk seleksi fitur dan SVM untuk klasifikasi. punya saya ektraksi berdasarkan teksture dengan GLCM,nah itu ada 4 fitur energy contrast homogen dan correlation, lalu saya hitung dengan KNN. Nanti waktu hitung dengan SVM yang menjadi sumbu X dan Y ambil fitur yang mana yah mas? Energy, contrast homogenity dan correlation mas? Mohon ilmunya mas? Terimakasih mas. Sehat selalu

  41. Kholis Saturodiyah

    Assalamu’alaikum mas, saya mau tanya.
    Saya menggunakan algoritma svm untuk citra daun jeruk. Jenis daun jeruk yng saya pakai 4 jenis.
    Rumus algoritmanya apa ya mas?

  1. Pingback: Rendysaputra_Tugas_011170046

Leave a comment