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)