machine learning
Machine Learning

Machine Learning : Definisi, Tipe dan Implementasi

Pernah dengar istilah machine learning? machine learning adalah salah satu teknologi yang banyak digunakan akhir-akhir ini untuk membuat sistem outonomus yang lebih baik

Definisi Machine Learning (ML)

ML adalah konsep dimana mesin dapat belajar berdasarkan data. Contohnya sebuah mesih dapat mengenali objek karena sebelumnya kita telah melatihnya menggunakan dan mengenalkan sejumlah data tentang objek tersebut

ML merupakan bagian dari Artificial Intelligence yang juga dapat digunakan untuk pengambilan keputusan. ML menggunakan data histori sebagai bahan baku dan memprosesnya menjadi sebuah model

Tipe Machine Learning

Ada beberapa jenis algoritma ML antara lain:

  1. Supervised Learning
  2. Unsupervised Learning
  3. Reinforce Learning
#1 Supervised Learning

Supervised learning merupakan metode ML yang diimplementasikan pada data yang berlabel. Di dalam metode supervised learning data dibagi menjadi dua, training dan testing.

#2 Unsupervised Learning

Unsupervised learning merupakan metode ML yang tidak menggunakan data berlabel. Pembelajaran ini akan mengeksplorasi pola dari dataset yang mirip dan memprediksi hasilnya

#3 Reinforcement Learning

Reinforcement learning belajar dari lingkungan sendiri dan dari pengalaman yang ditemuinya. Jenis algoritma ini banyak digunakan di bidang Robotika.

Implementasi Machine Learning

Kita akan coba sekilas melakukan implementasi machine learning untuk melakukan klasifikasi

Contoh kasus yang kita gunakan adalah menggunakan dataset titanic. dataset titanic merupakan dataset populer untuk machine learning

Dari dataset ini kita akan lakukan klasifikasi apakah penumpang kapal selamat atau tidak berdasarkan data-data pendukung seperti umur, jenis kelamin, tipe kelas dan sebagainya.

Pada kasus ini kita akan coba implementasikan menggunakan Jupyter Notebook. Ada beberapa library yang digunakan seperti pandas dan sklearn. Kemudian silahkan download datasetnya terlebih dahulu di artikel ini

Eksploratori Data

Pertama, kita import library pandas untuk membaca dataset

import pandas as pd

# read dataset
df = pd.read_csv('titanic.csv')

Kedua kita preview dulu datanya dengan menggunakan df.head()

Ada beberapa kolom dari dataset ini seperti PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked

Detail dari kolom di dataset titanic akan dijelaskan di tabel ini

NoNama Kolom / AtributKeterangan
1PassengerIdID Penumpang
2SurvivedSelamat atau Tidak (0 = Tidak; 1 = Selamat)
3PclassKelas Penumpang (1 = 1st; 2 = 2nd; 3 = 3rd)
4NameNama Penumpang
5SexJenis Kelamin Penumpang
6AgeUmur Penumpang
7SibSpJumlah Saudara/Pasangan di Kapal
8ParchJumlah Orangtua/Anak di Kapal
9TicketNomor Tiket
10FareTarif Penumpang
11CabinKabin
12EmbarkedPelabuhan Embarkasi (C = Cherbourg; Q = Queenstown; S = Southampton)

Kemudian kita lihat lebih dalam dari dataset seperti jumlah data dan tipe data dari setiap kolom dengan df.info()

Dari sini kita tahu bahwa terdapat beberapa tipe data seperti int, float dan object. Tipe object biasanya merujuk pada categorical data. Jumlah kolom adalah 12 dan jumlah baris adalah 891 dengan beberapa kolom yang mempunyai missing values

Kelas target pada dataset ini adalah kolom ‘Survived‘ sedangkan kolom lainnya adalah sebagai feature untuk menentukan apakah penumpang selamat atau tidak

Preprocessing

Kita akan melakukan preprocessing sederhana seperti apa yang telah kita temukan berdasarkan eksploratori data yaitu menghapus kolom yang tidak diperlukan, melakukan imputasi missing value dan merubah categorical data menjadi bentuk numerik karena machine learning tidak dapat memproses data string secara langsung

