Kecerdasan Buatan

Tugas 2: k-Nearest Neighbours & k-Means

Mekanisme

Anda hanya diwajibkan untuk mengumpulkan file ini saja ke uploader yang disediakan di http://elearning2.uai.ac.id/. Ganti nama file ini saat pengumpulan menjadi tugas2_NIM.ipynb.

Keterlambatan: Pengumpulan tugas yang melebihi tenggat yang telah ditentukan tidak akan diterima. Keterlambatan akan berakibat pada nilai nol untuk tugas ini.

Kolaborasi: Anda diperbolehkan untuk berdiskusi dengan teman Anda, tetapi dilarang keras menyalin kode maupun tulisan dari teman Anda.

Petunjuk

Packages yang Anda akan gunakan dalam mengerjakan tugas ini antara lain:

  • matplotlib
  • numpy
  • pandas
  • pillow
  • scipy
  • seaborn

Anda diperbolehkan (jika dirasa perlu) untuk mengimpor modul tambahan untuk tugas ini. Namun, seharusnya modul yang tersedia sudah cukup untuk memenuhi kebutuhan Anda. Untuk kode yang Anda ambil dari sumber lain, cantumkan URL menuju referensi tersebut jika diambil dari internet!

Perhatikan poin untuk tiap soal! Semakin kecil poinnya, berarti kode yang diperlukan untuk menjawab soal tersebut seharusnya semakin sedikit!

NIM:

Nilai akhir: XX/50

Deskripsi Dataset

Pada tugas kali ini, Anda akan melihat penggunaan algoritma yang berbasis pada jarak antarobjek. Anda diberikan dataset berupa gambar angka-angka yang ditulis tangan. Dataset ini adalah versi yang lebih sederhana dari MNIST yang sering digunakan. Ukuran tiap gambar angka dalam dataset ini dalah 8x8 pixels. Deskripsi lengkapnya dapat Anda lihat di sini. Tugas Anda kali ini adalah menerapkan algoritma k-NN dan k-Means untuk melakukan prediksi dan pengelompokan 10 angka tersebut dan mengevaluasi hasilnya.

Mengimpor Modul dan Dataset


In [ ]:
from __future__ import print_function, division # Gunakan print(...) dan bukan print ...
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

from sklearn.datasets import load_digits
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score, confusion_matrix, mean_squared_error
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor

%matplotlib inline

RANDOM_STATE = 1337
np.random.seed(RANDOM_STATE)

1. Eksplorasi Awal Data (10 poin)

Pada bagian ini, Anda diminta untuk mengeksplorasi data latih yang diberikan. Selalu gunakan data ini kecuali diberitahukan sebaliknya.


In [ ]:
X, y = load_digits(return_X_y=True)

Soal 1.1.a (2 poin)

Pisahkan dataset Anda menjadi X_train, X_test, y_train, dan y_test dengan train_test_split(). Pastikan bahwa data uji Anda terdiri dari 30% total data.


In [ ]:

Soal 1.1.b (2 poin)

Tunjukkan jumlah objek untuk masing-masing kelas dari y_train dan y_test dalam bar plot.


In [ ]:

Soal 1.2 (3 poin)

Gambarkan histogram dari pixel ke-0 (pojok kiri atas) dan ke-4. Perbedaan apa yang dapat Anda lihat? Mengapa hasilnya seperti itu?


In [ ]:

Jawaban Anda di sini

Soal 1.3 (3 poin)

Ambil 10 sampel gambar dari X_train, lalu tampilkan gambarnya.


In [ ]:

2. k-Nearest Neighbours (10 poin)

Anda akan melakukan klasifikasi digit tersebut dengan menggunakan algoritma k-NN.

Soal 2.1.a (5 poin)

