Regresi logistik / model logit, dalam statistika digunakan untuk prediksi probabilitas kejadian suatu peristiwa. Contoh yang dibahas kali ini adalah mengenai penentuan penerimaan pengajuan kredit sepeda motor baru berdasarkan kelompok data yang sudah ada.
Algoritma ini adalah variasi lain dari Regresi logistik dengan teknik Newton-Raphson yang sudah pernah dibahas sebelumnya. Pada contoh sebelumnya, teknik pembelajaran yang digunakan adalah teknik Newton-Raphson. Sedangkan pada pembahasan kali ini, teknik MSO (Multi Swarm Optimization) akan digunakan sebagai teknik pembelajaran.
Diasumsikan ada 8 data pelanggan yang sudah diketahui datanya, yaitu Pelanggan A,B,C,D,E,F,G,H
Masing-masing pelanggan memiliki kriteria, yaitu umur, jenis kelamin, skor kepribadian, dan memiliki nilai hasil yaitu Diterima / Ditolak
Diasumsikan 8 data tersebut adalah sebagai berikut:
Pelanggan | Umur | Jenis Kelamin | Skor Kepribadian | Hasil |
---|---|---|---|---|
Pelanggan A | 44 | Laki-laki | 3.55 | Diterima |
Pelanggan B | 52 | Perempuan | 4.71 | Diterima |
Pelanggan C | 60 | Perempuan | 6.56 | Ditolak |
Pelanggan D | 56 | Laki-laki | 6.8 | Ditolak |
Pelanggan E | 51 | Laki-laki | 6.94 | Ditolak |
Pelanggan F | 46 | Perempuan | 6.52 | Ditolak |
Pelanggan G | 48 | Laki-laki | 4.25 | Diterima |
Pelanggan H | 58 | Perempuan | 5.71 | Diterima |
Contoh data awal adalah sebagai berikut:
Untuk Kriteria Jenis Kelamin:
Laki-laki dilambangkan dengan angka -1
Perempuan dilambangkan dengan angka +1
Untuk kriteria Nilai Hasil:
Jika kondisi Diterima, maka inputan data kolom adalah 1
Jika kondisi Ditolak, maka inputan data kolom adalah 0
Dim data(9)() As Double data(0) = New Double() {44, -1, 3.55, 1} data(1) = New Double() {52, +1, 4.71, 1} data(2) = New Double() {60, +1, 6.56, 0} data(3) = New Double() {56, -1, 6.8 , 0} data(4) = New Double() {51, -1, 6.94, 0} data(5) = New Double() {46, +1, 6.52, 0} data(6) = New Double() {48, -1, 4.25, 1} data(7) = New Double() {58, +1, 5.71, 1}
Selanjutnya ada 2 orang pelanggan baru yang mengajukan kredit sepeda motor
Maka tentukan pelanggan ini nantinya akan termasuk dalam kelompok Diterima / Ditolak
Diasumsikan data awalnya adalah sebagai berikut:
Pelanggan I | 47 | Perempuan | 6.05 |
Pelanggan J | 52 | Laki-Laki | 5 |
Contoh data baru adalah sebagai berikut:
Untuk kriteria Nilai Hasil:
Karena belum diketahui nilai hasilnya, maka semua inputan data adalah -1
data(8) = New Double() {47, +1, 6.05, -1} data(9) = New Double() {52, -1, 5, -1}
Langkah-langkah penggunaan algoritma ini adalah
1. Lakukan normalisasi data untuk kriteria Umur dan Skor Kepribadian
Normalisasi data dihitung dengan rumus (data – (rata-rata kriteria tersebut)) / standar deviasi kriteria tersebut
Rata-rata adalah jumlah semua data dibagi dengan jumlah datanya
Standar deviasi adalah akar dari ((kuadrat dari (jumlah dari (data – rata-rata))) / jumlah data)
Penjelasan lebih lanjut dapat dilihat pada penjelasan skrip dibawah ini
Dim kolom() As Integer = {0, 2} Dim jumlahBaris As Integer = data.Length Dim jumlahKolom As Integer = data(0).Length Dim hasil(1)() As Double ' [0] = rata-rata, [1] = standar deviasi For i = 0 To 1 hasil(i) = New Double(jumlahKolom - 1) {} Next i For c = 0 To jumlahKolom - 1 'Hitung nilai rata-rata tiap-tiap kolom 'yaitu dengan rumus: jumlah semua data dibagi dengan jumlah datanya Dim total As Double = 0.0 For r = 0 To jumlahBaris - 1 total += data(r)(c) Next r Dim rata2 As Double = total / jumlahBaris hasil(0)(c) = rata2 'Hitung nilai standar deviasi tiap-tiap kolom 'yaitu dengan rumus: akar dari ((kuadrat dari (jumlah dari (data - rata-rata))) / jumlah data) Dim totalKuadrat As Double = 0.0 For r = 0 To jumlahBaris - 1 totalKuadrat += (data(r)(c) - rata2) * (data(r)(c) - rata2) Next r Dim stdDev As Double = Math.Sqrt(totalKuadrat / jumlahBaris) hasil(1)(c) = stdDev Next c For c = 0 To kolom.Length - 1 Dim j As Integer = kolom(c) ' kolom yang dinormalisasi Dim rata2 As Double = hasil(0)(j) ' nilai rata-rata untuk kolom tersebut Dim stdDev As Double = hasil(1)(j) For i = 0 To jumlahBaris - 1 data(i)(j) = (data(i)(j) - rata2) / stdDev Next i Next c
2. Tentukan jumlah swarm yang digunakan dalam perhitungan
Diasumsikan dalam kasus ini, jumlah swarm yang digunakan adalah 4 swarm
Const jumlahSwarm As Integer = 4
3. Tentukan jumlah partikel yang digunakan oleh masing-masing swarm
Diasumsikan dalam kasus ini, jumlah partikel yang digunakan adalah 3 partikel
Const jumlahPartikel As Integer = 3
4. Tentukan jumlah perulangan / epoch yang digunakan oleh setiap partikel untuk melakukan proses
Diasumsikan dalam kasus ini, jumlah perulangan / epoch yang digunakan adalah 100 kali
Const maksEpoch As Integer = 100
5. Lakukan proses perhitungan matriks bobot terbaik
Teknik yang digunakan dalam perhitungan ini adalah teknik MSO (Multi Swarm Optimization)
Penjelasan tentang fungsi tersebut akan dibahas pada perhitungan dibawah (poin 5a – 5k)
Dim bobotTerbaik() As Double = rl.prosesPerhitungan(contohData, jumlahSwarm, jumlahPartikel, maksEpoch)
5a. Tentukan dimensi permasalahan
Kolom dimensi akan ditambah dengan 1, karena indeks 0 adalah untuk menghitung b0 atau konstanta
Diasumsikan dalam kasus ini, dimensi bernilai 4 karena ada 3 dimensi yang akan dicari solusinya + 1 untuk menghitung b0
Dim dimensi As Integer = jumlahKriteria + 1
5b. Tentukan batas posisi minimal dan maksimal dari sebuah partikel
Nilai batas ini dimaksudkan agar posisi yang dicari tidak terlalu menyimpang keluar dari jalur
Diasumsikan dalam kasus ini, batas minimal posisi adalah -10 dan batas maksimal posisi adalah +10
Dim minX As Double = -10.0 Dim maksX As Double = 10.0
5c. Tentukan batas kecepatan minimal dan maksimal dari sebuah partikel
Nilai batas ini dimaksudkan agar perpindahan posisi yang dicari tidak terlalu cepat sekali berpindah-pindah
Diasumsikan dalam kasus ini, batas minimal kecepatan adalah -1 dan batas maksimal kecepatan adalah +1
Dim minKecepatan As Double = -1.0 Dim maksKecepatan As Double = 1.0
5d. Inisialisasi semua komponen yang dibutuhkan dalam perhitungan, yaitu partikel, swarm, dan multiswarm
Buat matriks Multiswarm sebanyak variabel jumlahSwarm
Buat matriks Swarm sebanyak variabel jumlahPartikel, dan masukkan masing-masing Swarm ke dalam matriks MultiSwarm
Buat partikel sebanyak variabel jumlahSwarm * jumlahPartikel, dan masukkan masing-masing Partikel ke dalam matriks Swarm
Beri nilai posisi partikel awal dengan posisi acak
Kemudian beri nilai kecepatan acak pada partikel tersebut
Penjelasan lebih detail dapat dilihat pada penjelasan skrip Class dibawah ini
Dim ms As New MultiSwarm(jumlahSwarm, jumlahPartikel, dimensi, minX, maksX, minKecepatan, maksKecepatan)
* Agar dapat menjalankan skrip diatas, maka diperlukan 3 Class Tambahan yaitu Class Partikel, Swarm, dan Multiswarm.
Class Partikel berisi data seperti posisi, kecepatan, nilai kesalahan, posisi partikel terbaik, dan nilai kesalahan partikel terbaik.
Class Swarm berisi data seperti daftar partikel, posisi swarm terbaik, dan nilai kesalahan swarm terbaik.
Class Multiswarm berisi data seperti daftar swarm, posisi multiswarm terbaik, dan nilai kesalahan multiswarm terbaik
Deklarasi Ketiga Class diatas adalah sebagai berikut:
Private Class Partikel Private Shared rnd As New Random(0) Public posisi() As Double Public kecepatan() As Double Public nilaiKesalahan As Double Public posisiTerbaik() As Double Public nilaiKesalahanTerbaik As Double Public Sub New(ByVal dimensi As Integer, _ ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double) posisi = New Double(dimensi - 1) {} kecepatan = New Double(dimensi - 1) {} posisiTerbaik = New Double(dimensi - 1) {} For k = 0 To dimensi - 1 posisi(k) = (maksX - minX) * rnd.NextDouble + minX kecepatan(k) = (maksKecepatan - minKecepatan) * rnd.NextDouble + minKecepatan Next k nilaiKesalahan = Double.MaxValue nilaiKesalahanTerbaik = nilaiKesalahan Array.Copy(posisi, posisiTerbaik, dimensi) End Sub End Class Private Class Swarm Public daftarPartikel() As Partikel Public posisiSwarmTerbaik() As Double Public nilaiKesalahanSwarmTerbaik As Double Public Sub New(ByVal jumlahPartikel As Integer, ByVal dimensi As Integer, _ ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double) daftarPartikel = New Partikel(jumlahPartikel - 1) {} For i = 0 To jumlahPartikel - 1 daftarPartikel(i) = New Partikel(dimensi, minX, maksX, minKecepatan, maksKecepatan) Next i posisiSwarmTerbaik = New Double(dimensi - 1) {} nilaiKesalahanSwarmTerbaik = Double.MaxValue End Sub End Class Private Class MultiSwarm Public daftarSwarm() As Swarm Public posisiMultiSwarmTerbaik() As Double Public nilaiKesalahanMultiSwarmTerbaik As Double Public Sub New(ByVal jumlahSwarm As Integer, ByVal jumlahPartikel As Integer, ByVal dimensi As Integer, _ ByVal minX As Double, ByVal maksX As Double, ByVal minKecepatan As Double, ByVal maksKecepatan As Double) daftarSwarm = New Swarm(jumlahSwarm - 1) {} For i = 0 To jumlahSwarm - 1 daftarSwarm(i) = New Swarm(jumlahPartikel, dimensi, minX, maksX, minKecepatan, maksKecepatan) Next i posisiMultiSwarmTerbaik = New Double(dimensi - 1) {} nilaiKesalahanMultiSwarmTerbaik = Double.MaxValue End Sub End Class
5e. Tentukan nilai kesalahan terendah (terbaik) sementara untuk posisi acak tersebut
Bandingkan semua nilai kesalahan pada masing-masing partikel, ambil nilai kesalahan terendah (terbaik)
Kemudian tentukan nilai kesalahan terendah pada masing-masing swarm
Dan terakhir, bandingkan nilai kesalahan terendah antar swarm untuk mendapatkan nilai kesalahan terendah pada multiswarm
For i = 0 To jumlahSwarm - 1 For j = 0 To jumlahPartikel - 1 Dim p As Partikel = ms.daftarSwarm(i).daftarPartikel(j) p.nilaiKesalahan = hitungNilaiKesalahan(contohData, p.posisi) ' add error p.nilaiKesalahanTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, p.posisiTerbaik, dimensi) If p.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then ' swarm best? ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi) End If If p.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then ' global best? ms.nilaiKesalahanMultiSwarmTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, ms.posisiMultiSwarmTerbaik, dimensi) indeksPosisiTerbaik(0) = i indeksPosisiTerbaik(1) = j End If Next j Next i
* Gunakan Fungsi ini untuk menghitung nilai kesalahan
teknik yang digunakan adalah teknik Mean Squared Error
dihitung dengan rumus jumlah dari (kuadrat dari (nilai jawaban – nilai hasil pada matriks data)) / jumlah data
Nilai jawaban yang baru bisa jadi mengembalikan nilai MSE yang lebih tinggi, sehingga nilai jawaban ini tidak bisa dipakai
Public Function hitungNilaiKesalahan(ByVal contohData As Double()(), ByVal bobot() As Double) As Double Dim indeksKriteriaHasil As Integer = contohData(0).Length - 1 Dim hasil As Double = 0.0 For i = 0 To contohData.Length - 1 Dim hasilPerhitungan As Double = hitungNilaiOutput(contohData(i), bobot) Dim hasilData As Double = contohData(i)(indeksKriteriaHasil) hasil += (hasilPerhitungan - hasilData) * (hasilPerhitungan - hasilData) Next i Return hasil / contohData.Length End Function
5f. Tentukan bobot inertia (w), bobot kognitif (c1), bobot sosial (c2), dan bobot global (c3)
Nilai acuan untuk masing-masing variabel dapat dilihat di http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00870279
Diasumsikan dalam kasus ini, nilai bobot tersebut akan mengikuti nilai acuan yang sudah ada
Const w As Double = 0.729 Const c1 As Double = 1.49445 Const c2 As Double = 1.49445 Const c3 As Double = 0.3645
5g. Tentukan probabilitas sebuah partikel akan dibuang dan dibuat ulang
Diasumsikan dalam kasus ini, nilai probabilitas tersebut adalah 0.01
Const probBuatBaru As Double = 0.01
5h. Tentukan probabilitas sebuah partikel akan bertukar dengan partikel acak dalam swarm acak
Diasumsikan dalam kasus ini, nilai probabilitas tersebut adalah 0.005
Const probTukarPartikel As Double = 0.005
5i. Lakukan proses pencarian posisi terbaik sebanyak jumlah perulangan (poin 5j dan 5k)
Dim epoch As Integer = 0 Do While epoch < maksEpoch epoch += 1 . . .
5j. Pada setiap kali perhitungan untuk swarm berikutnya, lakukan pengacakan urutan partikel pada masing-masing swarm
Sehingga perhitungan data tidak dimulai dari indeks partikel terendah sampai ke indeks tertinggi
For j = 0 To urutanPartikel.Length - 1 Dim r As Integer = rnd.Next(j, urutanPartikel.Length) Dim tmp As Integer = urutanPartikel(r) urutanPartikel(r) = urutanPartikel(j) urutanPartikel(j) = tmp Next j
5k. Lakukan perhitungan pada setiap partikel dalam masing-masing swarm
Perlu diingat bahwa urutan partikel yang dihitung terlebih dahulu adalah sesuai urutan pada pengacakan sebelumnya
5k1. Cari kecepatan perpindahan posisi yang baru dengan rumus:
v baru = (w * v skrg) + (c1 * r1 * (posisi partikel terbaik – posisi partikel skrg)) + (c2 * r2 * (posisi swarm terbaik – posisi partikel skrg) + (c3 * r3 * (posisi multiswarm terbaik – posisi partikel skrg))
Jika kecepatan yang baru ternyata diluar batas variabel minKecepatan dan maksKecepatan (-1 s/d 1), maka kembalikan kecepatan agar masuk dalam batas
For k = 0 To dimensi - 1 Dim r1 As Double = rnd.NextDouble Dim r2 As Double = rnd.NextDouble Dim r3 As Double = rnd.NextDouble p.kecepatan(k) = (w * p.kecepatan(k)) + (c1 * r1 * (p.posisiTerbaik(k) - p.posisi(k))) + (c2 * r2 * (ms.daftarSwarm(i).posisiSwarmTerbaik(k) - p.posisi(k))) + (c3 * r3 * (ms.posisiMultiSwarmTerbaik(k) - p.posisi(k))) If p.kecepatan(k) < minKecepatan Then p.kecepatan(k) = minKecepatan ElseIf p.kecepatan(k) > maksKecepatan Then p.kecepatan(k) = maksKecepatan End If Next k
5k2. Lakukan update posisi yang baru dengan cara posisi lama + kecepatan baru
Jika posisi yang baru ternyata diluar batas variabel minX dan maksX (-10 s/d 10), maka kembalikan posisinya agar masuk dalam batas
For k = 0 To dimensi - 1 p.posisi(k) += p.kecepatan(k) If p.posisi(k) < minX Then p.posisi(k) = minX ElseIf p.posisi(k) > maksX Then p.posisi(k) = maksX End If Next k
5k3. Hitung nilai kesalahan untuk posisi yang baru
p.nilaiKesalahan = hitungNilaiKesalahan(contohData, p.posisi)
5k4. Jika nilai kesalahan baru lebih rendah dari nilai kesalahan yang diperoleh partikel tersebut sebelumnya, maka ambil posisi yang baru sebagai posisi terbaik partikel tersebut
If p.nilaiKesalahan < p.nilaiKesalahanTerbaik Then p.nilaiKesalahanTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, p.posisiTerbaik, dimensi) End If
5k5. Jika nilai kesalahan baru ternyata lebih rendah dari nilai kesalahan swarm partikel tersebut, maka ambil posisi yang baru sebagai posisi terbaik swarm partikel tersebut
If p.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi) End If
5k6. Jika nilai kesalahan baru ternyata lebih rendah dari nilai kesalahan multi swarm, maka ambil posisi yang baru sebagai posisi terbaik multiswarm
If p.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then ms.nilaiKesalahanMultiSwarmTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, ms.posisiMultiSwarmTerbaik, dimensi) Console.Write("Epoch = " & epoch.ToString.PadRight(3) & ", swarm " & (i + 1).ToString.PadRight(2) & ", partikel " & (j + 1).ToString.PadRight(2) & ", ") Console.WriteLine(" nilai fungsi = " & ms.nilaiKesalahanMultiSwarmTerbaik.ToString("F6")) End If
5k7. Cari angka acak antara 0 sampai dengan 1
Jika angka acak termasuk dalam probabilitas pembuangan partikel, maka lakukan pembuangan dan buat ulang partikel tersebut
Setelah itu hitung nilai kesalahan untuk posisi partikel yang baru dibuat ulang
Dan bandingkan nilai kesalahannya dengan nilai kesalahan partikel, swarm, dan multiswarm
Dim p1 As Double = rnd.NextDouble If p1 < probBuatBaru Then Dim q As New Partikel(dimensi, minX, maksX, minKecepatan, maksKecepatan) q.nilaiKesalahan = hitungNilaiKesalahan(contohData, q.posisi) Array.Copy(q.posisi, q.posisiTerbaik, dimensi) q.nilaiKesalahanTerbaik = q.nilaiKesalahan If q.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = q.nilaiKesalahan Array.Copy(q.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi) If q.nilaiKesalahan < ms.nilaiKesalahanMultiSwarmTerbaik Then ms.nilaiKesalahanMultiSwarmTerbaik = q.nilaiKesalahan Array.Copy(q.posisi, ms.posisiMultiSwarmTerbaik, dimensi) Console.Write("Epoch = " & epoch.ToString.PadRight(3) & ", swarm " & (i + 1).ToString.PadRight(2) & ", partikel " & (j + 1).ToString.PadRight(2) & ", ") Console.WriteLine(" nilai fungsi = " & ms.nilaiKesalahanMultiSwarmTerbaik.ToString("F6")) End If End If ms.daftarSwarm(i).daftarPartikel(j) = q End If
5k8. Cari angka acak antara 0 sampai dengan 1
Jika angka acak termasuk dalam probabilitas pertukaran partikel, maka lakukan pertukaran partikel
Partikel akan ditukar dengan partikel acak pada swarm acak
Untuk masing-masing partikel yang telah ditukar posisinya, bandingkan nilai kesalahannya dengan nilai kesalahan swarm pada swarm yang baru
Dim p2 As Double = rnd.NextDouble If p2 < probTukarPartikel Then Dim ii As Integer = rnd.Next(0, jumlahSwarm) Dim jj As Integer = rnd.Next(0, jumlahPartikel) Dim q As Partikel = ms.daftarSwarm(ii).daftarPartikel(jj) ms.daftarSwarm(i).daftarPartikel(j) = q ms.daftarSwarm(ii).daftarPartikel(jj) = p If q.nilaiKesalahan < ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik Then ms.daftarSwarm(i).nilaiKesalahanSwarmTerbaik = q.nilaiKesalahan Array.Copy(q.posisi, ms.daftarSwarm(i).posisiSwarmTerbaik, dimensi) End If If p.nilaiKesalahan < ms.daftarSwarm(ii).nilaiKesalahanSwarmTerbaik Then ms.daftarSwarm(ii).nilaiKesalahanSwarmTerbaik = p.nilaiKesalahan Array.Copy(p.posisi, ms.daftarSwarm(ii).posisiSwarmTerbaik, dimensi) End If End If
Setelah melalui perhitungan diatas, maka akan didapatkan bobot dengan nilai fungsi terendah
6. Lakukan perhitungan dari masing-masing data awal menggunakan matriks bobot yang sudah ditemukan
Dim output As Double = rl.hitungNilaiOutput(contohData(i), bobotTerbaik)
* Gunakan fungsi ini untuk menghitung nilai output
nilai output dihitung dengan rumus:
Pertama, tentukan nilai z, yaitu z = b0 + b1(x1) + b2(x2) + b3(x3)
Kemudian tentukan nilai akhir, yaitu Y = 1.0 / (1.0 + e^-z)
Penjelasan mengenai langkah-langkah perhitungan dapat dilihat pada keterangan skrip dibawah ini
Public Function hitungNilaiOutput(ByVal dataItem() As Double, ByVal bobot() As Double) As Double Dim z As Double = bobot(0) 'b0 adalah konstanta For i = 0 To bobot.Length - 2 z += (bobot(i + 1) * dataItem(i)) Next i Return 1.0 / (1.0 + Math.Exp(-z)) End Function
7. Jika nilai output bernilai kurang dari 0.5 maka pelanggan tersebut memiliki nilai hasil Ditolak
Jika nilai output bernilai lebih dari 0.5 maka pelanggan tersebut memiliki nilai hasil Diterima
If output <= 0.5 Then Console.Write("-> Ditolak ") Else Console.Write("-> Diterima") End If
8. Catat tingkat kecocokan perhitungan data dengan hasil awal pada data
Langkah ini tidak wajib, hanya untuk mengetahui seberapa besar tingkat kecocokan perhitungan untuk data baru yang akan dihitung selanjutnya
Console.WriteLine("Jumlah perhitungan benar = " & jumlahBenar & ", jumlah perhitungan salah = " & jumlahSalah) Console.WriteLine("Tingkat kecocokan perhitungan dengan hasil data adalah " & (jumlahBenar / (jumlahBenar + jumlahSalah)).ToString("F2"))
9. Lakukan perhitungan yang sama (poin 6 dan 7) untuk masing-masing data baru
For i As Integer = 0 To dataBaru.Length - 1 Dim input(jumlahKolom - 2) As Double Array.Copy(dataBaru(i), input, jumlahKolom - 1) For j = 0 To input.Length - 1 Console.Write(input(j).ToString("F2").PadRight(5) & " ") Next j Console.Write(" ") Dim output As Double = rl.hitungNilaiOutput(dataBaru(i), bobotTerbaik) Console.Write(output.ToString("F4") & " ") If output <= 0.5 Then Console.Write("-> Ditolak ") Else Console.Write("-> Diterima") End If Console.WriteLine("") Next
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) 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.
maaf mau tanya sebeumnya untuk nilai bobot didapatnya dari mana yaa, terimakasih