KMeans Clustering dengan Python

Pada postingan yang lalu telah dibahas klasterisasi dengan KMeans menggunakan bahasa Matlab. Kali ini kita coba menggunakan bahasa Python dengan GUI Jupyter notebook pada Google (Google Colab).

Sebelumnya kita siapkan terlebih dahulu file data sebagai berikut. Kemudian buka Google Colab untuk mengklasterisasi file tersebut. Sebagai referensi, silahkan kunjungi situs ini. Saat ini kita dengan mudah memperoleh contoh kode program dengan metode tertentu lewat google dengan kata kunci: colab <metode>.

Mengimpor Library

Library utama adalah Sklearn dengan alat bantu Pandas untuk pengelolaan ekspor dan impor file serta matplotlib untuk pembuatan grafik.

  • from sklearn.cluster import KMeans
  • import pandas as pd
  • from sklearn.preprocessing import MinMaxScaler
  • from matplotlib import pyplot as plt

Perhatikan di sini KMeans harus ditulis dengan K dan M berhuruf besar, begitu pula kelas-kelas yang lain seperti MinMaxScaler

Menarik Data

Perhatikan data harus diletakan di bagian file agar bisa ditarik lewat instruksi di bawah ini. Jika tidak maka akan muncul pesan error dimana data ‘beasiswa.csv’ tidak ada.

Selain itu tambahkan instruksi untuk mengeplot data. Tentu saja ini khusus data yang kurang dari 3 dimensi. Jika lebih maka cukup instruksi di atas saj.

  • plt.scatter(df[‘IPK’],df[‘Tingkat Kemiskinan (TM)’])
  • plt.xlabel(‘IPK’)
  • plt.ylabel(‘Tingkat Miskin’)

Prediksi

Ini merupakan langkah utama yang memanfaatkan pustaka ‘KMeans’ dari Sklearn.

  • km=KMeans(n_clusters=2)
  • y_predicted=km.fit_predict(df[[‘IPK’,‘Tingkat Kemiskinan (TM)’]])
  • y_predicted

Nah, hal terpenting adalah tidak hanya menghitung y_predicted saja melainkan melabel kembali datanya. Percuma saja jika kita tidak mampu memetakan kembali siapa saja yang masuk kategori klaster ‘0’ dan ‘1’.

  • df[‘klaster’]=y_predicted
  • print(df)

Finishing

Di sini langkah terpenting lainnya adalah kembali memvisualisasikan dalam bentuk grafik dan menyimpan hasilnya dalam format CSV.

  • df1=df[df.klaster==0]
  • df2=df[df.klaster==1]
  • plt.scatter(df1[‘IPK’],df1[‘Tingkat Kemiskinan (TM)’],color=‘red’)
  • plt.scatter(df2[‘IPK’],df2[‘Tingkat Kemiskinan (TM)’],color=‘black’)
  • plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color=‘purple’,marker=‘*’,label=‘center’)
  • plt.xlabel=‘IPK’
  • plt.ylabel=‘Tingkat Miskin’
  • plt.legend()

Hasilnya adalah grafik dengan pola warna yang berbeda tiap klaster-nya.

Salah satu kelebihan Pandas adalah dalam ekspor dan impor data. Dalam hal ini kita akan menyimpan hasil klasterisasi dengan nama ‘klasterisasi.csv’. Lihat panduan lengkapnya di sini.

  • df.to_csv(‘klasterisasi.csv’)

Silahkan file hasil sempan diunduh karena Google Colab hanya menyimpan file tersebut sementara, kecuali kalau Anda menggunakan Google Drive (lihat caranya). Untuk mengujinya kita buat satu sel baru dan coba panggil kembali file ‘klasterisasi.csv’ yang baru terbentuk itu. df=pd.read_csv(‘klasterisasi.csv’)

  • df.head()

 

Note: ada field yang belum dinamai (Unnamed), bantu ya di kolom komentar caranya. Oiya, MinMaxScaler digunakan untuk jika data ‘jomplang’ misalnya satu dimensi, IPK dari 0 sampai 4 sementara misalnya penghasilan jutaan, tentu saja KMeans ‘pusing’. Oleh karena itu perlu dilakukan proses preprocessing. Sekian, semoga bermanfaat.

Permasalahan Pada Google Colab

Salah satu tools untuk pemrograman dengan Python yang terkenal saat ini adalah Google Colab. Tools ini sangat praktis karena cukup dengan sebuah browser dengan disertai akun Google sudah bisa menjalankan kode dalam bahasa Python yang berat. Bahkan Google colab juga menyediakan hardwarenya yang berupa Graphic Processing Unit (GPU) dan Tensor Processing Unit (TPU).

Dalam praktiknya ternyata banyak kendala-kendala yang kerap dialami peneliti dalam memanfaatkan fasilitas canggih milik Google tersebut. Beberapa masalah akan dibahas dalam postingan ini, tentu saja berdasarkan pengalaman yang terjadi. Mungkin banyak hal lain yang tidak dibahas dalam postingan ini yang butuh share juga dari pembaca lewat kolom komentar. Selain membahas masalah-masalah yang muncul, dibahas pula cara-cara penyelesaiannya.

Kompatibilitas

Banyak kode-kode yang dishare di internet dalam bentuk Google Colab ketika dijalankan tidak bisa/error. Hal ini kerap terjadi karena Google Colab sudah mengupdate ke versi terbaru dan tidak bisa lagi menjalankan versi-versi yang lama. Langkah terbaik untuk penyelesaiannya adalah mengembalikan Google Colab ke versi sebelumnya.