Dengan k-Nearest Neighbours, klasifikasikan data latih dengan menggunakan cross-validation (cross_val_score()) dan $k \in [1,10]$, lalu gambarkan line plot perubahan akurasi rata-ratanya! Jangan lupa untuk memberikan label pada sumbu-sumbunya!


In [ ]:

Soal 2.1.b (2 poin)

Dari plot tersebut, berapa nilai $k$ yang akan Anda pilih? Mengapa?

Jawaban Anda di sini

Soal 2.1.c (3 poin)

Dari nilai $k$ yang Anda pilih, buatlah heatmap dari confusion matrix yang diperoleh dari klasifikasi data ujinya! Jangan lupa untuk memberikan label untuk masing-masing sumbunya dan menganotasi tiap kotak pada heatmap. Sertakan juga nilai akurasinya.


In [ ]:

Soal 2.2 (2 poin)

Mengapa k-NN disebut sebagai algoritma klasifikasi non-parametrik? Apa yang membedakannya dengan algoritma klasifikasi parametrik?

Jawaban Anda di sini

3. k-NN Regression (10 poin)

Terkadang, gambar yang kita miliki mengalami kerusakan. Salah satu cara untuk memperbaikinya adalah dengan memprediksi pixel yang rusak tersebut dengan pixels yang kita miliki. Untuk memahami kasus ini lebih baik, Anda dapat melihat contohnya di sini.

Soal 3.1 (2 poin)

Anggap saja pixel ke-42 mengalami kerusakan sehingga akan Anda prediksi. Oleh karena itu, Anda akan mencoba melakukan regresi dengan mengambil pixel di kiri dan di atas dari pixel ke-42, i.e. pixel ke-41 dan ke-34. Buatlah data latih dan data uji baru dengan menggunakan ide ini.


In [ ]:

Soal 3.2 (5 poin)

Lakukan cross-validation pada data latih untuk regresi dengan k-NN guna memprediksi nilai pixel ke-42 untuk $k \in [1,10]$ lalu laporkan RMSE-nya dalam bentuk line plot. Apa yang dapat Anda amati?


In [ ]:

Jawaban Anda di sini

Soal 3.3 (3 poin)

Pilih dua nilai $k$ terbaik. Lalu coba lakukan regresi pada data uji yang telah dibuat. Apa pendapat Anda terhadap hasil yang Anda dapatkan ini?


In [ ]:

Jawaban Anda di sini

4. k-Means (20 poin)

Soal 4.1.a (2 poin)

Gunakan KMeans untuk melakukan clustering dengan $k=10$.


In [ ]:

Soal 4.1.b (4 poin)

Dari hasil clustering yang telah Anda lakukan, coba gambarkan centroids-nya dari atribut cluster_centers_ yang dihasilkan dari objek KMeans menggunakan imshow(). Ubah ukuran dimensi tiap centroid menjadi 8x8. Apa yang dapat Anda amati?


In [ ]:

Jawaban Anda di sini

Soal 4.2 (4 poin)

Lakukan kembali clustering dengan KMeans, tapi kali ini gunakan nilai $k \in [5,15]$. Laporkan nilai inertia dari proses clustering dalam scree plot. Mengapa scree plot-nya seperti itu?


In [ ]:

Jawaban Anda di sini

Soal 4.3.a (4 poin)

Coba lakukan klasifikasi dengan memanfaatkan algoritma k-Means. Perhatikan bahwa saat akan membandingkan label, Anda harus melakukan class assignment untuk tiap klaster secara greedy. Laporkan akurasi yang dihasilkan dengan metode ini.


In [ ]:

Soal 4.3.b (2 poin)

Gambarkan heatmap dari confusion matrix yang dihasilkan dari klasifikasi di atas. Jangan lupa untuk memberikan label yang sesuai untuk tiap sumbunya.


In [ ]:

Soal 4.4 (4 poin)

Berikan kesimpulan dari eksplorasi yang telah Anda lakukan dalam keseluruhan tugas ini.

Jawaban Anda di sini