Skip to main content
  1. Belajar/
  2. Machine Learning with Python/
  3. 1. Pengenalan Machine Learning/

Fungsi Loss

27 mins· loading · loading ·
Pengenalan Machine Learning - This article is part of a series.
Part 3: This Article

Machine learning, sebagai cabang dari kecerdasan buatan, telah menjadi pilar utama dalam perkembangan teknologi modern. Dalam upaya untuk membuat model machine learning yang cerdas, kita sering dihadapkan pada tantangan utama: bagaimana mengukur dan meningkatkan kinerja model tersebut. Di sinilah konsep “fungsi loss” memainkan peran sentral.

Fungsi loss, sebagai metrik evaluasi dalam machine learning, memberikan pandangan yang mendalam tentang sejauh mana model dapat memetakan input ke output yang diinginkan. Artinya, fungsi loss menjadi tolok ukur penting dalam menilai akurasi dan kinerja prediksi model.

Pada bagian ini, kita akan membahas secara rinci pengertian dan peranan fungsi loss, menggali alasan mengapa fungsi ini menjadi begitu penting dalam pemelajaran mesin, serta melihat bagaimana fungsi loss membimbing proses optimasi model, menuju kecerdasan yang semakin baik.

A. Definisi Fungsi Loss?
#

Fungsi loss adalah metrik atau parameter evaluasi yang digunakan untuk mengukur sejauh mana model dapat memetakan input ke output yang diinginkan. Dengan kata lain, fungsi loss memberikan gambaran tentang seberapa baik atau seberapa buruk model melakukan prediksi terhadap data yang diberikan. Dalam setiap iterasi pada pelatihan model, nilai fungsi loss dihitung, dan proses ini bertujuan untuk meminimalkan nilai fungsi loss tersebut.

Fungsi loss mencerminkan seberapa jauh prediksi model dari nilai sebenarnya (ground truth) pada data pelatihan. Tujuan utama dalam pemelajaran mesin adalah menciptakan model yang dapat memberikan prediksi yang akurat. Fungsi loss menjadi kriteria penting untuk mengukur tingkat akurasi model tersebut.

1. Mengapa Fungsi Loss Penting dalam Machine Learning?
#

Fungsi Loss memiliki peran yang sangat penting dalam evaluasi model machine learning, dan beberapa alasan mengapa fungsi ini sangat ditekankan adalah sebagai berikut:

  1. Pemilihan Model yang Optimal

    • Fungsi loss membantu dalam mengevaluasi seberapa baik model dapat menyesuaikan diri dengan data pelatihan. Hal ini memungkinkan kita untuk memilih model yang memberikan prediksi paling akurat.
  2. Optimasi Model

    • Selama fase pelatihan, model diperbarui untuk meminimalkan nilai fungsi loss. Dengan demikian, optimisasi model dilakukan dengan menyesuaikan parameter-model untuk mencapai hasil prediksi yang lebih baik.
  3. Generalisasi

    • Fungsi loss juga berperan dalam mencegah overfitting atau underfitting. Model yang optimal memiliki kemampuan untuk memberikan prediksi yang baik tidak hanya pada data pelatihan tetapi juga pada data baru yang belum pernah dilihat sebelumnya (generalisasi).
  4. Penentuan Performa Model

    • Nilai fungsi loss memberikan ukuran objektif tentang kinerja model. Semakin rendah nilai fungsi loss, semakin baik model tersebut dalam membuat prediksi yang sesuai dengan data sebenarnya.

2. Hubungan antara Fungsi Loss dan Pelatihan Model
#

Pada setiap iterasi dalam pelatihan model, parameter-model disesuaikan sedemikian rupa agar nilai fungsi loss semakin mendekati nol. Proses ini dilakukan dengan menggunakan teknik optimisasi, seperti gradient descent, untuk menemukan nilai parameter yang menghasilkan prediksi model paling akurat.