Ternsor Flow

Beberapa aplikasi terkadang masih menggunakan tensorflow versi 1.x yang lama, sedangkan Google Colab saat ini sudah menggunakan yang versi 2. Oleh karena itu perlu sebuah instruksi untuk mengembalikan ke versi tersorflow yang lam.

Simbol “%” biasanya digunakan untuk setting library pada Google Colab. Memang ada baiknya mengkonversi program Python kita dengan versi yang terbaru, namun ada kalanya karena keterbatasan waktu, cara tersebut layak untuk dipertimbangkan.

TIdak Semua Library Tersedia

Beberapa library seperti NumPy, Pandas, dan sejenisnya sudah disiapkan oleh Google Colab. Namun library tertentu yang jarang dipakai perlu dipasang pada Google Colab. Caranya tentu saja tidak bisa dengan cara konvensional pada command prompt dengan “PIP”, melainkan dengan running pada Cell Google Colab lewat tanda “!” di awal.

Sebagai contoh di atas adalah library “rasterio” yang sering digunakan untuk menampilkan network Deep Learning berupa gambar yang jelas. Namun yang menjengkelkan adalah ketika Google Colab dishutdown dan dihidupkan kembali, kita harus menginstal ulang, berbeda jika menggunakan Jupyter Notebook yang cukup sekali menginstall Library.

Perlu Mencabut Instalasi Library

Ternyata bukan masalah belum terinstal saja yang muncul, sudah diinstal pun terkadang perlu dicabut karena tidak sesuai dengan kondisi sebelumnya. Misalnya ketika dahulu kita men-training dengan library tertentu pada Deeplearning, ketika hasil training tersebut akan digunakan ternyata tidak kompatibel dengan library terkini, alhasil perlu dilakukan proses training ulang yang terkadang memakan waktu.

Cara paling gampang adalah mencabut library Google Colab terkini dilanjutkan dengan instal versi sebelumnya yang tepat ketika proses training berlangsung.

Sebelumnya akan ada proses konfirmasi apakah akan dicabut library terkininya? Ketik saja y dan proses uninstall akan berjalan. Lanjutkan dengan menginstall versi yang kompatibel dengan yang lampau agar hasil pelatihan dapat berjalan.

Kode di atas terjadi ketika Deeplearning dilatih, versi h5py menggunakan versi yang lama. Alhasil dengan versiyang baru tidak dapat dipanggil dan dikompilasi dengan networknya. Setelah uninstall dan diinstal dengan versi yang cocok, barulah dapat dimanfaatkan hasil pelatihan/training Deeplearning yang telah dilakukan dahulu.

File Terhapus Ketika Shutdown

Problem yang sering terjadi adalah ketika suatu file diupload di Google Colab maka file tersebut sejatinya adalah sementara. Artinya ketika Google Colab ditutup maka file tersebut otomatis hilang. Untungnya Google Colab menyediakan fasilitas terkoneksi ke Google Drive, sehingga fila akan tersimpan permanen di Google Drive. Hanya saja perlu setting tambahan seperti berikut ini.

Google Colab akan meminta kode tertentu (cukup dengan copas) dari Google Drive. Pastikan folder di Google Drive dapat diakses pada Google Colab. Kalau hanya berukuran beberapa kilobyte sih tidak masalah, repotnya jika filenya berukuran besar mendekati 1 Gb, tentu saja menjengkelkan. Jadi melakukan akses ke Google Drive wajib dilakukan.

Waktu Akses Terbatas

Jika proses memerlukan waktu yang lama, maka Google akan memutus proses itu, dalam waktu 1×24 jam (mirip pesan pak RT untuk para tamu). Selain itu terkadang jika Google melihat tidak ada aktivitas pada sesi Google Colab terkadang akan direset prosesnya.

Butuh Koneksi Internet

Tentu saja karena Google Colab menggunakan browser. Ada baiknya Anda menggunakan Jupyter Notebook karena lebih fleksibel. Ketika kode bisa dirunning, akan terus bisa dirunning, kecuali Versi Library Anda rubah.

Hal-hal di atas merupakan permasalahan yang harus dipahami oleh pengguna Google Colab. Mungkin banyak hal-hal lain yang belum disebutkan di atas. Oiya, untuk pemrograman hal-hal rahasia, sensitif, dan sejenisnya ada baiknya tidak menggunakan fasilitas cloud seperti Google Colab.

Computer Vision

Perkembangan Artificial Intelligence (AI) saat ini sangat cepat baik dalam metode dasar maupun penerapan di lapangan. Banyak instansi yang membutuhkan AI, dari kedokteran, pertanian, hingga pertahanan dan keamanan. Salah satu penerapannya adalah dalam Computer Vision.

Image Processing

Terkadang banyak yang bingung apa perbedaan image processing dengan computer vision. Keduanya sama-sama mengelola gambar/citra, hanya saja computer vision lebih dalam lagi, dimana sebuah model dibuat untuk mampu mengenali sebuah gambar. Sementara itu, image processing memiliki tugas pokok hanya mengolah gambar. Biasanya bekerja sebagai pre-processing sebelum masuk ke modul computer vision, misalnya merubah citra berwarna menjadi hitam putih, merubah ukuran/dimensi gambar, merotasi dan hal-hal yang mengkonversi gambar agar bermanfaat.

