Kecerdasan Buatan

Tugas 1: Regresi dan Neural Networks

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 tugas1_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:

  • keras
  • 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 mencoba menggunakan metode machine learning untuk melakukan dua jenis prediksi: regresi dan klasifikasi.

Untuk kasus regresi, Anda diminta untuk memprediksi jumlah penjualan berdasarkan uang yang dihabiskan pada media iklan yang digunakan. Terdapat tiga media iklan, yaitu TV, Radio dan Newspaper. Dengan detail atribut sebagai berikut:

  • TV: biaya yang dihabiskan untuk iklan tayangan TV untuk setiap satu produk dalam sebuah pasar (dalam ribuan dollar)
  • Radio: biaya yang dihabiskan untuk iklan di radio (dalam ribuan dollar)
  • Newspaper: biaya yang dihabiskan untuk iklan di koran (dalam ribuan dollar)
  • Sales: penjualan dari setiap satuan produk pada suatu pasar (dalam ribuan widget)

Untuk kasus klasifikasi, Anda akan menggunakan dataset Food-101 yang memiliki 101 kategori makanan dengan total 101.000 gambar makanan. Dataset untuk tugas ini diambil dari Food-101 (https://www.vision.ee.ethz.ch/datasets_extra/food-101/). Untuk versi yang lebih sederhana, Anda hanya akan membandingkan apakah gambar yang diberikan berupa sushi atau pizza. Anda akan melakukan klasifikasi menggunakan algoritma regresi logistik dan neural networks dalam tugas ini.

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
import random

import keras
from keras.models import Sequential, load_model
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

%matplotlib inline

RANDOM_STATE = 1337
np.random.seed(RANDOM_STATE)

1. Eksplorasi Awal Data - Advertising (6 poin)


In [ ]:
df = pd.read_csv('../datasets/advertising.csv', index_col=0)

Soal 1.1.a (1 poin)

Laporkan deskripsi dari Advertising dataset dengan menggunakan metode dari Pandas!


In [ ]:

Soal 1.1.b (2 poin)

Berapa nilai sales paling rendah dan nilai sales paling tinggi dari data yang Anda miliki? Berapa ribu dollar uang yang dihabiskan untuk membayar biaya iklan di TV, radio, dan newspaper untuk produk tersebut?


In [ ]:

Soal 1.2 (3 poin)

Gambarkan scatter plot dari sales terhadap media iklan TV, radio, dan newspaper.


In [ ]:

2. Prediksi Penjualan Berdasarkan Biaya Media Iklan dengan Regresi Linear (19 poin)

Soal 2.1 (4 poin)

Kita akan membuat simple linear regression dengan satu fitur. Dalam kasus ini, mari mencoba melihat hubungan antara sales dengan biaya untuk media iklan di TV.

Ambil fitur dari kolom TV dan response dari kolom sales, kemudian buat sebuah model linear regression menggunakan pustaka scikit-learn dan latih model tersebut dengan data yang Anda miliki! Laporkan nilai bias dan koefisiennya. Lalu, jelaskan bagaimana intepretasi Anda terhadap koefisien dari model yang Anda miliki.

Petunjuk: Lihat cara penggunaan pustakanya di sini.


In [ ]:

Jawaban Anda di sini

Soal 2.2.a (3 poin)

Mari kita lihat seberapa baik garis regresi yang dibuat dari model yang Anda miliki. Buatlah prediksi dari biaya TV yang paling minimum dan biaya TV yang paling maksimum! Gambarkan scatter plot dan garis regresi model Anda atas prediksi tersebut. Bagaimana garis tersebut mencocokkan data Anda?


In [ ]:

Soal 2.2.b (3 poin)

Coba lakukan kembali regresi pada data tersebut, tetapi kali ini gunakan fungsi basis polinomial orde 3. Gambarkan kembali scatter plot dan fungsi regresinya.


In [ ]:

Soal 2.2.c (3 poin)

Salah satu cara untuk memastikan bahwa model yang Anda hasilkan sudah cukup baik pada model regresi adalah dengan menghitung nilai mean squared error (MSE). Coba hitung nilai MSE untuk regresi dengan dan tanpa fungsi basis polinomial seperti yang Anda kerjakan pada bagian a dan b. Apa yang dapat Anda amati? Apakah nilainya sesuai dengan ekspektasi Anda?


In [ ]:

Jawaban Anda di sini

Soal 2.3.a (4 poin)

Sekarang kita akan melakukan Multiple Linear Regression. Buatlah sebuah model dengan menggunakan Linear Regression dari scikit-learn untuk fitur TV, radio, dan newspaper. Variabel dependen yang digunakan adalah sales. Keluarkan pula nilai bias dan nilai koefisien ketiga fitur tersebut. Sebelum itu, bagi dataset menjadi data latih dan data uji dengan proporsi data uji sebanyak 20%.


In [ ]:

Soal 2.3.b (2 poin)

Lakukan evaluasi model multiple linear regression yang Anda miliki dari data uji dengan menggunakan mean squared error.


In [ ]:

3. Eksplorasi Awal Data Food-101 (3 poin)

Pertama, kita akan memuat data menggunakan kode di bawah ini. X merupakan gambar yang telah diterjemahkan dalam bentuk tensor atau array multidimensi. Dimensi pertama menunjukkan jumlah datanya, dua dimensi berikutnya menunjukkan panjang dan lebar dari gambarnya, dan dimensi keempat merupakan channels (RGB). Di sisi lain, y adalah kelas dari masing-masing gambar yang diberikan dalam X sehingga X.shape[0] == y.shape[0].


In [ ]:
X = np.load('../datasets/food.npy')
y = np.load('../datasets/food_labels.npy')

X.shape

Soal 3.1 (1 poin)

Berapa banyak gambar sushi dan pizza masing-masing dalam dataset ini?


In [ ]:

Soal 3.2 (2 poin)

Gambarkan satu contoh pizza (indeks 0-1000) dan satu contoh sushi (indeks 1001-2000) dari dataset yang digunakan.

Petunjuk: Anda dapat menggunakan plt.imshow()


In [ ]:

4. Klasifikasi Gambar Pizza dan Sushi Menggunakan Logistic Regression (7 poin)

Soal 4.1 (1 poin)

Bagi dataset Anda menjadi 70-30 untuk training-test sets.


In [ ]:

Soal 4.2.a (4 poin)

Buat gambar yang berbentuk matriks pixel yang ada menjadi flat, lalu lakukan regresi logistik ke data yang telah Anda bagi tadi.


In [ ]:

Soal 4.2.b (2 poin)

Apa pendapat Anda tentang hasil klasifikasi tersebut? Apakah hasilnya sudah cukup baik?

Jawaban Anda di sini

5. Klasifikasi Gambar Pizza dan Sushi Menggunakan Neural Networks (15 poin)

Coba klasifikasikan data Food-101 untuk kedua jenis makanan diatas dengan menggunakan pustaka dari Keras untuk deep learning atau neural networks. Jangan lupa untuk melaporkan akurasi dan confusion matrix-nya.

Petunjuk: Anda mungkin perlu mengubah dimensi dari data latih dan data uji Anda menjadi $n \times d \times d \times 1$ dengan 1 dimensi terakhir adalah channel hitam-putih. Nilainya bisa menjadi 3 jika kita menggunakan channel warna RGB.

Anda mungkin perlu menggunakan representasi one-of-K untuk label yang digunakan. Anda dapat menggunakan keras.utils.to_categorical untuk melakukan hal ini. Silakan mencontoh kode untuk deep neural networks sederhana di sini atau dengan menggunakan convolutional neural networks di sini.

Penilaian:

  1. Implementasi kode neural networks (7 poin)
  2. Implementasi convolutional neural networks (5 poin)
  3. Melaporkan akurasi dan membuat heatmap confusion matrix (2 poin)

Soal 5.1 (2 poin)

Ubahlah gambar pada X_train dan X_test yang Anda gunakan menjadi hitam-putih dengan mengambil nilai rata-rata dari channel RGB. Simpan sebagai X_train_bw dan X_test_bw.

Petunjuk: Gunakan np.mean()


In [ ]:

Soal 5.2 (2 poin)

Anda akan mencoba menerapkan Neural Networks dengan model MultiLayerPerceptron (MLP). Jalankan kode di bawah ini. Apakah hasilnya lebih baik dibandingkan dengan menggunakan regresi logistik?

Kode di bawah diadaptasi dari sini.


In [ ]:
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y_label = le.fit_transform(y)
y_train = le.transform(y_train)
y_test = le.transform(y_test)

In [ ]:
batch_size = 64
epochs = 20

x_train = X_train.reshape(X_train.shape[0], 28 * 28 * 3)
x_test = X_test.reshape(X_test.shape[0], 28 * 28 * 3)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(28 * 28 * 3,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(1, activation='sigmoid'))

model.summary()

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=1,
                    validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Soal 5.3 (6 poin)

Adaptasi kode pada soal 5.2 untuk dapat berjalan pada data gambar hitam-putih. Apakah hasilnya jadi lebih baik atau lebih buruk? Sesuaikah ini dengan ekspektasi Anda?


In [ ]:

Soal 5.4 (5 poin)

Buat variasi dari kode di atas, e.g. mengubah jumlah hidden layers, jumlah hidden units, jumlah epoch, activation function, dsb. Lalu, laporkan akurasinya.

Semakin banyak variasi Anda dan semakin baik hasilnya, semakin besar poin Anda untuk soal ini.


In [ ]:

6. Bonus: Convolutional Neural Networks (5 poin)

Adaptasi kode di atas dan lihat pula contoh kode di sini. Coba buat Convolutional Neural Network dan jalankan kodenya. Laporkan akurasinya dan gambarkan pula heatmap confusion matrix-nya! Kode CNN Anda hanya dinilai jika berhasil berjalan.


In [ ]: