Cara Melakukan Split Dataset untuk Training – Testing – Validation

By | November 26, 2023
824 Views

Cara Melakukan Split Dataset untuk Training – Testing – Validation – Dataset adalah kumpulan data yang disusun secara sistematis dan dapat digunakan untuk keperluan analisis, penelitian, atau pengembangan model. Dataset dapat berupa kumpulan informasi dalam berbagai bentuk, seperti teks, gambar, audio, atau numerik. Dalam konteks analisis data dan pembelajaran mesin, dataset menjadi elemen kunci untuk melatih dan menguji model.

Berikut beberapa konsep dasar terkait dataset:

  1. Observasi/Data Point: Setiap item dalam dataset disebut sebagai observasi atau data point. Misalnya, dalam dataset gambar, setiap gambar mungkin dianggap sebagai satu observasi.
  2. Variabel: Variabel adalah atribut atau fitur tertentu dari setiap observasi. Misalnya, dalam dataset pasien rumah sakit, variabel dapat mencakup usia, jenis kelamin, tekanan darah, dll.
  3. Label: Dalam tugas pembelajaran mesin terawasi, dataset biasanya memiliki label yang menunjukkan output yang diharapkan atau kategori tertentu. Misalnya, dalam dataset pengenalan gambar, label dapat menunjukkan jenis objek yang terdapat dalam gambar.
  4. Training Set dan Test Set: Dataset umumnya dibagi menjadi dua bagian utama: training set (set pelatihan) dan test set (set uji). Training set digunakan untuk melatih model, sedangkan test set digunakan untuk menguji sejauh mana model dapat menggeneralisasi informasi yang telah dipelajari dari training set.
  5. Feature Vector: Setiap observasi dapat direpresentasikan sebagai vektor fitur, yang berisi nilai-nilai dari setiap variabel atau atribut. Ini adalah bentuk representasi data yang mudah dimengerti oleh model pembelajaran mesin.
  6. Preprocessing: Proses membersihkan dan mempersiapkan dataset sebelum digunakan untuk pelatihan model. Ini dapat mencakup penghapusan nilai-nilai yang hilang, normalisasi data, atau konversi label kategorikal menjadi format yang sesuai.
  7. Open Data dan Proprietary Data: Dataset dapat bersifat terbuka (open) yang artinya dapat diakses oleh publik atau bersifat properti dan hanya dapat diakses oleh pihak tertentu.
  8. Big Data: Beberapa dataset sangat besar dan kompleks sehingga memerlukan teknik-teknik khusus untuk analisis dan pemrosesan. Ini dikenal sebagai big data.
See also  Pytorch - loss function Negative log likelihood loss nn.NLLLoss

Contoh-contoh dataset melibatkan berbagai domain, seperti dataset ekonomi, dataset medis, dataset citra, dataset teks, dan banyak lagi. Penting untuk memahami karakteristik dataset saat merancang dan mengimplementasikan model pembelajaran mesin untuk memastikan kualitas dan generalisasi yang baik.

Pembagian Dataset