Walaupun terlihat sederhana tetapi penerapannya sangat penting, misalnya konvolusi yang merubah gambar besar menjadi gambar yang berukuran lebih kecil tetapi tidak merubah “ciri” dari gambar aslinya. Metode ini digunakan dalam Convolution Neural Network (CNN) bersama dengan Pooling (memperkecil ukuran/dimensi gambar) yang ternyata meningkatkan performa Neural Networks.

Pengenalan Gambar

Sebenarnya untuk mengenali gambar merupakan kemampuan yang sudah dimiliki oleh manusia. Namun jika yang harus dikenali sangat banyak, atau harus selalu “on” 24 jam, tentu saja manusia tidak sanggup. Oleh karena itu riset yang mengembangkan model seperti manusia yang mampu mengenali gambar sangat bermanfaat. Akurasinya pun saat ini kian mendekati 100%.

Selain aspek kuantitatif dalam mengenali gambar, terkadang model pengenalan gambar harus mampu mengenali gambar jauh melebihi mata manusia, misalnya dalam mendeteksi foto rontgen, sel-sel mikroskopis, dan mineral di dalam bumi. Bahkan dalam mengenali tutupan lahan, model melebihi kemampuan mata manusia mengenali foto satelit, mengingat sensor satelit, misalnya Operational Land Imager (OLI) memiliki 9 band frekuensi, dimana mata manusia hanya mampu melihat beberapa band frekuensi saja.

Surveillance System

Selain gambar statis, computer vision juga berkembang untuk mendeteksi video. Biasanya diterapkan pada CCTV keamanan. Jika ada objek mencurigakan, sistem akan memberikan warning sehingga dapat bekerja 24 jam dan selalu waspada, hal yang tidak mungkin dilakukan oleh seorang staf keamanan. Sekian semoga tertarik riset di bidang ini.

Praktek Basis Data dengan Google Colab

Google Colab merupakan media pembelajaran pemrograman yang praktis karena baik bahasa pemrograman maupun mesin/harware disediakan oleh Google. Dengan mengandalkan laptop jadul atau handphone bisa dilaksanakan, asal memiliki koneksi internet. Bahasa yang digunakan adalah bahawa Python yang sangat cocok untuk machine learning. Bagaimana untuk pengolahan basis data?

SQLite

SQLite disediakan dalam satu library yang harus diinstal terlebih dahulu sebelum diimpor. Data diletakan baik dengan koneksi ke Google Drive atau diletakan secara temporal di folder pada Google Colab.

# CREATING THE TABLE
import sqlite3
conn = sqlite3.connect(‘unisma.db’)
print(“Opened database successfully”);
conn.execute(”’
CREATE TABLE IF NOT EXISTS data_siswa(nama text,
matkul text,
dosen text,
nilai integer);”’)
conn.commit()
print(“Table created successfully”);
conn.close()

Setelah Tabel terbentuk, silahkan dimasukan data-datanya misalnya sebagai berikut. Pastikan terisi dengan baik.

# INSERTING VALUES
conn = sqlite3.connect(‘unisma.db’)
conn.execute(“INSERT INTO data_siswa VALUES(‘wahyu’, ‘matematika’, ‘malikus’, 72);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘budi’, ‘bahasa’, ‘amin’, 90);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘linda’, ‘matematika’, ‘malikus’, 91);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘wahyu’, ‘bahasa’, ‘amin’, 75);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘linda’, ‘bahasa’, ‘amin’, 90);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘budi’, ‘matematika’, ‘malikus’, 60);”)
conn.commit()

Untuk menggunakan query silahkan menggunakan instruksi SELECT untuk mengetahui isi dari data/tabel yang ada. Bahasa standar SQL dapat diterapkan pada SQLite. Tentu saja untuk implementasi diharapkan menggunakan Python di lokal komputer kita. Google colab cukup baik untuk media pembelajaran atau sebagai penguji algoritma yang akan diterapkan pada system.

conn.close()
conn = sqlite3.connect(‘unisma.db’)

cursor = conn.execute(”’ SELECT nama
                          FROM data_siswa
                          WHERE matkul=’matematika’;”’)

for row in cursor:
  print(row)
conn.close()

Hasil:

  • (‘wahyu’,)
  • (‘linda’,)
  • (‘budi’,)

Untuk lebih jelasnya silahkan lihat video saya berikut, sekian semoga bisa membantu.

 

Relasi Antar Kelas – Komposisi

Komposisi merupakan relasi antar kelas yang lebih ketat dibanding agregasi (lihat pos yang lalu), sedikit berbeda dibanding inheritance yang bersifat generalisasi/spesialisasi. Masih dengan kasus yang sama berikut ini.

Diagram kelas Unified Modeling Language (UML) di atas memperlihatkan relasi antara kelas Dosen dan Mahasiswa “Membimbing”. Teknik di atas sering muncul di buku karangan Alan Denis (System Analysis & Design – an OO Approach with UML).

Karakteristik agregasi antara dua kelas adalah independen. Jika dihapus satu objek yang berelasi, objek lain masih ada, sementara komposisi tidak. Ada istilah Wadah (Container) dan Isi (Contain). Jika wadah dihapus maka isi ikut terhapus juga. Misalnya komputer yang memiliki komponen prosesor, ram, mainboard, dan lain-lain dihapus, maka komponen otomatis ikut terhapus.

