Algoritma Decision Tree Analisis Coding 2.1.1.

Hasilf ; save hasilPre-processing.mat , Hasilf , Training1 , Testing1 , Training2 , Testing2 , Training3 , Testing3 ; Kode Program 4. 13 Save Data

2.1.2. Algoritma Decision Tree

Pengujian dilakukan dengan membuat pohon keputusan atau tree untuk setiap proses training. Untuk melakukan klasifikasi, langkah pertama adalah memanggil dataset dari pre-processing dan ekstraksi ciri yang telah dipartisi yang disimpan dalam format.mat dengan function load dari matlab. Pilih data training yang digunakan dalam proses klasifikasi. Pisah data training menjadi dua bagian yaitu data atribut dan data kelas. Beri nama untuk setiap atribut sesuai dengan panjang data. Untuk membuat tree dibutuhkan function bulid_tree.m dengan inputan berupa kelas, atribut, dan nama atribut, yang ditunjukan pada source code berikut ini. load hasilPre-processing.mat ; Data = Training3; We want to predict the first column... Y = Data:,1; ...based on the others X = Data:,2:end; cols = { att1 , att2 , att3 , att4 , att5 , att6 , att7 , att8 , att9 , att10 , att11 , att12 , a tt13 , att14 , att15 , att16 , att17 , att18 , ... att19 , att20 , att21 , att22 , att23 , att24 , att25 , att26 , att27 }; t = build_treeX,Y,cols; Kode Program 4. 14 Build decision tree Langkah pertama yang dilakukan dalam build tree adalah membuat root kosong lalu buat cabang pada root, yang ditunjukan pada source code berikut ini. [inds p labels bVal coloum] = split_nodeX, Y, inds, p,labels, cols, 1, bVal,coloum; Kode Program 4. 15 Membuat root kosong Untuk membuat cabang pada root, langkah pertama adalah cek nilai Y kelas yang memiliki nilai unique dan cek nilai X atribut pada baris yang memiliki nilai unique. Looping setiap atribut untuk mendapat nilai information gain terbaik dengan cara yaitu untuk setiap nilai yang unique dipisahakan jika nilai atribut pada saat itu tidak bisa membuat cabang jumlah nilai unique 2 maka atribut tersebut akan dilewati. Untuk menghitung information gain perlu mencari nilai biner dari setiap nilai split. Hitung information gain dengan menghitung nilai entropy semua data pada komposisi kelas dan nilai entropy kondisi kelas pada setiap nilai atribut, jika nilai entropy sudah dihitung maka nilai Informatin gain merupakan hasil dari entropy semua data terhadap kompisis kelas dikurangi entropy kondisi kelas pada setiap nilai atribut. Cari information gain terbaik pada nilai atribut yang unique lalu proses information gain terbesar antar atribut untuk mendapatkan nilai pemisah, yang ditampilkan pada source code berikut Function [inds p labels bVal coloum] = split_nodeX, Y, inds, p, labels, cols, node, bVal, coloum Recursively splits nodes based on information gain Check if the current leaf is consistent if numeluniqueYinds{node} == 1 return ; end if sizeuniqueXinds{node},:, rows ,1 == 1 return ; end best_ig = -inf; best information gain best_feature = 0; best feature to split on best_val = 0; best value to split the best feature on curr_X = Xinds{node},:; curr_Y = Yinds{node}; Loop over each feature for i = 1:sizeX,2 feat = curr_X:,i; Deterimine the values to split on vals = uniquefeat; splits = 0.5vals1:end-1 + vals2:end; if numelvals 2 continue end Get binary values for each split value bin_mat = doublerepmatfeat, [1 numelsplits] repmatsplits, [numelfeat 1]; Compute the information gains H = entcurr_Y; H_cond = zeros1, sizebin_mat,2; for j = 1:sizebin_mat,2 H_condj = cond_entcurr_Y, bin_mat:,j; end IG = H - H_cond; Find the best split [val ind] = maxIG; if val best_ig best_ig = val; best_feature = i; best_val = splitsind; end end Kode Program 4. 16 Split node Hal yang pertama dilakukan dalam membuat node adalah siapkan cabang terlebih dahulu, lalu cari nilai atribut terbaik pada saat itu yang lebih kecil dari nilai pemisah terbaik, cabang kiri untuk cabang yang memiliki nilai lebih kecil sedangkan cabang kanan untuk cabang yang memiliki nilai yang lebih besar. Beri label untuk cabang kiri dan kanan berupa nama atribut dan nilai terbaik dari pemisah terbaik. Ulangi untuk membuat node baru yaitu mencari split node Kode Program 4. 17. Berikut ini source code yang digunakan. Split the current node into two nodes feat = curr_X:,best_feature; feat = feat best_val; inds = [inds; inds{node}feat; inds{node}~feat]; inds{node} = []; p = [p; node; node]; labels = [labels; sprintf s 2.2f , cols{best_feature}, best_val; sprintf s = 2.2f , cols{best_feature}, best_val]; bVal = [bVal; best_val; best_val]; coloum = [coloum;best_feature;best_feature]; Recurse on newly-create nodes n = numelp-2; [inds p labels bVal coloum] = split_nodeX, Y, inds, p, labels, cols, n+1, bVal,coloum; [inds p labels bVal coloum] = split_nodeX, Y, inds, p, labels, cols, n+2, bVal,coloum; Kode Program 4. 18 Membuat cabang Tree yang sudah terbentuk ditampikan dalam sebuah figure baru terlepas dari halaman tree agar tree dapat lebih mudah dilihat. Untuk menampilkan tree menggunakan treeplot dan treelayout. Treeplot digunakan untuk menampilkan kerangka tree berupa node-node dan cabang, sedangkan treelayout untuk membuat koordinasi dari tree. Setelah tree ditampilkan niali dari tree akan disimpan sebagai model utuk proses akurasi. Berikut ini source code yang digunakan. h1 = figure; Display the tree treeplott.p; title Decision tree Visual Tree ; [xs,ys,h,s] = treelayoutt.p; for i = 2:numelt.p Get my coordinate my_x = xsi; my_y = ysi; Get parent coordinate parent_x = xst.pi; parent_y = yst.pi; Calculate weight coordinate midpoint mid_x = my_x + parent_x2; mid_y = my_y + parent_y2; Edge label textmid_x,mid_y,t.labels{i-1}; Leaf label if ~isemptyt.inds{i} val = Yt.inds{i}; if numeluniqueval==1 textmy_x, my_y, sprintf y=2.2f\nn=d , val1, numelval; else inconsistent data textmy_x, my_y, sprintf y=2.2f\nn=d , modeval, numelval; end end end save tree.mat , t ; Kode Program 4. 19 Menampilkan Tree

2.1.3. Akurasi Tree