/* */
MEDIA PENDIDIKAN dan PEMBELAJARAN Ilmu Mantiq (Logika): Kaidah Berfikir yang Memelihara Akal, agar tidak terjadi Kerancuan dalam Berfikir.

Wednesday, February 26, 2025

Shuffling dalam Machine Learning

1. Apa Itu Shuffling?

Shuffling adalah proses mengacak urutan data dalam dataset sebelum digunakan untuk pelatihan atau evaluasi model machine learning. Teknik ini digunakan untuk mencegah model belajar dari pola yang tidak diinginkan yang mungkin muncul akibat urutan asli data.

Mengapa Shuffling Penting?

       Menghindari bias dalam pembelajaran model Jika data diurutkan berdasarkan kelas tertentu, model mungkin hanya belajar dari satu kategori terlebih dahulu, menyebabkan bias dalam pelatihan.

       Meningkatkan generalisasi model Dengan mengacak data, model dapat belajar dari distribusi yang lebih beragam, membuatnya lebih andal dalam menangani data baru.

       Mencegah model menghafal urutan data Tanpa shuffling, model dapat mengingat pola urutan alih-alih belajar dari fitur data.

 

2. Kapan Shuffling Dibutuhkan?

Shuffling sangat penting dalam beberapa skenario, tetapi bisa diabaikan dalam kasus tertentu.

2.1. Kasus yang Memerlukan Shuffling:

       Supervised Learning (Regresi/Klasifikasi) Data harus diacak sebelum dibagi menjadi training dan testing agar distribusinya merata.

       K-Fold Cross-Validation Setiap fold harus memiliki distribusi data yang serupa.

       Batch Training dalam Deep Learning Data harus di-shuffle agar model belajar pola yang lebih umum.

2.2. Kasus di Mana Shuffling Tidak Diperlukan:

       Time Series Forecasting (Prediksi Waktu) Urutan waktu harus dipertahankan agar model memahami tren historis.

       Data Urutan (Sequential Data) seperti NLP atau Stock Market Dalam kasus seperti pemrosesan teks atau harga saham, urutan data adalah informasi penting.

 

3. Cara Melakukan Shuffling dalam Machine Learning

a. Shuffling dalam Train-Test Split

       Saat membagi data menjadi training dan testing, kita harus memastikan bahwa data diacak.
Implementasi dalam Python dengan train_test_split dari Scikit-Learn:

from sklearn.model_selection import train_test_split

import numpy as np

 

# Data contoh

X = np.array([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]) # Fitur

y = np.array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1]) # Label

 

# Split data dengan shuffling

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=42)

 

print("Training Data:", X_train.flatten())

print("Testing Data:", X_test.flatten())

🔹 shuffle=True memastikan bahwa data diacak sebelum dibagi.
🔹 random_state=42 membuat hasil shuffling tetap sama setiap kali dijalankan.

 

b. Shuffling dalam Pandas DataFrame

Jika dataset berbentuk Pandas DataFrame, kita bisa menggunakan fungsi .sample() untuk mengacak baris data.

Contoh:

import pandas as pd

 

# Contoh dataset

data = {'Fitur': [1, 2, 3, 4, 5], 'Label': ['A', 'B', 'A', 'B', 'A']}

df = pd.DataFrame(data)

 

# Shuffling dataset

df_shuffled = df.sample(frac=1, random_state=42).reset_index(drop=True)

 

print(df_shuffled)

🔹 frac=1 memastikan bahwa seluruh dataset diambil dalam keadaan teracak.
🔹 reset_index(drop=True) mencegah indeks lama tetap muncul setelah shuffling.

 

c. Shuffling dalam K-Fold Cross Validation

Saat melakukan cross-validation, shuffling membantu mendapatkan distribusi data yang lebih baik di setiap fold.

Implementasi dalam Scikit-Learn:

from sklearn.model_selection import KFold

 

X = np.array(range(1, 11)) # Data contoh

kf = KFold(n_splits=5, shuffle=True, random_state=42)

 

for train_index, test_index in kf.split(X):

print("Train:", X[train_index], "Test:", X[test_index])

🔹 Tanpa shuffling, setiap fold mungkin akan memiliki pola yang kurang representatif.

 

d. Shuffling dalam Deep Learning (TensorFlow/PyTorch)

Dalam deep learning, shuffling sangat penting ketika menggunakan batch training.

       Implementasi dalam TensorFlow:

import tensorflow as tf

 

dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

dataset = dataset.shuffle(buffer_size=10)

 

for item in dataset:

print(item.numpy())

🔹 buffer_size=10 menentukan jumlah elemen yang akan diacak pada satu waktu.

       Implementasi dalam PyTorch:

from torch.utils.data import DataLoader, TensorDataset

import torch

 

data = torch.tensor([[1, 2], [3, 4], [5, 6], [7, 8]])

labels = torch.tensor([0, 1, 0, 1])

 

dataset = TensorDataset(data, labels)

dataloader = DataLoader(dataset, batch_size=2, shuffle=True)

 

for batch in dataloader:

print(batch)

🔹 shuffle=True memastikan data batch berbeda setiap epoch, membantu model belajar lebih baik.

 

4. Kesalahan Umum dalam Shuffling dan Cara Menghindarinya

4.1. Tidak Melakukan Shuffling pada Dataset yang Tidak Terurut

  • Masalah: Jika data tidak di-shuffle sebelum training, model bisa belajar pola yang salah.
  • Solusi: Gunakan shuffle=True dalam pembagian dataset.

4.2. Melakukan Shuffling pada Data Time Series

  • Masalah: Shuffling pada data deret waktu (misalnya harga saham) bisa merusak pola tren.
  • Solusi: Gunakan metode seperti rolling window atau time-series cross-validation.

4.3. Tidak Menggunakan random_state untuk Reproducibility

  • Masalah: Hasil shuffling berbeda setiap kali kode dijalankan.
  • Solusi: Gunakan random_state=42 atau nilai tetap lainnya agar hasil bisa direplikasi.

 

5. Kesimpulan

       Shuffling adalah teknik mengacak urutan data untuk mencegah bias dan meningkatkan generalisasi model.

       Digunakan dalam train-test split, cross-validation, dan batch training dalam deep learning.

       Harus dihindari pada data time series atau data urutan lainnya.

       Kesalahan umum seperti tidak melakukan shuffling sebelum training dapat menyebabkan bias dalam model.

Dengan menerapkan shuffling dengan benar, performa model machine learning dapat meningkat secara signifikan!

 

 

 

 

 

 

 

 

 

 

/*
*/