Secara kode mirip dengan agregasi, hanya saja isi, dalam hal ini isi, misalnya dosen pembimbing, dibangkitkan dalam objek yang berperan sebagai wadah, misal mahasiswa.

Pada agregasi, objek mahasiswa y (si Wahyu) memiliki dosen pembimbing x (Rahmadya). Jika objek y dihapus (ketik saja “del y” di colab) x masih ada. Nah, untuk komposisi dosen pembimbing y (Ujang) diletakan di dalam y sebagai wadah. Jika y dihapus/delete dosen pembimbing pun terhapus, berbeda dengan agregasi yang masih ada x tersisa. Berikut secara UML bagaimana notasi agregasi dan komposisi.

Namun dalam implementasinya antara agregasi dan komposisi hanya garis saja seperti dalam buku Alan Dennis et al, kecuali jika ingin merinci diagram kelasnya. Untuk inheritance harus dicantumkan dalam diagram simbolnya, karena atribut dan metode ada di kelas induk. Jika tidak diberi simbol panah khawatir pembaca akan bingung kemana atribut dan metode lainnya yang berada di kelas induk. Untuk lebih jelasnya silahkan lihat video Youtube berikut ini.

 

Random Forests dengan Google Colab Python

Decision Tree (DT) merupakan metode machine learning klasik yang memiliki keunggulan dari sisi interpretasi dibanding Deep Learning (DL). Memang akurasi Deep Learning, terutama yang digunakan untuk mengolah citra sudah hampir 100% tetapi beberapa domain, misalnya kesehatan membutuhkan model yang dapat dilihat “isi” di dalamnya. Kita tahu bahwa DL sering dikatakan “black box” karena tidak dapat diketahui alur di dalamnya. Nah, di sinilah DT digunakan karena memiliki keunggulan dari sisi transparansi. Bahkan ketika DT terbentuk kita bisa memprediksi secara manual hasil akhir dengan melihat alur DT tersebut tanpa bantuan komputer. Silahkan lihat pos saya terdahulu tentang DT.

Nah, karena data yang besar terkadang DT sangat sulit terbentuk. Seorang peneliti dari IBM bernama Tin Kam Ho membuat algoritma DT di tahun 1995 (saya baru masuk S1 FT UGM waktu itu). Prinsipnya adalah membuat DT-DT kecil secara acak kemudian digunakan untuk memprediksi melalui mekanisme voting. Misalnya kita ingin memprediksi sesuatu dengan enam buah Trees di bawah ini.

Jika hasilnya 2 Yes dan 4 No maka secara voting hasil prediksinya adalah No karena yang terbanyak No. Oiya, Tree yang dibentuk di atas ketika memilih root dan node tidak perlu menggunakan kalkulasi njlimet seperti DT yaitu dengan Entropi dan Gain Information.

Bagaimana menerapkan lewat bahasa pemrograman? Python memiliki library Scikit Learning untuk Random Forests. Oiya, jika ingin melihat kode di dalam library tersebut silahkan buka saja Source di Github yang disediakan oleh Scikit Learning. Jika ingin memodif silahkan tiru-amati-modifikasi source code tersebut, khususnya para mahasiswa doktoral yang fokus ke metode. Untuk lebih jelasnya silahkan lihat link Video saya di Youtube berikut ini. Sekian, semoga bermanfaat.

Support Vector Regression Untuk Prediksi Sebaran COVID-19

Support Vector Regression (SVR) merupakan metode klasik yang memanfaatkan teori matematika dan statistik untuk regresi dengan model Support Vector Machine (SVM). Jadi SVM ternyata bukan hanya untuk klasifikasi melainkan juga untuk regresi dan deteksi outliers.

Silahkan gunakan Scikit Learning untuk bahasa Python. Postingan ini mengilustrasikan penggunaannya dengan Google Colab. Data COVID dapat kita temukan di internet, atau silahkan gunakan file Excel link ini. Pilih negara yang ingin Anda prediksi kemudian simpan dalam bentuk file. Berikut kira-kira kode programnya.

#impor pustaka svm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from google.colab import files
import io
#data latih
upload_files = files.upload()
for filename in upload_files.keys():
x=upload_files[filename].decode(‘utf-8’)
data1 = pd.read_csv(io.StringIO(x), header=None)
#print(data1.head())
X1=np.asarray(data1)
x_train=X1[0:,0:1]
y_train=X1[0:,1:2]
#membuat model (classifier)
clf = SVR(kernel=‘poly’, C=100, gamma=‘auto’, degree=2, epsilon=.1,
oef0=1)
clf.fit(x_train,y_train)
#prediksi data
test=x_train.reshape(-1,1)
y_pred=clf.predict(test)
y_next=np.array([[457],[465],[470],[471],[480]])
prednext=clf.predict(y_next)
print(prednext)
#Visualisasi Data
absis=[x_train]
ordinat=[y_train]
#ordinat2=np.concatenate([x_train],[prednext])
plt.scatter(absis, ordinat, cmap=‘flag’, marker=‘o’)
plt.scatter(absis, y_pred, cmap=‘flag’, marker=‘x’)
plt.scatter(y_next, prednext, cmap=‘flag’, marker=‘x’)
#Label
plt.xlabel(“Day”)
plt.ylabel(“Number of infected People”)
plt.title(“Projection Pattern of COVID-19 Spread in India”)
plt.grid()

