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:

Motor Harga Jarak tempuh per liter cc Unit Terjual
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

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:

Motor Harga Jarak tempuh per liter cc
Motor E 13.000.000 45 125
Motor F 12.000.000 47 110
Motor G 10.500.000 43 110
Motor H 13.500.000 35 125

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:

[sdm_download id=”2431″ fancy=”0″]



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.