Overfitting dan Underfitting pada Model

Saat membuat model pada machine learning kita akan dihadapkan masalah overfitting dan undefitting.

Contoh graphic data antara ukuran dan harga rumah. Model yang akurat, adalah model yang membentuk kurva yang smooth mengikuti pola trend dari data.



Overfitting terjadi saat model menghapal semua data training, tanpa menganalisis pola trend dari data. Secara ekstrim dapat digambarkan model yang overfitting adalah seperti berikut. Model seperti ini tidak akan memberikan prediksi yang akurat.

Underfitting adalah kebalikannya, model yang terlalu simple, dan tidak menganalisis data training secara keseluruhan.


Pada kenyataan, saat membuat model machine learning, feature yang digunakan tidak hanya satu, seperti contoh diatas. Oleh karena itu, kita tidak dapat melakukan ploting data dalam bentuk graphic untuk melihat seberapa baik model kita menganalisa trend dari data training.

Untuk mengetahui seberapa jauh model kita bekerja, kita gunakan training dataset dan test dataset error rates.

Jika error rates pada training dataset rendah, dan error rates test dataset tinggi, ini berarti overfitting. Penyebabnya adalah model yang terlalu kompleks.

Jika error rates pada training dataset dan test dataset tinggi, ini berarti underfitting, model tidak menangkap trend dengan baik. Penyebabnya model yang terlalu simple.

Jika error rates pada training dataset dan test dataset rendah, berarti good fit.

Grid Search

Underfitting dan overfitting dapat diselesaikan dengan cara mengatur hyperparameter dari model.

Cara termudah untuk melakukan tuning pada parameter adalah dengan trial dan error, namun parameter pada sebuah model cukup banyak, dan bisa angka berapa saja.

model = ensemble.GradientBoostingRegressor(
    n_estimators=1000,
    learning_rate=0.1,
    max_depth=6,
    min_sample_leaf=9,
    max_features=0.1
    loss='hubber'
)

Jika harus melakukan brute force satu persatu, cukup sulit dan memakan waktu. Untungnya scikit-learn menyediakan kemudahan untuk mengotomasi proses trial error ini.

Berikut code python yang sudah dimodifikasi agar kita dapat melakukan trial and error hyperparameter pada model.


import panda as pd
import numpy
from sklearn.model_selection import train_test_split
from sklearn import ensemble

df = pd.read_csv("nama_file_data_set.csv")

del df["no_rumah"]
del df["nama_jalan"]
del df["kodepos"]

features_df = pd.get_dummies(df, columns=['tipe_garasi', 'kota'])

del features_df['harga_jual']

X = features_df.as_matrix()
y = df['harga_jual'].as_matrix()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

model = ensemble.GradientBoostingRegressor()

param_grid{
    n_estimators: [500, 1000, 3000],
    learning_rate= [0.1, 0.05, 0.02, 0.01],
    max_depth: [4, 6],
    min_sample_leaf: [3, 5, 7, 9, 11],
    max_features: [1.0, 0.3, 0.1],
    loss: ['ls',  'lad', 'hubber']
}

gs_cv = GridSearchCV(model, param_grid, n_jobs=4)
gs_cv.fit(X_train, y_train)

print(gs_cv.best_params_)

mse = mean_absolute_error(y_train, gs_cv.predict(X_train))
print("Training Set Mean Absolute Error: %.4f" % mse)

mse = mean_absolute_error(y_test, gs_cv.predict(X_test))
print("Test Set Mean Absolute Error: %.4f" % mse)


Catatan
  • Melakukan GridSearchCV ini akan memakan waktu dan resouce cukup besar, karena melakukan testing terhadap list parameter yang diberikan.
  • Kelebihan dari GridSearchCV ini, secara otomatis akan melakukan data slicing dari training dataset kita, jadi model belum melihat real training dataset.
  • Setelah selesai, parameter yang terbaik dapat kita gunakan untuk membuat model, dan melakukan training dengan training dataset.
Overfitting dan Underfitting pada Model Overfitting dan Underfitting pada Model Reviewed by noname needed on May 24, 2018 Rating: 5

1 comment:

Powered by Blogger.