Jika dijalankan, masukan saja data CSV yang Anda ingin prediksi dan tunggu beberapa saat, agak lama karena 400-an hari (lebih dari setahun). Jika selesai pastikan hasil prediksi muncul.

Tampak garis biru merupakan data asli dari Excel sementara garis oranye merupakan hasil fitting berdasarkan kernel polinomial (kuadratik). Lima tanggal prediksi tampak di ujung kanan berwarna hijau. Silahkan lihat video lengkapnya di chanel saya. Sekian, semoga bisa menginspirasi.

P.S. Tulisan di atas sebagian diambil dari publikasi kami di https://ieeexplore.ieee.org/document/9415858

Relasi Antar Kelas – Agregasi

Relasi antar kelas pada Pemrograman Berorientasi Objek (PBO) dikenal dengan nama Asosiasi, yang terdiri dari agregasi dan komposisi, selain dari pewarisan/inheritance yang merupakan ciri khas PBO. Postingan kali ini akan membahas agregasi, merupakan relasi/asosiasi yang dikenal dengan istilah “Is – a”. Perhatikan diagram kelas berikut ini:

Di sini kita akan mengintegrasikan konsep pewarisan (kelas Unisma memiliki anak Dosen, Mahasiswa, dan Satpam) dan agregasi (mahasiswa memiliki dosen pembimbing dari kelas Dosen). Atribut mahasiswa di sini antara lain:

  • Nama
  • Status
  • Jurusan
  • NPM
  • Pembimbing

Atribut nama, status, dan jurusan berasal dari kelas induk (Unisma) sementara NPM dan Pembimbing dari kelas Mahasiswa (kelas anak). Agregasi digambarkan dengan garis, terkadang ada panah disertai penjelasan relasi tersebut, misalnya “membimbing”. Berikut kelas Unisma.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.nama=nama
      self.status=status
      self.jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self.nama)
      print(“Jurusan : “ + self.jurusan)

Berikut ini kode kelas Dosen. Perhatikan kata kunci “super” yang berarti dosen merupakan pewarisan dari kelas Unisma. Jadi Dosen mewarisi atribut-atribut nama, status, dan jurusan, berikut juga metode/operasi Salam() dan Info().

class Dosen(Unisma):
  def __init__(self,nama,status,jurusan,nip):
      super().__init__(nama,status,jurusan)
      self.nip=nip
  def SalamDosen(self):
      print(‘Kami {}  {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()

Berikut ini kode kelas Mahasiswa dengan tambahan satu atribut “pembimbing” yang nantinya akan direlasikan dengan objek Dosen selaku pembimbing.

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm,pembimbing):
      super().__init__(nama,status,jurusan)      
      self.npm=npm
      self.pembimbing=pembimbing
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()
  def GetInfo(self):
      print(“Pembimbing : “ + self.pembimbing.nama)

Jalankan dengan kode-kode berikut untuk mengeceknya.

x=Dosen(“Rahmadya”,“Dosen”,“Teknik Komputer”,123)
y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,1111123,x)
y.Info()
y.GetInfo()

Untuk lebih jelasnya silahkan lihat video penjelasannya berikut ini. Sekian, semoga bermanfaat.

Public, Private, dan Protected Pada Python

Public, Private, dan Protected dikenal dengan nama Visibility. Istilah ini telah lama dikenal oleh bahasa pemrograman C++ dan Java. Python, merupakan bahasa baru secara default mendefinisikan suatu atribut atau metode bersifat public. Diagram kelas UML mendefinisikan public dan private dalam bentuk simbol positif dan negatif.

Untuk membuat private dengan menggunakan simbol garis bawah dimana untuk protected satu garis bawah (“_”) dan untuk private dua garis bawah (“__”).

Berikut contoh kelas Unisma sebagai induk dan kelas Dosen dan Mahasiswa sebagai anak yang diambil dari materi sebelumnya tentang inheritance/pewarisan. Silahkan gunakan editor Python, misalnya Google Colab untuk menjalankan kode berikut.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.__nama=nama
      self.__status=status
      self.__jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self._Unisma__nama)
      print(“Jurusan : “ + self._Unisma__jurusan)

Berikutnya untuk kelas Mahasiswa:

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm):
      super().__init__(nama,status,jurusan)      
      self.__npm=npm
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self._Unisma__status,self._Unisma__jurusan))
      self.Salam()

Berikutnya coba jalankan dengan instruksi pengaksesan kelas-kelas di atas.

y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,123)
y.SalamSiswa()
y.Info()

Berikut video youtube untuk lebih jelasnya.

Naïve Bayes – Kalkulasi secara Manual dan dengan Komputer

Saat ini tidak dapat dipungkiri bahwa Deep Learning paling banyak diteliti dan digunakan dalam aplikasi-aplikasi artificial intelligence. Beberapa pengguna tidak menyukai metode tersebut karena karakteristiknya yang tidak dapat dilihat logika di dalam modelnya atau sering diistilahkan dengan black box walaupun akurasinya saat ini dengan model terbarunya hingga mendekati 100%. Selain itu, deep learning membutuhkan kinerja prosesor yang tinggi, terutama ketika proses pelatihan (learning).

Jika ingin membuat model yang dapat dilihat alur logikanya, naïve bayes merupakan salah satu pilihan yang baik. Walaupun kinerjanya menurut beberapa penelitian kalah dengan metode terkini seperti misalnya support vector machine (SVM), metode ini memiliki karakteristik statistik yang kental, yaitu probabilistik. Ada istilah confidence dalam metode ini.