Fungsi loss membantu model untuk “belajar” dari kesalahan prediksi sebelumnya. Dengan mengidentifikasi kesalahan melalui nilai fungsi loss, model dapat menyesuaikan komponen bobot dan biasnya sehingga prediksinya semakin mendekati nilai sebenarnya. Oleh karena itu, pemahaman yang mendalam tentang fungsi loss menjadi kunci dalam pengembangan model machine learning yang efektif dan akurat.

B. Jenis-jenis Fungsi Loss
#

1. Fungsi Loss Mean Squared Error (MSE)
#

a. Definisi Mean Squared Error (MSE)
#

Mean Squared Error (MSE) merupakan metrik yang umum digunakan dalam masalah regresi untuk mengukur seberapa baik model dapat memprediksi nilai kontinu. Formula MSE dihitung dengan mengambil rata-rata dari kuadrat selisih antara setiap nilai prediksi (\( \hat{y} \)) dan nilai sebenarnya (\(y\)) atau ground-truth. Berikut adalah formula dari MSE:

$$ MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $$

dimana:

  • \( n \) adalah jumlah sampel dalam dataset.
  • \( y_i \) adalah nilai sebenarnya dari sampel ke-\(i\).
  • \( \hat{y}_i \) adalah nilai prediksi dari sampel ke-\(i\).

Rumus ini memberikan bobot kuadrat pada selisih antara nilai prediksi dan nilai sebenarnya. Oleh karena itu, MSE sangat peka terhadap kesalahan besar, sehingga model cenderung meminimalkan kesalahan yang signifikan.

b. Signifikansi MSE dalam Regresi
#

MSE memberikan ukuran seberapa baik model dapat menyesuaikan diri dengan data regresi. Saat mengoptimalkan model untuk meminimalkan MSE, model cenderung memberikan perhatian lebih pada data yang memiliki pengaruh besar terhadap kesalahan total. Namun, perlu diingat bahwa MSE dapat rentan terhadap pengaruh outlier, sehingga interpretasinya harus dilakukan dengan hati-hati terutama jika dataset mengandung data yang ekstrem.

c. Interpretasi MSE
#

MSE memberikan kita ukuran seberapa baik model regresi kita cocok dengan data sebenarnya. Semakin rendah nilai MSE, semakin baik model kita dalam memprediksi nilai target (ground-truth). Untuk memberikan gambaran lebih jelas tentang interpretasi MSE, mari kita lihat contoh sederhana menggunakan Python.

# Import library
import numpy as np
from sklearn.metrics import mean_squared_error

# Contoh data
actual_values = np.array([2, 4, 5, 4, 5])
predicted_values = np.array([1.5, 3.5, 4.5, 4, 5.5])

# Menghitung MSE
mse_value = mean_squared_error(actual_values, predicted_values)

# Menampilkan hasil
print(f'Actual Values: {actual_values}')
print(f'Predicted Values: {predicted_values}')
print(f'Mean Squared Error (MSE): {mse_value}')

Pada contoh ini, kita memiliki beberapa nilai sebenarnya (actual_values) dan nilai prediksi (predicted_values). Kemudian, kita menggunakan fungsi mean_squared_error dari scikit-learn untuk menghitung nilai MSE.

Outputnya akan terlihat seperti ini:

Actual Values: [2 4 5 4 5]
Predicted Values: [1.5 3.5 4.5 4.  5.5]
Mean Squared Error (MSE): 0.5

Pada hasil ini, kita melihat nilai aktual, nilai prediksi, dan nilai MSE yang dihasilkan oleh model. Dalam konteks ini, nilai MSE adalah 0.5, yang menunjukkan seberapa baik model kita memfitting data sebenarnya. Semakin kecil nilai MSE, semakin baik kinerja model dalam memprediksi data target.

Penting untuk dicatat bahwa pemahaman konteks data sangat penting saat menginterpretasikan MSE. Misalnya, jika nilai MSE sangat besar, perlu dipertimbangkan apakah ini disebabkan oleh outlier atau kesalahan dalam model itu sendiri.

