Menyetel hiperparameter random forest
Seperti pada semua model, kita ingin mengoptimalkan kinerja dengan menyetel hiperparameter. Random forest memiliki banyak hiperparameter, namun yang sering kali paling penting adalah jumlah fitur yang diambil sampelnya pada setiap pemisahan, yaitu max_features pada RandomForestRegressor dari pustaka sklearn. Untuk model seperti random forest yang memiliki unsur keacakan bawaan, kita juga ingin menetapkan random_state. Ini ditetapkan agar hasil kita dapat direproduksi.
Biasanya, kita dapat menggunakan metode GridSearchCV() dari sklearn untuk menelusuri hiperparameter, tetapi pada deret waktu keuangan, kita tidak ingin melakukan cross-validation karena dapat mencampur data. Kita ingin melatih model pada data paling lama dan mengevaluasinya pada data paling baru. Karena itu, kita akan menggunakan ParameterGrid dari sklearn untuk membuat kombinasi hiperparameter yang akan ditelusuri.
Latihan ini merupakan bagian dari kursus
Machine Learning untuk Keuangan dengan Python
Instruksi latihan
- Tetapkan hiperparameter
n_estimatorssebagai daftar dengan satu nilai (200) dalam kamusgrid. - Tetapkan hiperparameter
max_featuressebagai daftar yang berisi 4 dan 8 dalam kamusgrid. - Latih model random forest regressor (
rfr, sudah disiapkan) padatrain_featuresdantrain_targetsuntuk setiap kombinasi hiperparameter,g, di dalam loop. - Hitung R\(^2\) dengan menggunakan
rfr.score()padatest_featuresdan tambahkan hasilnya ke daftartest_scores.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
from sklearn.model_selection import ParameterGrid
# Create a dictionary of hyperparameters to search
grid = {____, 'max_depth': [3], 'max_features': ____, 'random_state': [42]}
test_scores = []
# Loop through the parameter grid, set the hyperparameters, and save the scores
for g in ParameterGrid(grid):
rfr.set_params(**g) # ** is "unpacking" the dictionary
rfr.fit(____, ____)
test_scores.append(rfr.score(____, ____))
# Find best hyperparameters from the test score and print
best_idx = np.argmax(test_scores)
print(test_scores[best_idx], ParameterGrid(grid)[best_idx])