Pertama, kita akan hapus kolom yang kurang penting atau terlalu banyak missing value seperti kolom ‘PassengerId‘,’Name‘,’Ticket‘ dan ‘Cabin

df.drop(['PassengerId','Name','Ticket','Cabin'], inplace=True, axis=1)

Kemudian kita cek apakah masih ada missing values dengan fungsi isnull()

df.isnull().sum()

Terdapat missing value di kolom Age dan Embarked. Kita akan lakukan imputasi nilai yang kosong kolom Age dengan mencari rata-rata Age Penumpang

df['Age'] = df['Age'].fillna(df['Age'].mean())

dan imputasi Embarked dengan embarkasi yang paling banyak

df['Embarked'] = df['Embarked'].fillna('S')

Kita bisa mengetahui Embarkasi paling banyak digunakan dengan melihat fungsi value_counts()

Setelah tidak ada lagi missing values selanjutnya kita akan transform categorical data di kolom Sex dan Embarked menjadi bentuk numerik dengan one-hot encoding

df = pd.get_dummies(df, columns=["Sex"])
df = pd.get_dummies(df, columns=["Embarked"])

Hasil akhir dari preprocessing adalah sebagai berikut

Setiap kolom dari dataset telah menjadi bentuk numerik selanjutnya kita akan lakukan training data dengan menggunakan library sklearn

Training data

Algoritma klasifikasi yang kita gunakan adalah Logistic Regression. Salah satu algoritma machine learning yang sederhana

Pertama kita tentukan nilai X dan Y dari dataset dan split datanya menjadi training dan testing data dengan train_test_split

from sklearn.model_selection import train_test_split

# split features
X = df.drop('Survived', axis=1)
y = df['Survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

Kemudian kita panggil Logistic Regression dan buat instance nya

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()

dan kita train data dengan fungsi fit()

lr.fit(X_train, y_train)

kemudian kita prediksi data testing dengan model hasil training dan lihat akurasinya menggunakan classification_report

predictions = lr.predict(X_test)
from sklearn.metrics import classification_report
print(classification_report(y_test, predictions))

Horeee kita mendapatkan model klasifikasi dengan akurasi 81%.. lumayanlah

Kita juga dapat melihat lebih detail hasil training dengan confusion matrix

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, predictions)

Cara membacanya adalah

True Positive: 155 (Prediksi positif dan hasilnya memang positif)
True Negative: 85 (Prediksi negatif dan hasilnya memang negatif)
False Positive: 21 (Prediksi positif tetapi hasilnya negatif)
False Negative: 34 (Prediksi negatif tetapi hasilnya positif)

Kode lengkap untuk preprocessing, modeling dan evaluasi model adalah sebagai berikut

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

# read dataset
df = pd.read_csv('titanic.csv')
# drop columns
df.drop(['PassengerId','Name','Ticket','Cabin'], inplace=True, axis=1)
# check missing values
df.isnull().sum()
# find the most populer embarked
df.Embarked.value_counts()
# impute missing values on Age and Embarked
df['Age'] = df['Age'].fillna(df['Age'].mean())
df['Embarked'] = df['Embarked'].fillna('S')
# convert categorical data into numeric
df = pd.get_dummies(df, columns=["Sex"])
df = pd.get_dummies(df, columns=["Embarked"])
# split features
X = df.drop('Survived', axis=1)
y = df['Survived']
# split dataset into training and testing
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
#training data
lr = LogisticRegression()
lr.fit(X_train, y_train)
# predict
predictions = lr.predict(X_test)
print(classification_report(y_test, predictions))
print(confusion_matrix(y_test, predictions))

Akurasi model dapat lebih ditingkatkan dengan memperbaiki kualitas feature engineering pada tahap preprocessing, atau melakukan tuning parameter pada algoritma klasifikasi yang digunakan

Cukup sekian dan semoga bermanfaat 😀

Leave a Reply

Your email address will not be published. Required fields are marked *