Simple ML for Weather Classifications

Simple Machine Learning for Weather Classifications using XGBoost

By Najwan Octavian Gerrard

Pada Project ini saya membuat sebuah Machine Learning untuk memprediksi terkait cuaca pada sebuah negara, beserta diperlukan juga data seperti Temperature, kecepatan angin, tekanan atmosfer, UV Index UV, dll.Dan untuk tools yang saya gunakan untuk membuat model ML ini, memakai XGBoost

What is XGBoost?

XGBoost (Extreme Gradient Boosting) adalah salah satu library algoritma Machine Learning yang menggunakan Decision Tree untuk melakukan Classification, Regression dan Ranking. XGBoost sendiri itu open source, jadi kita dapat melakukan training dan test model dengan data yang besar sekalipun secara gratis

Benefit XGBoost :

  • Execution Speed, dari segi kecepatan sendiri itu cukup krusial, apa lagi jika memiliki dataset yang ssangat besar, kecepatan menjadi cukup penting, dengan menggunakan XGBoost, kita tidak perlu terlalu khawatir terkait kecepatannya, karena XGBoost sendiri tergolong cukup cepat walaupun menggunakan dataset yang besar.
  • Model Performance, untuk segi performa model, XGBoost cukup unggul di bandingkan dengan beberapa algoritma lain seperti random forest (RF), gradient boosting machines (GBM), and gradient boosting decision trees (GBDT). Dan pastinya juga dalam membuat model yang kita cari itu terkait kinerja juga, kan tidak mungkin kita membuat model yang kinerjanya jelek.

jika ingin lebih lanjut mengetahui terkait XGBoost ini, anda dapat mengunjungi website resmi dari XGBoost.

Lalu lanjut untuk Project yang saya buat kurang lebih seperti ini langkah - langkahnya :

  • Import Library pendukungnya.
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.preprocessing import LabelEncoder
    import numpy as np
    import pandas as pd
    import xgboost as xgb
    import os
    

  • Import dataset yang akan digunakan untuk memubuat Machine Learningnya, untuk dataset nya bisa menggunakan yang dari repo github saya yang ini
    df = pd.read_csv('weather_classification_data.csv')
    

  • Inisialisasi untuk menggunakan data yang berbentuk string / kata menjadi angka numerik
    encoder = LabelEncoder()
    

  • Melakukan Transformasi data yang sebelumnya string / kata menjadi angka. Karena pada data yang saya gunakan yang bebentuk string hanya pada Cloud Cover, Location, Season, maka data itu akan saya ubah
    df['Cloud Cover'] = encoder.fit_transform(df['Cloud Cover'])
    df['Location'] = encoder.fit_transform(df['Location'])
    df['Season'] = encoder.fit_transform(df['Season'])
    

  • Melakukan Transformasi juga untuk data yang nantinya akan dibuat sebagai Target Data, karena untuk targetnya ini bertipe String, jadi harus di ubah dulu ke numerik
    y_target = encoder.fit_transform(df["Weather Type"])
    

  • Melakukan Pemisahan antara Data untuk Feature, dan Data untuk Target.
    dataset = df[[i for i in df.columns[:-1]]]
    

  • Kemudian di lanjutkan untuk pembagian dataset, yang nantinya akan digunakan untuk Training dan untuk Testing. Pada case kali ini saya ingin membaginya untuk Test size nya itu 20 % (sesuai parameter test_size=0.2).
    x_train, x_test, y_train, y_test = train_test_split(
      dataset, 
      y_target,
      test_size=0.2,
      random_state=50
    )
    

  • Kemudian selanjutnya yaitu menentukan parameter untuk model Machine Learning ini. Seperti ini kurang lebih keterangannya :
    • objective: ‘multi:softmax’ Untuk menentukan jenis klasifikasi. ‘multi:softmax’ berarti model menggunakan softmax untuk klasifikasi multikelas.
    • num_class: len(df.columns[:-1]) Untuk menentukan jumlah kelas dalam masalah klasifikasi. df.columns[:-1] mengambil semua kolom kecuali kolom terakhir (biasanya label/target).
    • eta: 0.01 Untuk Learning rate, juga dikenal sebagai step size shrinkage. Nilai kecil (misalnya 0.01) membantu model belajar lebih lambat tetapi lebih stabil.
    • max_depth: 6 Untuk menentukan kedalaman maksimum pohon keputusan dalam model. Kedalaman yang lebih besar dapat meningkatkan kapasitas model tetapi juga meningkatkan risiko overfitting.
    parameters = {
        'objective':'multi:softmax',
        'num_class': len(df.columns[:-1]),
        'eta': 0.01,
        'max_depth': 6,
    }
    

  • Melakukan Pembuatan Model dengan XGBClassifier, lalu save model ke file XGBClassifier.json.
    model = xgb.XGBClassifier(
        parameters
    )
    model.fit(x_train, y_train)
    model.save_model("XGBClassifier.json")
    

  • Melakukan Pengujian terkait Model nya, apakah bagus atau tidak. Untuk pengukurannya sendiri, semakin dekat angka accuracy dari model mendekati angka 1, maka model tersebut sangat baik. Jika angka nya di bawah 0.5, bisa di kategorikan model tersebut kurang layak digunakan, karena prediksi nya hampir banyak salah nya dari pada benarnya
    pred = model.predict(x_test)
    accuracy = accuracy_score(y_test, pred)
    print("Accuracy:", accuracy)
    
Share: LinkedIn