Membagi Data Latih dan Uji Secara Otomatis Pada Python

Sebenarnya menggunakan data yang kita ambil sekaligus menjadi data latih dan uji tidak diperkenankan. Namun permasalahan itu dapat diselesaikan dengan membagi data yang kita peroleh menjadi data latih dan data uji, misalnya dengan proporsi 70% untuk data latih dan sisanya 30% untuk data uji. Di sini istilah data uji pun kurang pas, yang pas adalah data validasi, mengingat data uji seharusnya diambil dari data di luar data yang kita kumpulkan, dan seharusnya data terkini yang baru saja diambil di luar data latih dan validasi.

Mengapa harus memisahkan data latih dengan data uji? Jawabannya adalah menghindari terjadinya overfitting, yaitu suatu kondisi pelatihan yang hasil uji terhadap data yang dilatih sangat bagus tetapi diuji oleh data lain yang tidak digunakan dalam pelatihan sangat buruk. Overfitting terjadi karena kegagalan model dalam proses generalisasi.

Split Data dengan Skicit-Learning

Python menyediakan satu library terkenal bernama Skicit-Learning yang berisi metode-metode mesin pembelajaran dalam proses regresi, klasifikasi, pengolahan data, dan lain-lain. Fungsi yang disediakan adalah train_test_split dengan parameter berupa proporsi data untuk pengujian. Skicit-Learning atau disingkat Sklearn menyediakan juga sampel data untuk uji coba metode-metode yang ada. Kode berikut membagi data irish menjadi 60% data latih dan 40% data uji. Gunakan Jupyter Notebook atau Google Colab untuk mencoba kode berikut.

  • import numpy as np
  • from sklearn.model_selection import train_test_split
  • from sklearn import datasets
  • from sklearn import svm
  • X, y = datasets.load_iris(return_X_y=True)
  • X.shape, y.shape
  • X_train, X_test, y_train, y_test = train_test_split(
  • X, y, test_size=0.4, random_state=0)
  • X_train.shape, y_train.shape
  • X_test.shape, y_test.shape
  • clf = svm.SVC(kernel=’linear’, C=1).fit(X_train, y_train)
  • clf.score(X_test, y_test)

Contoh di atas menggunakan Support Vector Machine (SVM) dalam melatih model dan mengujinya. Hasil tampil lewat fungsi score.

Tampak akurasi yang dihasilkan sebesar 96,7% ketika diuji dengan data tes sebanyak 40% (test_size=0.4 di kode di atas). Sekian dan semoga bisa sedikit membantu.

Source: scikit-learn.org/stable/modules/cross_validation.html#cross-validation