Dataset dalam konteks pembelajaran mesin umumnya dibagi menjadi tiga bagian utama: dataset pelatihan (training set), dataset pengujian (testing set), dan dataset validasi (validation set). Pembagian ini penting untuk mengukur kinerja model dengan benar dan menghindari overfitting. Berikut adalah penjelasan detail tentang masing-masing:

  1. Dataset Pelatihan (Training Set):
    • Fungsi: Digunakan untuk melatih model.
    • Karakteristik:
      • Terdiri dari sejumlah besar data.
      • Berisi berbagai variasi dan representasi dari data yang mungkin dihadapi model di dunia nyata.
    • Proses Penggunaan:
      • Model mempelajari pola dan hubungan dalam data ini selama proses pelatihan.
      • Parameter model disesuaikan berdasarkan data pelatihan.
  2. Dataset Pengujian (Testing Set):
    • Fungsi: Digunakan untuk mengukur kinerja model pada data yang belum pernah dilihat sebelumnya.
    • Karakteristik:
      • Terpisah sepenuhnya dari dataset pelatihan.
      • Tidak digunakan selama proses pelatihan model.
    • Proses Penggunaan:
      • Setelah model dilatih, diuji pada dataset ini untuk mengukur sejauh mana model dapat menggeneralisasi ke data baru.
      • Hasil pengujian memberikan perkiraan kinerja model di dunia nyata.
  3. Dataset Validasi (Validation Set):
    • Fungsi:
      • Digunakan untuk menilai dan memilih model terbaik selama proses pelatihan.
      • Mencegah overfitting dan membantu tuning parameter model.
    • Karakteristik:
      • Terpisah dari dataset pelatihan dan pengujian.
      • Digunakan untuk memvalidasi kinerja model selama pelatihan.
    • Proses Penggunaan:
      • Model diuji pada dataset validasi setelah setiap epoch atau batch selama pelatihan.
      • Berdasarkan performa pada dataset validasi, dapat dilakukan penyesuaian parameter model atau pemilihan model terbaik.

Pembagian dataset ini membantu mencegah model dari overfitting, yaitu kondisi di mana model terlalu “mengingat” data pelatihan dan kinerjanya menurun pada data baru. Dengan menggunakan dataset pengujian yang terpisah, kita dapat mengukur sejauh mana model dapat memperoleh pengetahuan dari data pelatihan dan menerapkannya dengan baik pada data baru. Dataset validasi membantu memastikan bahwa model yang dihasilkan optimal dan tidak hanya optimal pada data pelatihan.

See also  Mengenal MaxPool2d

Cara Melakukan Split Dataset untuk Training – Testing – Validation

Untuk melakukan split dataset sebenarnya cukup mudah kok, mari kita coba dengan dataset iris

import torch
import numpy as np
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
X = iris.data
y = iris.target

data = np.hstack((X,y.reshape(len(y),1)))
df = pd.DataFrame(data,columns=['x1','x2','x3','x4','y'])

print(df.head(5))

hasilnya

print(df.head(5))
    x1   x2   x3   x4    y
0  5.1  3.5  1.4  0.2  0.0
1  4.9  3.0  1.4  0.2  0.0
2  4.7  3.2  1.3  0.2  0.0
3  4.6  3.1  1.5  0.2  0.0
4  5.0  3.6  1.4  0.2  0.0

kita bisa melihat masing2 kelas mempunyai 30 record

print(df[['x1','y']].groupby('y').count())

hasilnya

     x1
y      
0.0  50
1.0  50
2.0  50

Sekarang kita akan split yaitu training 75%, testing 20% dan validation 5%

[0.75, 0.2, 0.05],

 

class_names = df['y'].unique()
num_class = len(class_names)
image_files = np.arange(0,len(df),1)
 
idx_to_class = {i:j for i, j in enumerate(class_names)}
class_to_idx = {value:key for key,value in idx_to_class.items()}

train_idx, test_idx, val_idx = torch.utils.data.random_split(image_files, 
                                                             [0.75, 0.2, 0.05], 
                                                             generator=torch.Generator().manual_seed(42))
 
train_list = df.loc[train_idx.indices].reset_index()
test_list = df.loc[test_idx.indices].reset_index()
val_list = df.loc[val_idx.indices].reset_index()

hasilnya bisa kalian lihat untuk train_list sebagai berikut

     index   x1   x2   x3   x4    y
0       42  4.4  3.2  1.3  0.2  0.0
1       95  5.7  3.0  4.2  1.2  1.0
2       30  4.8  3.1  1.6  0.2  0.0
3       64  5.6  2.9  3.6  1.3  1.0
4       52  6.9  3.1  4.9  1.5  1.0
..     ...  ...  ...  ...  ...  ...
108      1  4.9  3.0  1.4  0.2  0.0
109    103  6.3  2.9  5.6  1.8  2.0
110    125  7.2  3.2  6.0  1.8  2.0
111     85  6.0  3.4  4.5  1.6  1.0
112      2  4.7  3.2  1.3  0.2  0.0