d. Kelebihan dan Kekurangan MSE
#

Kelebihan MSE terletak pada kemampuannya memberikan penalitas yang signifikan terhadap kesalahan besar, sehingga model cenderung fokus pada presisi prediksi. Namun, kekurangan MSE adalah ketidak-robustannya terhadap data yang mengandung outlier, yang dapat mengakibatkan evaluasi yang tidak akurat jika distribusi datanya tidak simetris.

2. Fungsi Loss Cross-Entropy (CE)
#

a. Definisi Cross-Entropy (CE)
#

Fungsi loss cross-entropy (CE), atau sering disebut sebagai log loss, merupakan metrik evaluasi yang umum digunakan dalam masalah klasifikasi. Rumus matematis dari CE untuk dua kelas (\(K = 2\)) adalah sebagai berikut:

$$ H(y, \hat{y}) = -\frac{1}{N} \sum_{i=1}^{N} [y_i \cdot \log(\hat{y}_i) + (1 - y_i) \cdot \log(1 - \hat{y}_i)] $$

dimana:

  • \( N \) adalah jumlah sampel dalam dataset.
  • \( y_i \) adalah label aktual dari sampel ke-\(i\), dengan \(y_i\) bernilai 0 atau 1.
  • \( \hat{y}_i \) adalah nilai prediksi dari sampel ke-\(i\), yang berkisar antara 0 dan 1.

Rumus ini mengukur perbedaan antara distribusi probabilitas aktual (\(y\)) dan distribusi probabilitas prediksi (\(\hat{y}\)). Tujuan optimisasi adalah meminimalkan nilai CE.

b. Aplikasinya dalam Klasifikasi
#

CE sangat cocok untuk masalah klasifikasi karena memodelkan bagaimana model menilai keyakinannya terhadap kelas yang benar. Fungsi ini memberikan pinalti tinggi jika model sangat yakin pada kelas yang salah.

Ketika kita memiliki lebih dari dua kelas (\(K > 2\)), rumus CE diperluas menjadi:

\[ H(y, \hat{y}) = -\frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \cdot \log(\hat{y}_{i,k}) \]

dengan \( y_{i,k} \) adalah indikator fungsi yang bernilai 1 jika kelas sebenarnya dari sampel \(i\) adalah \(k\), dan 0 jika sebaliknya.

d. Interpretasi CE
#

CE digunakan untuk mengukur seberapa baik model klasifikasi memprediksi distribusi probabilitas kelas aktual. Semakin rendah nilai CE, semakin baik model dalam mengekspresikan keyakinannya terhadap kelas yang benar. Untuk memberikan interpretasi lebih jelas, mari lihat contoh sederhana menggunakan Python.

# Import library
import numpy as np
from sklearn.metrics import log_loss
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# Contoh data
X = np.array([[1.2, 0.5], [2.1, 1.1], [3.3, 1.9], [4.8, 2.5]])
y = np.array([0, 0, 1, 1])

# Membagi data menjadi data latih dan data uji
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# Melatih model logistic regression
model = LogisticRegression()
model.fit(X_train, y_train)

# Prediksi probabilitas kelas pada data uji
predicted_probs = model.predict_proba(X_test)

# Menghitung Cross-Entropy
cross_entropy_value = log_loss(y_test, predicted_probs)

# Menampilkan hasil
print(f'Actual Labels: {y_test}')
print(f'Predicted Probabilities:\n{predicted_probs}')
print(f'Cross-Entropy: {cross_entropy_value}')

Pada contoh ini, kita menggunakan sebuah model regresi untuk klasifikasi dan menghitung CE menggunakan log_loss dari scikit-learn. Outputnya akan terlihat seperti ini:

Actual Labels: [1 0]
Predicted Probabilities:
[[0.14167878 0.85832122]
 [0.90145045 0.09854955]]
Cross-Entropy: 0.44095908022475524