Untuk perhitungan, naïve bayes lebih mudah menurut saya dibanding decision tree yang mengharuskan membuat model tree dengan konsep entropy dan gain informationnya. Pada naïve bayes, kita hanya menghitung probabilitas ketika menghitung confidence tiap-tiap kelas prediksi.

Plus Minus

Metode naïve bayes, dalam Scikit Learn diisitilahkan dengan Gaussian Naïve Bayes, karena dalam mengkonversi tabel kategorikal lewat pendekatan fungsi Gauss. Walaupun akurasinya kurang dibanding metode lain, sifat probabilistiknya sangat membantu penjelasan ke pengguna dalam aplikasinya. Misalnya dalam memprediksi sebuah sentimen dalam sentiment analysis, metode ini tidak hanya menjelaskan positif, negatif, atau netral saja, melainkan berapa kadar positif dan negatifnya dalam bentuk probabilitas. Terkadang jika dalam sistem dashboard menunjukan negatif dengan probabilitas yang tinggi bisa saja digambarkan dengan warna merah yang artinya warning, sehingga eksekutif segera mengambil tindakan yang perlu dalam manajemen.

Statistik merupakan bidang yang paling banyak dimanfaatkan dalam machine learning. Belakangan beberapa ahli machine learning enggan disebut ahli statistik karena belakangan metode-metode terbaru tidak terlalu mengadopsi konsep statistik, misalnya tensorflow yang cenderung ke arah tensor dan matriks dalam aljabar. Silahkan lihat penjelasan slide di atas dalam video youtube berikut ini, semoga bermanfaat.

Pseudocode

Bahasa pemrograman sangat beragam dari yang sulit seperti bahasa rakitan hingga yang paling mudah dengan bantuan Integrated Development Environment (IDE) yang interaktif. Hanya dengan drag and drop mouse, sebuah aplikasi terbentuk. Karena tiap programmer memiliki bahasa pemrograman sendiri, terkadang untuk berkomunikasi membutuhkan bahasa universal tentang sebuah algoritma. Di sinilah peran pseudocode, dimana sebuah alur algoritma dibuat dalam bahasa umum yang dimengerti manusia.

Dalam perjalanannya, pseudocode memiliki kompromi antara bahasa yang mudah dimengerti manusia dengan yang mudah diimplementasikan programmer. Cornel University menawarkan saran dalam pembuatan pseudocode sebagai berikut.

  • Dibuat menyerupai bahasa manusia dan kode program.
  • Hindari detil yang tidak perlu.
  • Jangan menulis yang sudah jelas.
  • Gunakan beberapa sintax program yang lebih ringkas dari bahasa, misal struktur if-then-else.
  • Perhatikan konteks-nya. Terkadang “use quicksort” pada pseudocode cukup jika audiens mengerti. Namun “quicksort” perlu dijabarkan pada kasus tertentu.
  • Jangan melupakan algoritma yang mendasari algoritma yg sedang dibuat pseudocodenya.
  • Seimbangkan antara pemahaman user dan programmer.

Buku-buku referensi internasional, terutama yang membahas metode-metode komputasi memiliki style terntentu dalam pembuatannya. Jurnal-jurnal ilmiah pun memiliki patokan-patokan dasar dalam pembuatan pseudocode. Ada yang merepresentasikan pseudocode dalam Figure/Gambar, ada pula yang menyamakan dengan naskah teks. Masing-masing ada kekurangan dan kelebihannya.

Thomas Cormen dalam buku Algoritma-nya kebanyakan merepresentasikan sebuah pseudocode dalam format fungsi dimana variabel input dimasukan dalam tanda kurung “()”. Selain itu, sebuah penomoran diberikan di tiap baris perintahnya.

Terkadang pembaca awam pun harus memahami seluk-beluk pemrograman, misalnya konsep rekursif yang unik dimana satu fungsi memanggil dirinya sendiri di dalam alur algoritmanya. Contoh sederhana adalah fungsi faktorial berikut.

Untuk lebih jelasnya silahkan simak video youtube berikut, yang masuk dalam materi kuliah logika dan algoritma.

Pohon Keputusan (Decision Tree)

Pohon keputusan merupakan satu metode klasik dalam prediksi/klasifikasi. Tekniknya adalah dengan menggunakan pertanyaan di suatu atribut (disebut test attribute) kemudian mengarahkan ke cabang mana sesuai dengan jawabannya. Tugas utama dalam metode ini adalah model membuat pohon/tree berdasarkan informasi dari data yang menjadi rujukan.

Perhitungan Manual

Pada slide di bawah, perhitungan manual dijelaskan yang diambil dari buku Data Mining karya Han and Kamber.

Beberapa kesalahan hitung terjadi ketika menghitung expected information dan entropi di tiap-tiap fitur/atribut. Untuk yang sedang mengambil kuliah ini ada baiknya berlatih soal-soal agar ketika ujian tidak terjadi salah hitung.

Perhitungan dengan Program

Berikutnya disertakan pula bagaimana mengimplementasikannya dengan Python, dalam hal ini menggunakan Google Colab. Saran untuk mahasiswa S1 dan D3 ada baiknya mengetik langsung kode (tanpa copas) agar bisa melatih skill/keterampilan. Sekaligus juga debug ketika ada error terjadi. Silahkan lihat video lengkapnya di youtube berikut ini. Semoga bermanfaat.

