Klasifikasi (Season 2) Nearest Neighbor Pengenalan Pola Materi 3 Eko Prasetyo Teknik Informatika UPN “Veteran” Jawa Timur 2012
K-Nearest Neighbor (K-NN)
K-Nearest Neighbor Algoritma yang melakukan klasifikasi berdasarkan kedekatan lokasi (jarak) suatu data dengan data yang lain. Prinsip sederhana yang diadopsi oleh algoritma K- NN adalah: “Jika suatu hewan berjalan seperti bebek, bersuara kwek-kwek seperti bebek, dan penampilannya seperti bebek, maka hewan itu mungkin bebek”. Pada algoritma K-NN, data berdimensi q, dapat dihitung jarak dari data tersebut ke data yang lain, Nilai jarak ini yang digunakan sebagai nilai kedekatan/kemiripan antara data uji dengan data latih.
K-Nearest Neighbor 1 tetangga terdekat (1-NN)
Algoritma K-NN z = (x’,y’), adalah data uji dengan vektor x’ dan label kelas y’ yang belum diketahui Hitung jarak d(x’,x), jarak diantara data uji z ke setiap vektor data latih, simpan dalam D Pilih Dz D, yaitu K tetangga terdekat dari z
Contoh Data latih Data X Y Kelas 1 2 3 4 5 7 6 8 9 10 11 12 13 14 15 16 17 Data uji adalah data (3,4), fitur X=3, Y=4. Akan dilakukan prediksi, masuk dalam kelas yang manakah seharusnya ? Gunakan jarak Euclidean !
Jarak data uji ke data latih Prediksi dengan K-NN Jarak data uji (3,4) ke 17 data latih Nomor data x y Kelas asli Jarak data uji ke data latih 1-NN 3-NN 7-NN 1 3.6055 --- 2 3.1622 3 4 NN 5 7 4.4721 6 2.2360 1.4142 8 9 10 11 12 13 2.8284 14 15 16 17
Jarak data uji ke data latih Prediksi dengan K-NN Jarak data uji (3,4) ke 17 data latih Nomor data x y Kelas asli Jarak data uji ke data latih 1-NN 3-NN 7-NN 9 4 2 1 NN 7 3 1.414 --- 6 2.236 8 5 11 14 13 2.828 15 10 3.162 12 16 17 3.606 4.472
Prediksi dengan K-NN Untuk K=1 Data latih yang terdekat adalah data nomor 9 (4,4) dengan kelas 1, maka data uji (3,4) diprediksi masuk kelas 1. Untuk K=3 Data latih yang terdekat adalah data nomor 9 (4,4) dengan kelas 1, data nomor 7 (2,3) dan data nomor 4 (3,2) dengan kelas 0, karena kelas 1 berjumlah 1 dan kelas 0 berjumlah 2 (lebih banyak kelas 0 daripada kelas 1) maka data uji (3,4) diprediksi masuk kelas 0. Untuk K=7 Data latih yang terdekat adalah data nomor 8 (5,3), 9 (4,4), 14 (4,6) dengan kelas 1, data nomor 4 (3,2), 6 (1,3), 7 (2,3), dan 11 (1,5) dengan kelas 0, karena kelas 1 berjumlah 3 dan kelas 0 berjumlah 4 (lebih banyak kelas 0 daripada kelas 1) maka data uji (3,4) diprediksi masuk kelas 0.
K-NN di matlab Class = knnclassify(Sample, Training, Group, k, distance, rule) Parameter Keterangan Sample Matrik dimana baris merupakan data, kolom merupakan fitur. Sample merupakan data uji yang akan diklasifikasikan kedalam kelas. Matrik Sample harus mempunyai jumlah kolom (fitur) yang sama dengan matrik Training. Training Matrik yang digunakan untuk mengelompokkan baris didalam matrik Sample. Matrik Traning harus mempunyai jumlah kolom yang sama dengan Sample. Setiap baris dalam matrik Training mempunyai relasi kelas pada baris yang sama pada matrik Group. Group Vektor (matrik 1 kolom) yang setiap barisnya menyatakan kelas dari baris yang sama dalam matrik Training. k Jumlah tetangga terdekat yang digunakan untuk klasifikasi. Nilai defaultnya adalah 1. distance String yang menyatakan metrik jarak yang digunakan untuk mencari tetangga terdekat, pilihannya: ‘euclidean’, jarak Euclidean (default) ‘cityblock’, jarak Manhattan atau jumlah absolut perbedaan nilai antar fitur ‘cosine’, jarak 1 – cos(sudut antara 2 titik) ‘correlation’, jarak 1 – korelasi diantara titik (nilai sekuen) ‘hamming’, jarak prosentase bit yang berbeda (cocok untuk data biner) rule String untuk menetapkan aturan dalam memutuskan bagaimana mengklasifikasikan Sample, pilihannya: ‘nearest’, aturan mayoritas pada titik terdekat (default); ‘random’, aturan mayoritas pada titik secara acak; ‘consensus’, aturan kesepakatan
>> contoh_knn kelas_uji = 2 %Nama file: dataset_buatan.m %x 1 2 3 3 7 1 2 5 3 4 6 1 6 1 4 5 2 4 %y 1 1 1 2 2 3 3 3 4 4 4 5 5 6 6 6 7 7 0.1 0.2 0.1 0.4 0.1 0.2 0.1 0.4 0.1 0.2 0.1 0.4 0.1 0.2 0.1 0.4 0.9 0.8 %kelas 1 1 1 1 2 1 1 2 1 2 2 1 2 1 2 2 2 2 ]; data = data'; %Nama file: contoh_knn.m dataset_buatan idx_latih = [1:8 10:18]; idx_uji = [9]; data_latih = data(idx_latih,1:2); data_uji = data(idx_uji,1:2); kelas_latih = data(idx_latih,3); K = 1; kelas_uji = knnclassify(data_uji, data_latih, kelas_latih, K) >> contoh_knn kelas_uji = 2
Evaluasi K-NN Algoritma yang menggunakan seluruh data latih untuk melakukan proses klasifikasi (complete storage). Mengakibatkan untuk data dalam jumlah yang sangat besar, proses prediksi menjadi sangat lama. Tidak membedakan setiap fitur dengan suatu bobot Pada ANN (Artificial Neural Network) yang berusaha menekan fitur yang tidak punya kontribusi terhadapklasifikasi menjadi 0 pada bagian bobot, NN tidak ada bobot untuk masing-masing fitur. Menyimpan sebagian atau semua data dan hampir tidak ada proses pelatihan, maka K-NN sangat cepat dalam proses training (karena memang tidak ada) tetapi sangat lambat dalam proses prediksi. Hal yang rumit adalah menentukan nilai K yang paling sesuai K-NN pada prinsipnya memilih tetangga terdekat, Parameter jarak juga penting untuk dipertimbangkan sesuai dengan kasus datanya. Euclidean sangat cocok untuk menggunakan jarak terdekat (lurus) antara dua data, tetapi Manhattan sangat robust untuk mendeteksi outlier dalam data.
Fuzzy K-Nearest Neighbor in every Class (FK-NNC)
Framework FK-NNC Diperkenalkan oleh Prasetyo (2012). FK-NNC menggunakan sejumlah K tetangga terdekat pada setiap kelas dari sebuah data uji, bukan K tetangga terdekat seperti pada K- NN dan FK-NN. FK-NNC menggunakan FK-NN sebagai basis kerangka kerja, dimana sebuah data uji mempunyai nilai keanggotaan pada setiap kelas dalam interval [0.1]. Jumlah nilai keanggotaan sebuah data pada semua kelas sama dengan 1 Tanda dot hitam (solid) adalah data uji Tiga tetangga dikelas + dan tiga tetangga dikelas x
Framework FK-NNC – Cont’d Jarak data uji xi ke semua K tetangga dari setiap kelas ke-j dijumlahkan, formula yang digunakan: Nilai m disini merupakan pangkat bobot (weight exponent) seperti pada FK- NN, nilai m > 1. akumulasi jarak data uji xi ke setiap kelas digabungkan, disimbolkan D, formula yang digunakan: Untuk mendapatkan nilai keanggotaan data uji xi pada setiap kelas ke-j (ada C kelas), menggunakan formula: Untuk menentukan kelas hasil prediksi data uji xi, dipilih kelas dengan nilai keanggotaan terbesar dari data xi. Formula yang digunakan: (4) (5) (6) (7)
Algoritma FK-NNC Cari K tetangga terdekat pada setiap kelas, menggunakan formula Hitung S sebagai akumulasi jarak K tetangga pada setiap kelas, menggunakan formula (4) Hitung J sebagai akumulasi semua jarak dari CK tetangga, menggunakan formula (5) Hitung u sebagai nilai keanggotaan data pada setiap kelas, menggunakan formula (6) Pilih nilai keanggotaan terbesar menggunakan formula (7), kelas dengan nilai keanggotaan terbesar menjadi kelas hasil prediksi untuk data uji tersebut.
Contoh Data latih Data X Y Kelas 1 2 3 4 5 7 6 8 9 10 11 12 13 14 15 16 17 Data uji adalah data (3,4), fitur X=3, Y=4. Akan dilakukan prediksi, masuk dalam kelas yang manakah seharusnya ? Gunakan m=2, dan jarak Euclidean !
Jarak data uji ke data latih Prediksi dengan K-NN Jarak data uji (3,4) ke 17 data latih Setelah diurutkan Nomor data x y Kelas asli Jarak data uji ke data latih 1 3.6055 2 3.1622 3 4 5 7 4.4721 6 2.2360 1.4142 8 9 10 11 12 13 2.8284 14 15 16 17 Nomor data x y Kelas asli Jarak data uji ke data latih 7 2 3 1 1.414 4 6 2.236 11 5 13 2.828 3.162 3.606 9 8 14 15 10 12 16 17 4.472
Perhitungan jarak FK-NNC pada data latih No. data x y Kelas asli d K=1 d-2 7 2 3 1.414 NN 0.5002 4 - 6 1 2.236 11 5 13 2.828 3.162 3.606 9 1.0000 8 14 15 10 12 16 17 4.472 S0 S1 D 1.5002 K=3 d-2 K=5 K=7 NN 0.5002 0.2500 0.2000 - 0.1250 0.1111 0.1000 1.0000 0.9502 1.2752 1.4863 1.4000 1.6362 1.8362 2.3502 2.9114 3.3226
Hasil peritungan nilai keanggotaan pada kedua kelas sebagai berikut: Untuk K=1: , Karena u1 > u0, maka data uji diprediksi masuk ke kelas 1 Untuk K=3: , Karena u1 > u0, maka data uji diprediksi masuk ke kelas 1 Untuk K=5: , Karena u1 > u0, maka data uji diprediksi masuk ke kelas 1 Untuk K=7: , Karena u1 > u0, maka data uji diprediksi masuk ke kelas 1
FK-NNC di matlab [prediksi,keanggotaan] = fknnc(data, labels, test, K) Parameter Keterangan data Matrik data latih yang digunakan, berukuran MN, dimana M adalah jumlah data latih, N adalah dimensi data. Baris menyatakan data, kolom menyatakan fitur. labels Matrik berukuran M1 yang menyatakan kelas data latih. Setiap barisnya menyatakan kelas pada baris matrik data. Nilai untuk label kelas adalah (1, 2, …, C) untuk setiap data. Tidak diperbolehkan kelas dengan label 0. test Matrik SN yang menyatakan data uji. S adalah jumlah data uji. Jumlah kolom (fitur) yaitu N harus sama dengan jumlah fitur (kolom matrik data. K Jumlah tetangga terdekat. prediksi Matrik S1 yang menyatakan kelas hasil prediksi untuk setiap data uji dalam matrik test. keanggotaan Matrik SC yang menyatakan nilai keanggotaan matrik data uji ke setiap kelas. C adalah jumlah kelas.
Contoh %Nama file: contoh_fknnc.m dataset_buatan idx_latih = [1:8 10:18]; idx_uji = [9]; data_latih = data(idx_latih,1:3); data_uji = data(idx_uji,1:3); kelas_latih = data(idx_latih,4); kelas_uji_asli = data(idx_uji,4); K = 3; [y,memberships] = fknnc(data_latih, kelas_latih, data_uji, K); display('Kelas hasil prediksi');y display('Nilai keanggotaan'); display('Kelas 1 | Kelas 2');memberships >> contoh_fknnc Kelas hasil prediksi y = 2 Nilai keanggotaan Kelas 1 | Kelas 2 memberships = 0.4043 0.5957
To Be Continued … Klasifikasi (Season 3) ANY QUESTION ?