Algoritma SVR (Support Vector Regression) 30


Algoritma SVR (Support Vector Regression) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah menentukan hasil jual tipe sepeda motor baru berdasarkan kelompok data yang sudah ada.
Algoritma ini dapat dikatakan sebagai perbaikan dari Regresi Linier / Analisis Regresi. Jika regresi linier menghasilkan sebuah fungsi dengan hasil linier / garis lurus, maka algoritma ini dapat menghasilkan sebuah fungsi dengan hasil yang bergelombang mengikuti jalur data yang terbentuk, sehingga prediksi yang didapatkan menjadi lebih akurat dibandingkan dengan regresi linier.



Diasumsikan ada 4 tipe motor yang sudah diketahui datanya, yaitu Motor A,B,C,D
Masing-masing tipe motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, dan memiliki hasil jual dalam unit
Diasumsikan data dari 4 tipe motor tersebut adalah sebagai berikut:

MotorHargaJarak tempuh per literccUnit Terjual
Motor A10.000.0003511020
Motor B12.000.000451259
Motor C11.000.0004015017
Motor D14.000.00037.512512

Contoh data awal adalah sebagai berikut:

contohData = [10000000 35 110; ...
              12000000 45 125; ...
              11000000 40 150; ...
              14000000 37.5 125];
          
hasilContohData = [20; ...
                   9; ...
                   17; ...
                   12];

Selanjutnya ada 4 buah motor lagi, yaitu E,F,G,H, yang baru akan diluncurkan, sehingga tidak diketahui hasil jualnya
Maka tentukan data-data ini nantinya diperkirakan memiliki hasil jual berapa unit
Diasumsikan data awalnya adalah sebagai berikut:

MotorHargaJarak tempuh per litercc
Motor E13.000.00045125
Motor F12.000.00047110
Motor G10.500.00043110
Motor H13.500.00035125

Contoh data yang baru adalah sebagai berikut:

dataBaru = [13000000 45 125; ...
            12000000 47 110; ...
            10500000 43 110; ...
            13500000 35 125];



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan parameter c yang digunakan dalam perhitungan
c adalah parameter untuk menentukan seberapa besar deviasi dari parameter epsilon yang masih dapat ditoleransi
Semakin besar nilai parameter ini, maka semakin besar nilai tolerasi yang diperbolehkan
Diasumsikan dalam kasus ini, nilai c adalah 100

c = 100;

* Tentukan parameter epsilon yang digunakan dalam perhitungan
Parameter epsilon mengontrol lebar dari zona regresi yang digunakan dalam mempelajari data
Semakin besar nilai epsilon, maka estimasi regresi akan semakin datar (mendekati regresi linier)
Diasumsikan dalam kasus ini, nilai epsilon adalah 0.000001

epsilon = 1e-06;

Langkah-langkah penggunaan algoritma ini adalah

* Lakukan proses pembelajaran data menggunakan metode SVR (Support Vector Regression)
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 1 – 7)

objSVR = SVR(contohData,hasilContohData,c, epsilon);

Memasuki perhitungan pada fungsi SVR

1. Tentukan fungsi kernel yang digunakan
Diasumsikan dalam kasus ini akan digunakan fungsi kernel Spline, dengan rumus perhitungan seperti pada skrip dibawah ini

fungsiKernel = @(a,b) prod(arrayfun(@(x,y) 1 + x*y+x*y*min(x,y)-(x+y)/2*min(x,y)^2+1/3*min(x,y)^3,a.feature,b.feature));    

2. Lakukan perulangan pada setiap contoh data
Ambil semua kemungkinan pasangan data yang ada, termasuk pasangan dengan dirinya sendiri

for i=1:jumlahData
	for j=1:jumlahData
		xi(i,j).feature = contohData(i,:);
		xj(i,j).feature = contohData(j,:);
	end
end

3. Buat matriks Gram untuk digunakan sebagai contoh data yang akan dipelajari

M = arrayfun(fungsiKernel,xi,xj);
M = M + 1/c*eye(jumlahData);