Inheritance/Pewarisan dengan Python

Salah satu konsep terkenal pada pemrograman berorientasi objek adalah inheritance/pewarisan. Istilah ini identik dengan generalisasi dan spesialisasi dimana seorang induk akan mewariskan sifat-sifat ke seorang anak yang general dan seorang anak memiliki sifat khusus yang spesifik. Gambar di bawah ini contoh diagram UML dalam menggambarkan relasi generalisasi yang menggambarkan konsep pewarisan.

Kotak menggambarkan kelas dengan tiga kompartemen/ruang yaitu nama, atribut dan metode/operasi. Kelas Unisma di atas merupakan kelas induk yang akan mewariskan tiga buah atribut (nama, status, dan jurusan) dan dua buah operasi/metode (salam dan Info). Di sini simbol minus berarti private (tidak bisa diakses dari luar kelas) dan plus berarti publik (bisa diakses di luar kelas). Silahkan lihat slide berikut.

Kelas Dosen dan Mahasiswa berturut-turut memiliki atribut unik NIP dan NPM, juga metode SalamDosen() dan SalamSiswa(). Perhatikan jangan lupa menulis “()” setelah nama metode/operasi, yang merupakan standar/konvensi internasional. Silahkan buat satu sel yang berisi kelas Unisma yang merupakan kelas Induk.

https://colab.research.google.com/drive/1T19eiVktOrMQzXqZLD3jV4I0fbbQZ6oA?usp=sharing

Kode di atas juga mengilustrasikan pembuatan dua kelas anak yaitu kelas Dosen dan kelas Mahasiswa. Di sini kita menggunakan IDE Google Colab yang dapat diakses tanpa perlu instalasi karena hanya menggunakan browser dengan network ke internet.

Perlu diperhatikan bahwa pemrograman berorientasi objek memiliki konsep Konstruktor dalam tiap pembuatan kelas. Karena tiap kelas harus mampu menciptakan satu objek. Tanpa konstruktor maka kelas tersebut tidak bisa membentuk objek. Istilahnya adalah kelas abstrak, terkadang diperlukan juga kelas jenis ini pada penerapannya. Silahkan lihat video berikut, semoga bermanfaat.

Bahasa Untuk Pemrograman Berorientasi Objek

Tiap kampus ternyata berbeda-beda awal perkuliahannya, termasuk kampus tempat saya mengajar yang baru mulai pertemuan pertama semester genap. COVID-19 memang membuat beberapa agenda perkuliahan berubah. Faktor perkuliahan online dan kesiapan kampuslah yang membuah pergeseran dan perubahan sistem, dari yang tatap muka menjadi online. Terutama kesiapan dalam menangani praktikum.

Untuk bidang komputer, khususnya materi pemrograman dapat dilakukan praktik secara online. Problem utama hanyalah di sisi mahasiswa yang terpaksa memindahkan komputer lab ke dalam laptop sendiri, sekaligus sarana network berupa pulsa/paket internet. Nah, untuk mahasiswa yang pas-pasan, tentu saja agak kesulitan ketika memiliki laptop dengan spesifikasi minim. Oleh karena itu perlu difikirkan bagaimana menyiapkan sarana yang murah-meriah.

Java

Java dan C++ sudah sejak lama menjadi sarana belajar pemrograman berorientasi objek. Silahkan lihat postingan saya tentang DB4O untuk basis data objek. Sebelumnya, bahasa ini menjadi andalah saya untuk praktik pemrograman berorientasi objek, tetap kondisi online sangat menyulitkan mahasiswa, sehingga perlu sarana murah-meriah lainnya.

Python

Bahasa yang paling banyak diminati saat ini adalah Python. Banyak paket yang tersedia dari Python berbasis konsol hingga paket Anaconda yang gratis diunduh. Hanya saja paket ini membutuhkan sumber daya yang besar untuk mengaktifkan fasilitas-fasilitas seperti Jupyter Notebook atau Spyder.

Untungnya Google menyediakan sarana programming hanya dengan browser dan mempersilahkan orang menggunakan servernya, termasuk Graphic Processing Unit (GPU) yang cukup ampuh dalam menangani Deep Learning. Bagaimana untuk pemrograman berorientasi objek?

Saat ini Python memiliki pesaing kuat, suatu bahasa pemrograman secepat C++, sedinamis Ruby, dan semudah Python, yaitu Julia. Namun bahasa ini tidak ditujukan untuk pemrograman berorientasi objek, berbede dengan Python yang dari awal memang untuk objek.

Mencoba Pemrograman Objek Sederhana

Baik untuk praktik awal, silahkan buka Google Colab Anda (lihat tata cara di post yang lalu). Copy paste saja kode berikut ini sebagai ilustrasi bagaimana sebuah kelas dengan method yang tersedia.


import math
class Point:
    'Represents a point in two-dimensional geometric coordinates'
    def __init__(self, x=0, y=0):
        '''Initialize the position of a new point. The x and y
        coordinates can be specified. If they are not, the point
        defaults to the origin.'''
        self.move(x, y)
    def move(self, x, y):
        "Move the point to a new location in two-dimensional space."
        self.x = x
        self.y = y
    def reset(self):
        'Reset the point back to the geometric origin: 0, 0'
        self.move(0, 0)
    def calculate_distance(self, other_point):
        """Calculate the distance from this point to a second point
        passed as a parameter.
        This function uses the Pythagorean Theorem to calculate
        the distance between the two points. The distance is returned
        as a float."""
        return math.sqrt((self.x - other_point.x)**2 + (self.y - other_point.y)**2)

