Langsung ke konten utama

Data Analysis Series: Classifier using K-Nearest Neighbors

Posting kali ini saya akan membahas tentang salah satu classifier yang cukup banyak digunakan karena kesederhanaan komputasinya, yaitu K-Nearest Neighbors. Jika sebelumnya anda pernah membaca postingan saya sebelumnya tentang clustering menggunakan DBScan, algoritma ini sebenarnya cukup mirip dengan DBScan, yaitu dengan memperhitungkan seberapa banyak tetangga sekitar yang memiliki similarity, yang ditentukan dengan perhitungan jarak.

Heuristic

Berikut strategi pendekatan untuk melakukan implementasi dari K-NN:
  1. Untuk tutorial kali ini (lagi-lagi) saya menggunakan data Iris.
  2. Asumsi terdapat n baris data yang terbagi atas c kelas target.
  3. Gunakan sample salah satu data untuk mengukur akurasi dari model
  4. Untuk setiap itemset dari dataset Iris, ukur jarak menggunakan Euclidian Distance
  5. Simpan hasil pengukuran jarak poin no 4
  6. Lakukan sorting berdasarkan jarak terkecil.
  7. Ambil top k teratas jarak terkecil.
  8. Evaluasi hasil top k, kelas terbanyak yang ada di dalam top k, merupakan hasil prediksi dari model.

Implementasi

Berikut adalah implementasi model K-NN di python. Untuk evaluasi model, dilakukan iterasi sebanyak 100 kali, untuk setiap itemset pada setiap kelas. Sehingga total iterasi sebanyak 150x100=15000. Kemudian, untuk asumsi, diambil nilai k=30, artinya hasil prediksi mengambil 30 itemset yang mempunyai jarak terkecil dari sample.


Membaca itemset dari file Iris.

f = open('iris','r')
data = f.read().split('\n')
f.close()


Mengambil sample 20 itemset secara random, untuk setiap kelas.

[reduced_datasets.append(d) for d in (datasets[0:50][np.random.choice(50, 20, replace=False), :])]
[reduced_datasets.append(d) for d in (datasets[50:100][np.random.choice(50, 20, replace=False), :])]
[reduced_datasets.append(d) for d in (datasets[100:150][np.random.choice(50, 20, replace=False), :])]

Ukur jarak dari sample yang diambil, simpan hasil pengukurannya, kemudian lakukan sorting dari yang terkecil ke yang terbesar.

for itemset in reduced_datasets:
	ed = eucldian_distance(sample, itemset)			
	result.append([ed, itemset[4]])

	resultset = np.array(result)
	top_k = resultset[resultset[:,0].argsort()][:top_k]


Lakukan perbandingan antara kelas aktual, dengan kelas hasil prediksi.

if predicted_class == true_class:
	TRUE +=1
	total_true +=1
	print('TRUE')
else:
	FALSE +=1
	total_false +=1
	print('FALSE')

Presentasikan hasil evaluasi.

print(total_true/(epoch*number_of_data))

Summary

Dari hasil evaluasi, hasil yang didapat 100 persen sample itemset berhasil diprediksi. Hasil ini dipengaruhi oleh jumlah k yang akan diambil sebagai dasar pengambilan hasil perhitungan teratas. Sebagai contoh, apabila diambil nilai k = 20, hanya 53 persen sample itemset berhasil diprediksi. Faktor lain yang mempengaruhi adalah kualitas dataset. Apabila dataset sudah terpisah dengan baik, seperti Iris, maka tentu lebih mudah melakukan klasifikasi.

Komentar

Postingan populer dari blog ini

Berkenalan dengan Laravel

Cukup disayangkan, Codeigniter sudah sampai ke tahap "penguburan" - paling tidak ini klaim dari Ellis Lab- dan ini cukup mengusik kenyamanan saya untuk menggunakan CI. Padahal juga sesuai dengan pengakuan rekan-rekan web developer, CI menurut saya cukup mudah dan powerful untuk digunakan dalam membangun sebuah web apps, dan terbukti juga CI sempat jadi trendsetter untuk framework PHP. Saya jadi penasaran framework PHP apa yang jadi the next PHP Framework star setelah CI, setelah menggali informasi beberapa kali, saya temukan Laravel saat ini banyak jadi batu loncatan developer CI. Alasannya sederhana, Laravel banyak kemiripan dengan CI. Dari analisa Google Trends juga terlihat kepopuleran Laravel saat tulisan ini dibuat juga menanjak meskipun masih kalah populer dengan CI (cukup mengherankan CI masih memimpin untuk masalah kepopuleran). Jadi langsung saja saya mencoba mengeksplorasi barang baru ini. Berikut langkah-langkahnya: 0. Install curl 1. Install composer: ...

Perbandingan Algoritme Dynamic Programming, Greedy, dan Backtrack Programming.

Sebetulnya posting ini bisa dibilang sudah kadaluarsa.  But, Better be late than never at all, right mate ? Ok, sebetulnya(lagi) Saya ingin menulis ulang semua yang ada di tugas semester 1 mata kuliah Analisa Algoritme, namun setelah dipikir-pikir lagi rasa-rasanya akan mubadzir, jadi di sini akan Saya gambarkan ulang secara ringkas saja apa perbedaan Dynamic Programming, Greedy dan Backtrack. Sebelum menyentuh ke dalam algoritmenya, Kita lihat terlebih dahulu kasus permasalahannya. Tentu belajar akan lebih mudah apabila tidak hanya dengan mempelajari teorinya saja. Umumnya orang akan lebih semangat apabila ada kasus menarik yang dipelajari. Tentang Knapsack Knapsack sendiri merupakan permasalahan pencuri yang ingin mencuri barang dengan cara memasukkan sebanyak-banyaknya dan seberharga-berharganya barang yang ada ( of course, its a theft ), sejumlah wadah yang pencuri tersebut punya. Diharapkan dengan menerapkan beberapa algoritme ini pencuri dapat meraup keuntungan sebanyak...

Data Analysis Series: Perceptron - Basic Artificial Neural Network

Pendahuluan Pada posting berikut ini saya akan menyampaikan materi tentang (Artificial) Neural Network. Algoritme yang satu ini terinspirasi dari cara kerja sel otak dalam memproses informasi. Sedikit di bawah ini pertama-tama akan saya sampaikam penjelasan bagaimana sel otak bekerja, untuk mempermudah pemahaman bagaimana ANN dapat terinspirasi. Sel Otak (Sumber:  www.wealltest.com ) Seperti yang kita ketahui, otak terdiri atas milyaran sel. Tiap-tiap sel tersebut terbagi atas tiga bagian, yaitu Dendrites, atau receptor, bagian yang menerima sinyal/stimulasi dari sel-sel otak yang lain. Sinyal/stimulasi yang masuk ke dendrite tersebut awalnya berasal dari indra perangsang kita, seperti mata, kulit, telinga, dan lidah. Dari dendrite, sinyal kemudian diteruskan melalui Axon, semacam pipa penghubung, yang mentransmisikan sinyal dari dendrite, untuk ditransmisikan ulang ke sel lain melalui Synapse. Bisa dikatakan, Synapse ini berfungsi sebagai akumulator untuk dari info...