Teknik Mengatasi Overfitting pada Model - Panduan Lengkap
![]() |
Ilustrasi - Teknik Mengatasi Overfitting |
Overfitting adalah masalah umum dalam Machine Learning di mana model yang dibuat terlalu kompleks dan terlalu cocok dengan data pelatihan, yang mengakibatkan performa model yang buruk pada data baru. Dalam artikel ini, Anda akan mempelajari Teknik Mengatasi Overfitting pada Model.
Teknik Mengatasi Overfitting pada Model
Overfitting adalah masalah yang sering terjadi dalam Machine Learning. Ketika model terlalu kompleks dan terlalu cocok dengan data pelatihan, performa model pada data baru bisa menjadi buruk. Berikut adalah beberapa teknik yang dapat digunakan untuk mengatasi Overfitting pada Model.
Cross-Validation
Cross-Validation adalah teknik yang digunakan untuk menghindari Overfitting pada Model. Ada dua jenis Cross-Validation yang umum digunakan: Leave-One-Out Cross-Validation dan K-Fold Cross-Validation.
Leave-One-Out Cross-Validation
Leave-One-Out Cross-Validation adalah jenis Cross-Validation di mana satu data diambil dari data pelatihan sebagai data uji. Kemudian, model dibuat pada data pelatihan yang tersisa dan diuji pada data uji. Proses ini dilakukan sebanyak jumlah data yang ada. Dengan cara ini, setiap data diuji dan digunakan untuk pelatihan.
K-Fold Cross-Validation
K-Fold Cross-Validation adalah jenis Cross-Validation di mana data pelatihan dibagi menjadi K subset. Kemudian, model dibuat pada K-1 subset dan diuji pada subset yang tersisa. Proses ini dilakukan K kali dengan setiap subset dijadikan data uji. Dengan cara ini, setiap data diuji dan digunakan untuk pelatihan.
Regularisasi
Regularisasi adalah teknik yang digunakan untuk menghindari Overfitting pada Model dengan menambahkan penalti pada fungsi biaya. Ada dua jenis Regularisasi yang umum digunakan: L1 Regularisasi dan L2 Regularisasi.
L1 Regularisasi
L1 Regularisasi menambahkan penalti pada fungsi biaya berdasarkan jumlah parameter yang digunakan dalam model. Hal ini menghasilkan model yang lebih sederhana dengan parameter yang lebih sedikit.
L2 Regularisasi
L2 Regularisasi menambahkan penalti pada fungsi biaya berdasarkan nilai parameter yang digunakan dalam model. Hal ini menghasilkan model yang lebih stabil dan menghindari nilai parameter yang sangat besar.
Early Stopping
Early Stopping adalah teknik yang digunakan untuk menghindari Overfitting pada Model dengan menghentikan proses pelatihan saat performa model pada data uji tidak meningkat. Hal ini menghindari model yang terlalu cocok dengan data pelatihan dan tidak dapat digeneralisasi pada data baru.
Dropout
Dropout adalah teknik yang digunakan untuk menghindari Overfitting pada Model dengan secara acak menghapus sebagian neuron dalam jaringan saraf saat proses pelatihan. Hal ini memaksa jaringan saraf untuk belajar dengan cara yang berbeda dan menghindari ketergantungan pada setiap neuron.
Contoh Praktis Teknik Mengatasi Overfitting pada Model
Berikut adalah beberapa contoh praktis teknik Mengatasi Overfitting pada Model.
Contoh Praktis Cross-Validation
Kita akan menggunakan dataset Iris untuk contoh praktis ini. Kita akan menggunakan K-Fold Cross-Validation dengan K = 5.
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
iris = load_iris()
X, y = iris.data, iris.target
kf = KFold(n_splits=5)
acc_scores = []
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
acc_scores.append(accuracy_score(y_test, y_pred))
print(acc_scores)
print("Mean accuracy: ", sum(acc_scores)/len(acc_scores))
Contoh Praktis Regularisasi
Kita akan menggunakan dataset Boston Housing untuk contoh praktis ini. Kita akan menggunakan L2 Regularisasi dengan alpha = 0.01.
from sklearn.datasets import load_boston
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
boston = load_boston()
X, y = boston.data, boston.target
clf = Ridge(alpha=0.01)
clf.fit(X, y)
y_pred = clf.predict(X)
print(mean_squared_error(y, y_pred))
Contoh Praktis Early Stopping
Kita akan menggunakan dataset MNIST untuk contoh praktis ini. Kita akan menggunakan Early Stopping dengan patience = 5.
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.callbacks import EarlyStopping
from sklearn.preprocessing import StandardScaler
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], -1)
X_test = X_test.reshape(X_test.shape[0], -1)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = Sequential([
Dense(128, activation='relu', input_dim=X_train.shape[1]),
Dense(64, activation='relu'),
Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
early_stopping = EarlyStopping(patience=5, restore_best_weights=True)
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=100, batch_size=128, callbacks=[early_stopping])
Contoh Praktis Dropout
Kita akan menggunakan dataset CIFAR-10 untuk contoh praktis ini. Kita akan menggunakan Dropout dengan rate = 0.2.
import tensorflow as tf from tensorflow.keras.datasets import cifar10 from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense from tensorflow.keras.models import Sequential from tensorflow.keras.optimizers import Adam from sklearn.preprocessing import OneHotEncoder (X_train, y_train), (X_test, y_test) = cifar10.load_data() y_train = OneHotEncoder().fit_transform(y_train).toarray() y_test = OneHotEncoder().fit_transform(y_test).toarray() model = Sequential([ Conv2D(32, (3,3), activation='relu', padding='same', input_shape=X_train.shape[1:]), MaxPooling2D((2,2)), Dropout(0.2), Conv2D(64, (3,3), activation='relu', padding='same'), MaxPooling2D((2,2)), Dropout(0.2), Conv2D(128, (3,3), activation='relu', padding='same'), MaxPooling2D((2,2)), Dropout(0.2), Flatten(), Dense(128, activation='relu'), Dropout(0.2), Dense(10, activation='softmax') ]) model.compile(optimizer=Adam(learning_rate=0.001), loss='categorical_crossentropy', metrics=['accuracy']) model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=100, batch_size=128)
FAQ
-
Apa itu Overfitting pada Model?
Overfitting pada Model adalah kondisi di mana model terlalu cocok dengan data pelatihan dan tidak dapat digeneralisasi pada data baru.
-
Apa penyebab Overfitting pada Model?
Penyebab Overfitting pada Model antara lain terlalu kompleksnya model, jumlah data pelatihan yang terlalu sedikit, dan kelebihan fitur.
-
Apa itu Cross-Validation?
Cross-Validation adalah teknik yang digunakan untuk mengevaluasi performa model dengan membagi data menjadi beberapa subset, di mana setiap subset digunakan sebagai data uji dan pelatihan secara bergantian.
-
Apa itu Regularisasi?
Regularisasi adalah teknik yang digunakan untuk menghindari Overfitting pada Model dengan menambahkan penalti pada fungsi biaya.
-
Apa itu Early Stopping?
Early Stopping adalah teknik yang digunakan untuk menghindari Overfitting pada Model dengan menghentikan pelatihan model ketika performa pada data uji tidak lagi meningkat.
Kesimpulan
Overfitting pada Model dapat menjadi masalah yang serius dalam pengembangan model Machine Learning. Namun, ada beberapa teknik yang dapat digunakan untuk mengatasi masalah ini, seperti Cross-Validation, Regularisasi, Dropout, dan Early Stopping. Sebagai seorang praktisi Machine Learning, penting untuk memahami teknik-teknik ini dan menerapkannya dengan benar untuk menghasilkan model yang akurat dan generalisasi dengan baik.
Referensi:
Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep learning. MIT Press.
Hastie, T., Tibshirani, R., & Friedman, J. (2009). The elements of statistical learning: data mining, inference, and prediction. Springer.
Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., & Salakhutdinov, R. (2014). Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research, 15(1), 1929-1958.
Chollet, F. (2018). Deep Learning with Python. Manning Publications.
Comments
Post a Comment