Kelas di atas tidak menghasilkan output karena belum dihidupkan objeknya. Berikut cara mencoba method yang direpresentasikan dalam keyword “def” di atas.

point=Point(3,5)
print("point awal = ",point.x, point.y)
point2=Point(5,5)
jarak=point.calculate_distance(point2)
print("jarak dari point awal =",jarak)

Pastikan hasilnya tampak seperti di bawah ini, selamat mencoba.

Library & Toolbox .. Haramkah?

Belajar ilmu komputer, khususnya coding, bagi mahasiswa milenial sedikit membingungkan, apalagi ketika perkembangan teknologi saat ini yang super cepat. Jika mengikuti alur normal, maksudnya dari dasar yang paling dasar .. terkadang membuat mereka stres, ditambah lagi godaan medsos, game, dan youtube.

“Untuk apa belajar itu Pa?”, merupakan pertanyaan yang sudah muncul sejak jaman batu mungkin. Bahkan De Morgan sempat dianggap gila di jamannya. Maklum penerapannya belum ada saat itu, yaitu komputer. Jawab saja sebisanya pertanyaan itu, toh nanti akhirnya mengerti juga, yang penting mengikuti kuliah hingga selesai, minimal sebelum lulus sudah mengerti .. mudah-mudahan.

Begitu juga dengan pemrograman, atau dalam bahasa kekiniannya, Coding. Jika mempelajari dari dasarnya, misalnya bahasa C++ atau bahasa rakitan, baik dosen dan mahasiswa akan lelah, belum lagi mencari pengajar bahasa tersebut yang mulai langka. Kalau untuk belajar algoritma dan struktur data mungkin oke lah. Tapi jika untuk tugas akhir/skripsi, untuk membuat aplikasi paling sederhana pun butuh waktu lama dengan bahasa pembuat bahasa dan sistem operasi tersebut.

Beberapa dosen, cerita dari teman, banyak yang melarang menggunakan Toolbox pada Matlab atau Library di Python. Alasannya seperti biasa, mahasiswa jadi kurang berfikir mendasar, mengingat dengan library dan toolbox, mahasiswa tinggal pakai. Ada benarnya juga.

Permasalahannya tidak semua mahasiswa ilmu komputer fokus ke pemrograman. Apalagi ada banyak jenis programmer, dari web, android/iOS, game, disain, dan lain-lain. Saya pernah mengajar teknik kompilasi dengan bahasa Lex and Yacc yang berbasis C++, untuk membuat bahasa dengan dasar-dasar teknik automata. Hasilnya, mahasiswa kalang kabut. Apalagi untuk mahasiswa sistem informasi atau jurusan non komputer yang butuh bantuan ilmu komputasi.

Halal .. asalkan

Untuk pengguna Toolbox Matlab, ada baiknya Anda daftar gratis di forum Mathworks. Di sana banyak share m-file yang berupa kode-kode untuk fungsi tertentu. Jadi kita bisa belajar bagaimana algoritma bekerja untuk menyelesaikan kasus tertentu. Atau sebenarnya di program Matlab bisa dilihat kode program sebuah fungsi dengan mengetik “edit <nama fungsi>”.

Yang kurang tepat adalah, siswa hanya menggunakan Toolbox atau fungsi yang tersedia tanpa memahami alur programnya.

Nah, saat ini Python merupakan bahasa yang sedang trendy, silahkan lihat dengann Google Trend. Bahasa ini mengalahkan bahasa-bahasa lain dari sisi pencarian di Google.

Python yang di tahun 2012 terbawah, secara perlahan menjadi yang pertama, menyalib bahasa lainnya, bahkan bahasa terkenal, Java. Hal ini karena Python banyak memiliki Library yang sangat membantu mempercepat pembuatan aplikasi.

Seperti pada Matlab, yang kurang baik adalah jika mahasiswa menggunakan Library saja, tanpa memahami prinsip dasar metode/algoritmanya, misalnya Scikit Learning. Dan untuk melihat struktur program, Library pada Python mudah diperoleh. Tetapi untuk memahaminya, dasar-dasar pemrograman di Python harus dikuasai terlebih dahulu, ditambah dengan pemahaman class dan objek. Hal ini karena Library menggunakan class, parameters, dan def, ciri khas pemrograman objek (kelas, atribut, dan metode/operasi).

Untuk mahasiswa ilmu komputer, penggunaan aplikasi seperti Rapidminer, Weka, dan sejenisnya sebenarnya boleh saja, namun untuk mahasiswa S1 dan D3 yang dituntut menghasilkan aplikasi, menurut saya tidak bisa dijadikan tugas akhir/skripsi. Minimal untuk materi mata kuliah. Tapi mubazir juga sih, dipelajari di kuliah tapi tidak bisa dipraktekan/digunakan untuk tugas akhir/skripsi.

Postingan ini sekedar pendapat pribadi ya, untuk bagaimana melihat kode sumber dari library yang ada, silahkan lihat video Youtube saya berikut ini. Isinya membandingkan penggunaan K-Nearest Neighbors dengan Scikit Learning dan tanpa library Machine Learning.