4. Lakukan pembelajaran data menggunakan metode Quadratic Programming
Sebelum melakukan pembelajaran data, maka harus ditentukan dulu parameter yang digunakan dalam metode tersebut,
yaitu H, f, lb, ub, dan options

H = 0.5*[M zeros(jumlahData,3*jumlahData); zeros(3*jumlahData,4*jumlahData)];
f = [ -hasilContohData; epsilon*ones(jumlahData,1);zeros(jumlahData,1);zeros(jumlahData,1)];
lb = [-c*ones(jumlahData,1);	zeros(jumlahData,1);	zeros(2*jumlahData,1)];
ub = [ c*ones(jumlahData,1);	2*c*ones(jumlahData,1); c*ones(2*jumlahData,1)];
options = optimoptions('quadprog','Algorithm','interior-point-convex','Display','off');

z = quadprog(H,f,[],[],[],[],lb,ub,[],options);

5. Hitung nilai alpha, yaitu beberapa data pertama yang diperoleh dari hasil pembelajaran sebelumnya

alpha = z(1:jumlahData);

6. Hitung nilai bias yang dilambangkan dengan b

for m=1:jumlahData
	bias(m) = hasilContohData(m);
	for n = 1:jumlahData
		bias(m) = bias(m) - alpha(n) * M(m,n);
	end
	bias(m) = bias(m) - epsilon - alpha(m)/c;
end
b = mean(bias);

7. Simpan nilai alpha, bias, fungsi kernel, contoh data, dan fungsi untuk menghitung prediksi

svrobj.alpha = alpha;
svrobj.b = b;
svrobj.kernel = fungsiKernel;
svrobj.contohData = contohData;
svrobj.hitungPrediksi = @(x) cellfun(@(u) hitungNilaiOutput(u),num2cell(x,2));

* Gunakan fungsi ini untuk menghitung nilai output menggunakan data pembelajaran yang sudah ada

function f = hitungNilaiOutput(x)
    f = 0;
    
    jumlahPrediksi = size(x,1);
    for i=1:jumlahPrediksi
    	sx(i).feature = x(i,:);
    end
    
    jumlahData = size(contohData,1);
    for i=1:jumlahData
    	sy(i).feature = contohData(i,:);
    end
    
    for i=1:jumlahData
        f = f + svrobj.alpha(i)*fungsiKernel(sx(1),sy(i));
    end    
    f = (f + b)/2;
end

8. Lakukan perhitungan hasil contoh data menggunakan hasil pembelajaran yang sudah ada

hasilPerhitunganContohData = objSVR.hitungPrediksi(contohData);

9. Hitung rata-rata selisih dari hasil contoh data yang asli dengan hasil contoh data menggunakan perhitungan tersebut

rata2delta = sum((hasilContohData - hasilPerhitunganContohData)) / size(hasilContohData,1);

10. Lakukan perhitungan prediksi pada data yang baru
Kemudian tambahkan nilai delta untuk mendapatkan jawaban akhir

hasilPerhitunganDataBaru = objSVR.hitungPrediksi(dataBaru) + rata2delta;

Hasil akhir adalah:

Algoritma SVR (Support Vector Regression)
Contoh: menentukan kelompok hasil jual tipe sepeda motor baru berdasarkan kelompok data yang sudah ada
Diasumsikan ada 4 tipe motor yang sudah diketahui datanya, yaitu Motor A,B,C,D
Masing-masing tipe motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, dan memiliki hasil jual dalam unit
Diasumsikan data dari 4 tipe motor tersebut adalah sebagai berikut:
Motor  , Harga     , Jarak tempuh per liter, cc , hasil jual
Motor A, 10.000.000, 35                    , 110, 20
Motor B, 12.000.000, 45                    , 125, 9
Motor C, 11.000.000, 40                    , 150, 17
Motor D, 14.000.000, 37.5                  , 125, 12


