if tbl_nonFuzzy == training_noFuzzy
sQuery = string
.Formatinsert into training_+variabel1+ + karakter,_SC,_C,_S,_L,_SL,Target+
values{0},{1},{2},{3},{4},{5},{6};, karakter[c],varFuzzy[c,0],varFuzzy[c,1],varFuzzy[c,2],varFuzzy[c,3
],varFuzzy[c,4],target[c];
else sQuery =
string .Formatinsert into validasi_+variabel1+ +
karakter,_SC,_C,_S,_L,_SL+ values{0},{1},{2},{3},{4},{5};,
karakter[c],varFuzzy[c,0],varFuzzy[c,1],varFuzzy[c,2],varFuzzy[c,3 ],varFuzzy[c,4];
try {
Cursor.Current = Cursors.WaitCursor; eksekusi data insert
OleDbConnection conn = new
OleDbConnectionsConn; OleDbCommand cmd =
new OleDbCommandsQuery,conn;
conn.Open; cmd.ExecuteNonQuery;
conn.Close; Cursor.Current = Cursors.Default;
} …
4.3.2.2. Fungsi Jaringan Syaraf Tiruan
Arsitektur Jaringan Syaraf Tiruan yang digunakan adalah sebagai berikut. 1. Masing-masing variabel d, i dan T mempunyai JST Propagasi balik dengan data
bobot masing-masing dan keluaran masing-masing. 2. Lapisan input masing-masing variabel ada 5 unit sel berdasarkan kelas Fuzzy
berturut untuk _SC, _C, _S, _L dan _SL. 3. Lapisan antara hidden layer mempunyai 3 unit sel H= I+O2.
4. Lapisan output mempunyai 1 unit sel. 5. Nilai masukan tiap sel berkisar 0 hingga 1, maka keluaran bernilai 0 hingga 1.
Ini disesuaikan dengan karakterisktik fungsi sigmoid yang dipakai yakni berkisar 0 hingga 1.
6. Fungsi Sigmoid yang digunakan dalam kode sebagai berikut.
private float
activation_function float
sum {
return float
11 + Math.Exp-betasum;}
Dengan nilai beta sama dengan 1
const float
beta = 1.0f;
7. Laju pembelajaran eta sebesar 0.1 dan jumlah epoch yang digunakan adalah 1000 untuk tiap model data pelatihan A dan B untuk tiap pasangan karakter nya.
8. Inisialisasi bobot awal dalam fungsi random dengan nilai -1 hingga 1. 9. Bias tidak digunakan karena bersifat pilihan Freeman, 1992, p.105.
Setengah dari jumlah kumulatif dari kesalahan yang dihasilkan oleh tiap pola pelatihan dinyatakan dalam variabel errore[e] dengan e menunjukkan urutan epoch.
Sedangkan errrord[d] menunjukkan kesalahan dari tiap pola pelatihan dengan d menunjukkan urutan pola pelatihan. Errord[d] diperoleh dari kuadrat selisih dari nilai
target pelatihan dengan error yang dihasilkan. Ini dijelaskan dalam kutipan kode sebagai berikut.
errord[d] = float
errord[d] + Math.Powtarget[k]- outputout[k],2;
…. errord[d] = errord[d]2;
errore[e] = errore[e] + errord[d];
Struktur JST yang digunakan dijelaskan dalam gambar sebagai berikut.
Gambar 29 Struktur Jaringan Syaraf Tiruan untuk Variabel d, i, dan T
Tiap variabel d, i dan T mempunyai bobot JST masing-masing dengan arsitektur yang berdiri sendiri. Tiap JST memberikan nilai output 0 hingga 1 sesuai dengan data
pelatihan yang digunakan saat proses pembelajaran. Tiap-tiap nilai output digunakan dalam proses statistik untuk melihat keseluruhan persentase tiap nilai dalam FRR
atau FAR dalam analisis data penelitian ini. Arsitektur JST yang berdiri sendiri ini dapat dicapai dengan variabel berstruktur array sederhana dua dimensi sebagai berikut.
float [,] neuronIH =
new float
[INP,HDN]; float
[,] neuronHO = new
float [HDN,OUT];
NeuronIH berisi data bobot koneksi lapisan input dengan lapisan antara hidden dan
NeuronHO berisi data bobot koneksi lapisan antara dengan lapisan output. Lapisan
input mempunyai 5 sel, lapisan tengah mempunyai 3 sel dan lapisan output mempunyai 1 sel.
Untuk perhitungan tiap variabel d, I dan T dilakukan dengan memanggil ke mbali data yang bersesuaian dari tiap tabel basis data lampiran 7 untuk disimpan ke struktur
array diatas. Ini dijelaskan dalam kutipan kode sebagai berikut.
string [] variabel = {d,i,T};
Variabel ini dipanggil setiap kali ada proses loop :
for short
v=0;vVAR;v++ {
tbl_variabel = variabel[v]; …
Nilai tbl_variabel tersebut diteruskan ke variabel string sQuery yang dijalankan oleh OleDbCommand cmd
. Ini dijelaskan dalam kutipan kode sebagai berikut.
private void
load_wg_toann {
Masukkan data bobot ke JST sQuery = select from bobot_+tbl_variabel+tbl_bobot;
… OleDbConnection conn =
new OleDbConnectionsConn;
OleDbCommand cmd = new
OleDbCommandsQuery,conn; conn.Open;
OleDbDataReader DataDB = cmd.ExecuteReader; while
DataDB.Read {
for short
i = 0; iINP;i++ {
for short
j=0; jHDN;j++ {
neuronIH[i,j] = Convert.ToSingleDataDB.GetValue2+j+iHDN.ToString;
} }
for short
j = 0; jHDN;j++ {
for short
k=0; kOUT;k++ {
neuronHO[j,k] = Convert.ToSingleDataDB.GetValue2+INPHDN+k+jOUT.ToString;
…
Keseluruhan proses pelatihan JST dilakukan oleh event private voi d btntraining_Clickobject sender, System.EventArgs e
sebagai berikut.
ANN_init; input_toann
true ;
backpropagate_train;
ANN_init adalah fungsi untuk melakukan inisialisasi bilangan random -1
hingga 1 ke nilai bobot sebagai nilai awal dalam kutipan kode sebagai berikut.
const float
R_MIN = -1.0f; const
float R_MAX = 1.0f;
… private
void ANN_init
{ for
short i = 0; iINP;i++
{ for
short j=0; jHDN;j++
{ neuronIH[i,j] = R_MIN +
float rand.Next10001000fR_MAX-R_MIN;
} }
for short
j = 0; jHDN;j++ {
for short
k=0; kOUT;k++ {
neuronHO[j,k] = R_MIN + float
rand.Next10001000fR_MAX-R_MIN; …
Proses membaca data input saat pelatihan ke dalam JST dilakukan oleh fungsi input_toannbool training
dengan nilai training = true. Nilai training = true bertujuan untuk memberikan tanda flag bahwa tabel yang diambil adalah tabel training_ bukan
tabel validasi_. Penjelasan dalam kutipan kode sebagai berikut.
private void
input_toann bool
training {
inisialisasi data training if
training sQuery = select from validasi_+tbl_variabel+tbl_name;
else sQuery = select from training_+tbl_variabel+tbl_name;
try {
Cursor.Current = Cursors.WaitCursor; eksekusi data
OleDbConnection conn = new
OleDbConnectionsConn; OleDbCommand cmd =
new OleDbCommandsQuery,conn;
short counterd = 0;
conn.Open; OleDbDataReader DataDB = cmd.ExecuteReader;
… while
DataDB.Read {
lvItem = listView1.Items.AddDataDB.GetValue0.ToString; indeksout[counterd] =
int DataDB.GetValue0;
lvItem.SubItems.AddDataDB.GetValue1.ToString; for
short i = 0;i INP;i++
{ lvItem.SubItems.AddDataDB.GetValue2+i.ToString;
inputtr[counterd,i] = Convert.ToSingleDataDB.GetValue2+i.ToString;
} if
training {
for short
k = 0;k OUT;k++ lvItem.SubItems.AddDataDB.GetValueINP+2+k.ToString;
targettr[counterd,k] = Convert.ToSingleDataDB.GetValueINP+2+k.ToString;
} }
counterd++; }
DataDB.Close; conn.Close;
label1.Text=counterd.ToString; …
Proses pelatihan JST Propagasi balik dilakukan oleh fungsi backpropagate_train dengan proses kerja sebagai berikut.
1. Deklarasi array yang digunakan, sebagai berikut.
float [] errore=
new float
[epoch]; float
[] errord= new
float [counterd];
float [] inputout =
new float
[INP]; float
[] hiddenout = new
float [HDN];
float [] hiddenerr =
new float
[HDN]; float
[] outputout = new
float [OUT];
float [] outputerr =
new float
[OUT]; float
[] target = new
float [OUT];
2. Proses pemasukan data dilakukan untuk setiap kali pengulangan e sampai dengan jumlah epoch dan dilakukan untuk setiap kali pengulangan d sampai
dengan jumlah seluruh pola pelatihan, maka dilakukan pemasukan input array ke input JST dan target array ke target JST.
for int
e=0; e epoch;e++ {
errore[e] = 0; lblepoch.Text = e.ToString;
lblepoch.Refresh;
for short
d=0; d counterd ;d++ {
lvItem2 = listView2.Items.Addindeksout[d].ToString; errord[d] = 0;
for short
i=0;iINP;i++ {
inputout[i] = inputtr[d,i]; }
for short
k=0;kOUT;k++ {
target[k] = targettr[d,k]; }
3. Proses propagasi maju meliputi proses penjumlahan setiap bobot dikalikan nilai input yang bersesuaian di lapisan input dan hasilnya diberikan ke dalam fungsi
aktivasi sigmoid dan diteruskan sebagai input sel pada lapisan antara. Proses seterusnya yang sama dilakukan untuk lapisan antara dengan lapisan output.
for short
j=0;jHDN;j++ {
float sum =0;
for short
i=0;iINP;i++ {
sum = sum + inputout[i]neuronIH[i,j]; }
if bias ==
true sum = sum + bias_unit;
hiddenout[j] = activation_functionsum; lvItem2.SubItems.Addhiddenout[j].ToString;
} for
short k=0;kOUT;k++
{ float
sum =0f; for
short j=0;jHDN;j++
{ sum = sum + hiddenout[j]neuronHO[j,k];
} if
bias == true
sum = sum + bias_unit; outputout[k] = activation_functionsum;
lvItem2.SubItems.Addoutputout[k].ToString;
4. Proses penghitungan kesalahan output terhadap target dengan menggunakan turunan dari fungsi aktivasi sigmoid sebagai berikut.
outputerr[k] = outputout[k]1-outputout[k]target[k]- outputout[k];
5. Proses kumulatif menghitung kesalahan output terhadap target sebagai kesalahan keseluruhan pola sebagai berikut.
errord[d] = float
errord[d] + Math.Powtarget[k]- outputout[k],2;
6. Proses propagasi kesalahan balik adalah proses dengan nilai kesalahan pada proses no. 4 di-propagasi-balikkan ke lapisan antara untuk menghitung nilai
kesalahan pada lapisan antara, sebagai berikut.
error dari Hidden Unit for
short j=0;jHDN;j++
{ hiddenerr[j] = 0;
for short
k=0;kOUT;k++ {
hiddenerr[j] = hiddenerr[j] + outputerr[k]neuronHO[j,k]; }
hiddenerr[j] = hiddenerr[j]hiddenout[j]1-hiddenout[j]; …
7. Proses penyesuaian bobot di tiap unit sel lapisan antara dan lapisan output berdasarkan nilai kesalahan pada no. 4 dan no. 6 sesuai dengan laju
pembelajaran eta yang telah ditetapkan sebagai berikut.
Update Bobot Output Unit for
short j=0;jHDN;j++
{ for
short k=0;kOUT;k++
{ neuronHO[j,k]= neuronHO[j,k]+etaoutputerr[k]hiddenout[j];
} }
Update Bobot Hidden Unit for
short i=0;iINP;i++
{ for
short j=0;jHDN;j++
{ neuronIH[i,j]= neuronIH[i,j]+etahiddenerr[j]inputout[i];
} }
8. Proses kumulatif keseluruhan kesalahan pola pelatihan dan separuh nilainya adalah kesalahan kumulatif untuk tiap perulangan epoch dalam kode sebagai
berikut.
errord[d] = errord[d]2; errore[e] = errore[e] + errord[d];
9. Setelah training dilakukan sebanyak jumlah epoch, maka bobot akhir disimpan ke dalam tabel bobot_ untuk tiap pasangan karakter untuk tiap variabelnya.
Penyimpanan dilakukan oleh fungsi save_weight dengan melakukan perintah insert record
ke dalam tabel bobot_. Penjelasan dalam kutipan kode sebagai berikut.
private void
save_weight {
inisialisasi data bobot
sQuery = string
.Formatinsert into bobot_+tbl_variabel+ karakter,WIH00,WIH01,WIH02,+
WIH10,WIH11,WIH12,+ WIH20,WIH21,WIH22,+
WIH30,WIH31,WIH32,+ WIH40,WIH41,WIH42,+
WHO00,WHO10,WHO20+ values {0},{1},{2},{3},+
{4},{5},{6},+ {7},{8},{9},+
{10},{11},{12},+ {13},{14},{15},+
{16},{17},{18};, pasangan_kar,neuronIH[0,0],neuronIH[0,1],neuronIH[0,2]
, neuronIH[1,0],neuronIH[1,1],neuronIH[1,2],
neuronIH[2,0],neuronIH[2,1],neuronIH[2,2], neuronIH[3,0],neuronIH[3,1],neuronIH[3,2],
neuronIH[4,0],neuronIH[4,1],neuronIH[4,2], neuronHO[0,0],neuronHO[1,0],neuronHO[2,0];
... conn.Open;
cmd.ExecuteNonQuery; conn.Close;
Proses verifikasi JST dilakukan oleh event private void btn_JSTstart_Clickobject sender, System.EventArgs e
dalam penjelasan kode sebagai berikut.
private void
btn_JSTstart_Click object
sender, System.EventArgs e {
… tbl_bobot =
string .Format where karakter = {0} and indeks =
{1},pasangan_kar,textBox2.Text; …
load_wg_toann; …
input_toann false
; propagate_output;
…
Fungsi load_wg_toann melakukan pembacaan nilai bobot dari basis data ke dalam JST. Pemilihan record ditentukan oleh perintah query sQuery = select from
bobot_+tbl_variabel+tbl_bobot dengan nilai tbl_variabel dan tbl_bobot berupa string
yang diperoleh dari tbl_bobot = string.Format where karakter = {0} and indeks = {1},pasangan_kar,textBox2.Text
. Bobot yang dipilih berasal dari pasangan karakter yang sama dan bisa dipilih berdasarkan nomor indeks jika data record bobot dari
pasangan karakter lebih dari satu. Penjelasan dalam kutipan kode sebagai berikut.
private void
load_wg_toann {
Masukkan data bobot ke JST
sQuery = select from bobot_+tbl_variabel+tbl_bobot; …
conn.Open; OleDbDataReader DataDB = cmd.ExecuteReader;
while DataDB.Read
{ for
short i = 0; iINP;i++
{ for
short j=0; jHDN;j++
{ neuronIH[i,j] =
Convert.ToSingleDataDB.GetValue2+j+iHDN.ToString; }
}
for short
j = 0; jHDN;j++ {
for short
k=0; kOUT;k++ {
neuronHO[j,k] = Convert.ToSingleDataDB.GetValue2+INPHDN+k+jOUT.ToString;
…
Data bobot dan data input dari tabel validasi dimasukkan ke dalam JST. Perhitungan output dilakukan oleh fungsi propagate_output dalam penjelasan kode
sebagai berikut.
private void
propagate_output {
prepare display output JST string
logfile; if
lbl_browser_lain.Text == {
logfile= textBox1.Text+_output_+label5.Text+_+tbl_variabel+.log;
}
else {
logfile= textBox1.Text+_output_+label5.Text+_+tbl_variabel+_val_lain.l
og; }
FileStream s=
new FileStreamlogfile,FileMode.CreateNew;
StreamWriter w = new
StreamWriters; if
lbl_browser_lain.Text = w.WriteLinelbl_browser_lain.Text;
initListView_output; ListViewItem lvItem2 =
new ListViewItem;
short counterd = Convert.ToInt16label1.Text;
float [] inputout =
new float
[INP]; float
[] hiddenout = new
float [HDN];
float [] outputout =
new float
[OUT]; for
short d=0; d counterd ;d++
{ lvItem2 = listView2.Items.Addindeksout[d].ToString;
for short
i=0;iINP;i++ {
inputout[i] = inputtr[d,i]; }
for short
j=0;jHDN;j++ {
float sum =0f;
for short
i=0;iINP;i++ {
sum = sum + inputout[i]neuronIH[i,j]; }
if bias ==
true sum = sum + bias_unit;
hiddenout[j] = activation_functionsum; lvItem2.SubItems.Addhiddenout[j].ToString;
} for
short k=0;kOUT;k++
{ float
sum =0f; for
short j=0;jHDN;j++
{ sum = sum + hiddenout[j]neuronHO[j,k];
} if
bias == true
sum = sum + bias_unit; outputout[k] = activation_functionsum;
w.WriteLined.ToString+|+k.ToString+|+outputout[k].T oString;
lvItem2.SubItems.Addoutputout[k].ToString; }
} w.Close;
}
Hasil yang diperoleh berupa file log teks yang akan digunakan dalam proses analisis data secara manual dengan menggunakan MS Excell dan Text Analysis Tool.
4.3.2.3 Uji Aplikasi Analisis Data Jaringan Syaraf Tiruan