Pada hasil ini, kita melihat label aktual, probabilitas prediksi untuk setiap kelas pada data uji, dan nilai CE. Semakin kecil nilai CE, semakin baik model kita dalam memprediksi probabilitas kelas aktual.

c. Perbandingan CE dengan Fungsi Loss Lainnya
#

Dibandingkan dengan MSE yang lebih cocok untuk regresi, CE lebih sesuai untuk klasifikasi. MSE mengukur perbedaan kuadrat antara nilai prediksi dan nilai sebenarnya, sementara CE lebih fokus pada distribusi probabilitas kelas. Keuntungan CE terlihat ketika kita memiliki kelas yang tidak seimbang atau saat model menghadapi situasi di mana meminimalkan pinalti untuk kelas yang salah lebih penting.

3. Fungsi Loss Hinge
#

a. Definisi Loss Hinge
#

Fungsi loss hinge adalah fungsi loss yang umum digunakan dalam masalah klasifikasi biner, terutama dalam algoritma Support Vector Machines (SVM). Rumus matematis loss hinge untuk satu sampel adalah sebagai berikut:

\[ H(y, f(x)) = \max(0, 1 - y \cdot f(x)) \]

dimana:

  • \( y \) adalah label aktual (±1) dari sampel.
  • \( f(x) \) adalah nilai prediksi model untuk sampel \(x\).

Loss hinge memberikan pinalti pada prediksi yang salah dan menjadi nol ketika prediksi sudah benar (nilai \(y \cdot f(x)\) sudah lebih dari 1).

b. Kaitannya dengan Klasifikasi Biner dan Karakteristiknya
#

Fungsi loss hinge efektif digunakan dalam masalah klasifikasi biner ketika kita ingin menciptakan batas keputusan yang jelas antara dua kelas. Karakteristik utama loss hinge adalah memberikan toleransi terhadap prediksi yang dekat dengan batas keputusan dan memberikan pinalti ketika prediksi berada di sisi yang salah dari garis batas.

Dalam SVM, tujuan optimisasi adalah meminimalkan loss hinge bersamaan dengan memaksimalkan margin antara kelas. Margin adalah jarak antara batas keputusan dan titik terdekat dari setiap kelas.

c. Contoh Penerapan Fungsi Loss Hinge dalam Python
#

Berikut adalah contoh sederhana penerapan loss hinge menggunakan Python dan library scikit-learn:

# Import library
from sklearn.metrics import hinge_loss
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# Contoh data
X = [[1], [2], [3], [4], [5]]
y = [1, 1, -1, -1, -1]

# Membagi data menjadi data latih dan data uji
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# Melatih model SVM dengan Hinge Loss
model = SVC(kernel='linear')
model.fit(X_train, y_train)

# Menghitung Hinge Loss pada data uji
hinge_loss_value = hinge_loss(y_test, model.decision_function(X_test))

# Menampilkan hasil
print(f'Actual Labels: {y_test}')
print(f'Decision Function Values: {model.decision_function(X_test)}')
print(f'Hinge Loss: {hinge_loss_value}')

Outputnya akan terlihat seperti ini:

Actual Labels: [-1, 1]
Decision Function Values: [-1.10714286  0.39285714]
Hinge Loss: 0.1428571428571429

Pada hasil ini, kita melihat label aktual, nilai decision function yang dihasilkan oleh model SVM, dan nilai loss hinge pada data uji. Semakin kecil nilai loss hinge, semakin baik model dalam menciptakan batas keputusan yang efektif. Perhatikan bahwa nilai loss hinge dapat bervariasi tergantung pada dataset dan model yang digunakan.

Dengan memahami karakteristik dan kegunaan masing-masing fungsi loss, kita dapat lebih bijak dalam memilih fungsi yang paling sesuai dengan jenis masalah machine learning yang dihadapi. Setiap fungsi loss memiliki trade-off dan memahami konteks aplikasinya adalah kunci untuk merancang model yang efektif.

Pengenalan Machine Learning - This article is part of a series.
Part 3: This Article