Selanjutnya ada 4 buah motor lagi, yaitu E,F,G,H, yang baru akan diluncurkan, sehingga tidak diketahui hasil jualnya
Maka tentukan data-data ini nantinya diperkirakan memiliki hasil jual berapa unit
Diasumsikan data awalnya adalah sebagai berikut:
Motor  , Harga     , Jarak tempuh per liter, cc
Motor E, 13.000.000, 45                    , 125
Motor G, 12.000.000, 47                    , 110
Motor F, 10.500.000, 43                    , 110
Motor H, 13.500.000, 35                    , 125


Hasil Perhitungan dengan metode SVR (Support Vector Regression)
Motor  , Harga     , Jarak tempuh per liter, cc , prediksi hasil jual
Motor E, 13000000  , 45                    , 125, 4
Motor F, 12000000  , 47                    , 110, 10
Motor G, 10500000  , 43                    , 110, 17
Motor H, 13500000  , 35                    , 125, 16

Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

30 pemikiran di “Algoritma SVR (Support Vector Regression)

  • Melita

    Selamat malam, kak saya sedang belajar algoritma svr untuk prediksi rating berita dari opini masyarakat, akan tetapi saya masih kesulitan dalam penerapan dan perhitungan manual, misal saya memiliki 4 parameter untuk menghasilkan nilai dari svrnya, dari tahap mapping 4 variabel itu dengan kernel trick, fungsi lagrange dengan slack variable, saya masih belum paham, sementara saya belajar dari kitabnya smola. Jika berkenan saya ingin meminta catatan atau referensi kakak saat belajar algoritma ini, tolong dikirim ke e-mail saya. Terima kasih 🙂

    • pip Penulis

      Selamat malam,

      Saya tidak memiliki referensi dari jurnal tertentu dalam contoh implementasi ini. Jika anda perhatikan baik-baik, maka algoritma ini bergantung pada toolbox matlab, sehingga tidak dapat diketahui proses apa saja yang terjadi pada saat algoritma inti tersebut berjalan.

      Hanya sebagai pembanding saja, dalam kasus ini parameter yang digunakan hanyalah 1 saja, yaitu parameter c, kriteria yang digunakan ada 4 (motor, harga, jarak tempuh per liter, cc), fungsi kernel yang digunakan adalah fungsi kernel Spline. Yang bisa anda sesuaikan hanyalah penggantian 4 kriteria sesuai kasus anda, dan nilai parameter c (apabila diperlukan). Untuk fungsi kernel Spline saat ini tidak bisa ditukar dengan fungsi lain seperti fungsi Lagrange.

    • Ijan P. Panjaitan

      Selamat siang kak, apakah kaka sudah mengetahui perhitungan manualnya, kebetulan saya ada penelitian mengenai Algo SVR ini kah?
      Mohon di bantu kak

      • pip Penulis

        Sesuai yang saya sampaikan sebelumnya, implementasi skrip yang dilakukan pada skrip ini bergantung pada fungsi yang disediakan oleh matlab sehingga tidak diketahui secara pasti alur pengerjaan yang terjadi didalamnya.

    • zelia

      Permisi kak, apakah algoritma dengan studi kasus diatas pernah dioperasikan dengan menggunakan software Rstudio ? kalau sudah pernah boleh berbagi ilmunya kak ? atau link referensi programnya ?

      • pip Penulis

        Pada saat komentar ini ditulis, saya sebelumnya pernah mencoba untuk bereksperimen dengan perangkat lunak RStudio untuk beberapa saat, tetapi untuk saat ini eksperimen tersebut tidak saya lanjutkan. Pada implementasi untuk algoritma ini terdapat ketergantungan pada fungsi2 tertentu yang disediakan oleh perangkat lunak sehingga skrip tidak bersifat murni dan dengan demikian tidak dapat dikonversikan secara mentah ke dalam bahasa lainnya. Akan tetapi seharusnya pada perangkat lunak RStudio terdapat fitur untuk menggunakan semacam library untuk dapat mengimplementasikan hal yang serupa.

    • pip Penulis

      Untuk mengetahui apakah kasus anda dapat diselesaikan dengan algoritma ini, silahkan coba jelaskan alur sistem dari kasus polusi udara tersebut.

      • Erni Halawa

        kasusnya: memprediksi nilai konsentrasi zat pencemar udara (polutan) denga parameter yang mempengaruhi suhu, kecepatan angin, curah hujan,kelembaban udara. kasusnya time series. apakah memungkinkan memprediksi nilai konsentrasi polutan dengan SVR??? terimkasih

        • pip Penulis

          Terima kasih atas penjelasannya.
          Berdasarkan deskripsi singkat tersebut, maka seharusnya cara penyelesaian yang digunakan adalah sistem regresi, sehingga algoritma ini cocok untuk menyelesaikan permasalahan tersebut.

    • pip Penulis

      Mohon maaf untuk saat ini saya juga masih belum menemukan referensi untuk melakukan perhitungan manual atas algoritma ini. Saya mempelajari skrip ini berdasarkan referensi skrip lainnya.

  • Sri Sagita

    objSVR = SVR(contohData,hasilContohData,c, epsilon);

    ini kok g bisa y mas? d matlab ny tulisanny jd Undefined function or variable ‘SVR’.

    mksh sblumnya

    • Sri Sagita

      f = hitungNilaiOutput(x)
      f = 0;
      jumlahPrediksi = size(x,1);
      for i=1:jumlahPrediksi
      sx(i).feature = x(i,:);
      end
      jumlahData = size(contohData,1);
      for i=1:jumlahData
      sy(i).feature = contohData(i,:);
      end
      for i=1:jumlahData
      f = f + svrobj.alpha(i)*fungsiKernel(sx(1),sy(i));
      end
      f = (f + b)/2;
      end
      end

      yg ini jg Undefined function or variable ‘x’. mas

      x ny drmn tuh

      • pip Penulis

        dalam fungsi tersebut, x adalah parameter yang diperlukan oleh fungsi hitungNilaiOutput. Fungsi ini tidak ditujukan untuk dipanggil secara langsung (karena akan terjadi kesalahan karena input parameter x tidak tersedia) melainkan akan dilakukan oleh sistem pada saat skrip main dijalankan.

    • pip Penulis

      Skrip tersebut akan memanggil file fungsi SVR yang terdapat file SVR.m. Jika anda meletakkan file tersebut dalam folder yang sama maka seharusnya file tersebut dapat langsung dikenali.

  • Arda Surya Editya

    Selamat Siang pak
    Pak kalau saya mau merubah fungsi kernel nya itu untuk mencari fungsi kernel lain bisa cari dimana ya contoh sepert polynomial dll.
    Saya sangat senang sekali jika bapak bisa menjawab komentar saya.

    • pip Penulis

      Dalam skrip ini jika anda ingin mengganti fungsi kernel maka dapat dilakukan pada variabel “fungsiKernel” pada file SVR.m . Fungsi kernel lain yang saya ketahui adalah fungsi Gaussian dimana rumus yang dipakai adalah
      fungsiKernel = @(a,b) prod(arrayfun(@(x,y) exp(-gamma * (x-y)^2),a.feature,b.feature));

      Saya tidak mengetahui kernel lain selain kernel ini

  • Asep Yuhana

    Selamat Siang, apakah punya cara-cara untuk perhitungan manualnya secara jelas? saya kurang mengerti alur perhitungannya karena menggunakan bahasa pemrograman. Klo ada bolehkah dikirim via email.

  • bejo

    saya sudah run diatas, koq hasilnya beda ya
    Hasil Perhitungan dengan metode SVR (Support Vector Regression)
    Motor , Harga , Jarak tempuh per liter, cc , prediksi hasil jual
    Motor E, 13000000 , 45 , 125, 15
    Motor F, 12000000 , 47 , 110, 15
    Motor G, 10500000 , 43 , 110, 15
    Motor H, 13500000 , 35 , 125, 15

    yaitu hasilnya 15 semuanya

    • pip Penulis

      Saya sudah melakukan uji ulang pada skrip diatas dan hasilnya masih tetap seperti yang tertulis pada hasil akhir. Jika anda tidak mengubah apapun tetapi mendapatkan hasil yang berbeda, hal tersebut mungkin dikarenakan perbedaan versi matlab yang saya dan anda gunakan.

      • bejo

        saya menggunakan Matlab R2018a,

        >> main
        Algoritma SVR (Support Vector Regression)
        Contoh: memperkirakan hasil jual tipe sepeda motor baru berdasarkan kelompok data yang sudah ada
        Diasumsikan ada 4 tipe motor yang sudah diketahui datanya, yaitu Motor A,B,C,D
        Masing-masing tipe motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, dan memiliki hasil jual dalam unit
        Diasumsikan data dari 4 tipe motor tersebut adalah sebagai berikut:
        Motor , Harga , Jarak tempuh per liter, cc , hasil jual
        Motor A, 10.000.000, 35 , 110, 20
        Motor B, 12.000.000, 45 , 125, 9
        Motor C, 11.000.000, 40 , 150, 17
        Motor D, 14.000.000, 37.5 , 125, 12

        Selanjutnya ada 4 buah motor lagi, yaitu E,F,G,H, yang baru akan diluncurkan, sehingga tidak diketahui hasil jualnya
        Maka tentukan data-data ini nantinya diperkirakan memiliki hasil jual berapa unit
        Diasumsikan data awalnya adalah sebagai berikut:
        Motor , Harga , Jarak tempuh per liter, cc
        Motor E, 13.000.000, 45 , 125
        Motor G, 12.000.000, 47 , 110
        Motor F, 10.500.000, 43 , 110
        Motor H, 13.500.000, 35 , 125

        Hasil Perhitungan dengan metode SVR (Support Vector Regression)
        Motor , Harga , Jarak tempuh per liter, cc , prediksi hasil jual
        Motor E, 13000000 , 45 , 125, 15
        Motor F, 12000000 , 47 , 110, 15
        Motor G, 10500000 , 43 , 110, 15
        Motor H, 13500000 , 35 , 125, 15

        tetap sama hasilnya yaitu 15

        kalau boleh tahu, di situs ini menggunakan Matlab versi berapa ya?

        • pip Penulis

          Versi yang saya gunakan adalah versi R2015a. Mengingat saya tidak memiliki versi tersebut maka mohon maaf saya tidak dapat mengetahui dibagian manakah terjadi perbedaan cara perhitungan antar versi tersebut.

  • Maulani Halilah

    >> objSVR = SVR(contohData,hasilContohData,c, epsilon);
    ??? Undefined function or method ‘optimoptions’ for
    input arguments of type ‘char’.

    Error in ==> SVR at 28
    options =
    optimoptions(‘quadprog’,’Algorithm’,’interior-point-convex’,’Display’,’off’);
    >> itu aku errornya dimana ya mas?? kok gak bisa

    • pip Penulis

      Hal ini mungkin disebabkan karena library yang anda instal tidak lengkap sehingga fungsi “optimoptions” tidak ditemukan, atau versi matlab yang anda gunakan masih terlalu lama. Jika saya melihat penjelasan mengenai fungsi ini pada halaman website matlab, fungsi ini dikenalkan sejak versi R2013a sehingga anda akan mendapatkan error apabila menggunakan versi yang lebih lama dari versi tersebut.

  • SEAN WILLIAM BONATUA SAMOSIR

    Halo, Selamat siang
    kak/bang saya sedang mencari metode algoritma yang sesuai dengan skripsi barter online saya akan tetapi metode yang saya cari itu untuk pencocokan atau perbandingan harga maupun barang untuk, saya belum mendapatkan algoritma itu di halaman website ini. Jika berkenan tolong dikirim ke e-mail saya. Terima kasih 🙂

    • pip Penulis

      Contoh implementasi dari algoritma ini dapat anda ambil secara langsung sebelum bagian komentar. Karena ini adalah contoh implementasi maka tentunya tidak cocok dengan kasus yang anda miliki sehingga terdapat beberapa bagian yang harus disesuaikan. Silahkan mencoba untuk mengganti data yang saya gunakan dengan data yang anda miliki untuk mengetahui secara cepat apakah algoritma ini dapat menyelesaikan permasalahan yang terjadi pada kasus tersebut atau tidak.