0Pricing
R Academy · Pelajaran

Hutan Acak dengan ranger

Latih model hutan acak, sesuaikan mtry dan ntrees, lalu nilai galat OOB.

Hutan Acak dengan ranger adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Apa Itu Hutan Acak?

Hutan acak membangun banyak pohon keputusan pada sampel bootstrap dari data, lalu merata-ratakan prediksinya (regresi) atau mengambil suara mayoritas (klasifikasi). Dua sumber keacakan memberi nama pada ansambel ini: pengambilan sampel bootstrap baris, dan pemilihan fitur acak pada setiap pemisahan.

library(ranger)

# Minimal random forest: 500 trees, auto mtry
rf <- ranger(
  medv ~ .,
  data      = MASS::Boston,
  num.trees = 500
)

print(rf)

Parameter mtry

mtry adalah jumlah fitur yang dipertimbangkan secara acak pada setiap pemisahan. Menggunakan lebih sedikit fitur daripada jumlah keseluruhan membuat korelasi antarpohon berkurang sehingga varians menurun. Aturan praktisnya adalah mtry = sqrt(p) untuk klasifikasi dan mtry = p/3 untuk regresi, dengan p sebagai jumlah prediktor.

p <- ncol(MASS::Boston) - 1  # number of predictors

rf_class <- ranger(
  Species ~ ., data = iris,
  num.trees = 500,
  mtry      = floor(sqrt(4))  # sqrt(p) for classification
)

rf_reg <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees = 500,
  mtry      = floor(p / 3)    # p/3 for regression
)

cat('Classification OOB Error:', rf_class$prediction.error)
cat('Regression OOB RMSE:', sqrt(rf_reg$prediction.error))

Galat OOB — Validasi Gratis

Karena setiap pohon dilatih menggunakan sampel bootstrap, kira-kira sepertiga pengamatan tidak disertakan (out-of-bag, OOB). Sampel OOB ini berfungsi sebagai set validasi bawaan untuk setiap pohon. Galat OOB agregat merupakan perkiraan galat pengujian yang hampir tidak bias—tidak diperlukan set validasi terpisah.

rf <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees = 500,
  mtry      = 4
)

# OOB MSE
cat('OOB MSE:', rf$prediction.error)

# OOB RMSE
cat('OOB RMSE:', sqrt(rf$prediction.error))

# For classification: OOB error rate
rf_cl <- ranger(Species ~ ., data = iris)
cat('OOB Error Rate:', rf_cl$prediction.error)

Kepentingan Variabel

Menetapkan importance = 'impurity' mencatat total penurunan ketidakmurnian simpul (Gini atau MSE) untuk setiap fitur di seluruh pohon. Menetapkan importance = 'permutation' mengukur penurunan akurasi ketika setiap fitur diacak secara acak—metode ini lebih andal, tetapi lebih lambat.

rf_imp <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 500,
  importance = 'impurity'
)

# Sorted importance scores
imp <- sort(rf_imp$variable.importance, decreasing = TRUE)
print(imp)

# Quick plot
barplot(imp, las = 2, col = 'steelblue',
        main = 'Random Forest Variable Importance')

Prediksi dengan ranger

Gunakan predict(rf, data = test) untuk menghasilkan prediksi. Hasilnya berupa daftar; akses prediksi tersebut dengan $predictions. Untuk klasifikasi, prediksi secara bawaan berupa level factor.

set.seed(1)
idx   <- sample(nrow(MASS::Boston), 400)
train <- MASS::Boston[idx, ]
test  <- MASS::Boston[-idx, ]

rf <- ranger(medv ~ ., data = train, num.trees = 500)

pred <- predict(rf, data = test)
test_rmse <- sqrt(mean((pred$predictions - test$medv)^2))
cat('Test RMSE:', round(test_rmse, 3))

Konsep Matriks Kebingungan

Untuk klasifikasi, matriks kebingungan membuat tabulasi silang antara kelas aktual dan kelas prediksi. Metrik utama yang diturunkan darinya meliputi akurasi, presisi (TP / (TP + FP)), recall (TP / (TP + FN)), dan skor F1. ranger menyediakan matriks kebingungan OOB secara langsung.

rf_cl <- ranger(
  Species ~ ., data = iris,
  num.trees = 500,
  mtry      = 2
)

# OOB confusion matrix
print(rf_cl$confusion.matrix)

# OOB error rate
cat('OOB Error Rate:', rf_cl$prediction.error)

# Manual accuracy on OOB predictions
# (1 - error rate)
cat('OOB Accuracy:', 1 - rf_cl$prediction.error)

Menyetel mtry dan num.trees

Lebih banyak pohon selalu mengurangi varians (hingga manfaat tambahannya menurun sekitar 300–500 pohon). Parameter mtry memiliki titik optimal. Perulangan penyetelan sederhana mengevaluasi galat OOB pada suatu rentang nilai mtry untuk menemukan nilai optimal tanpa validasi silang.

mtry_vals <- c(2, 4, 6, 8, 10)
oob_errors <- sapply(mtry_vals, function(m) {
  rf <- ranger(
    medv ~ ., data = MASS::Boston,
    num.trees = 300, mtry = m
  )
  rf$prediction.error
})

best_mtry <- mtry_vals[which.min(oob_errors)]
cat('Best mtry:', best_mtry)
plot(mtry_vals, sqrt(oob_errors), type = 'b',
     xlab = 'mtry', ylab = 'OOB RMSE')

ranger untuk Klasifikasi

Untuk klasifikasi, tetapkan probability = TRUE untuk memperoleh prediksi probabilitas kelas, bukan label tegas. Ini diperlukan untuk menghitung kurva ROC dan memperoleh perkiraan probabilitas yang terkalibrasi, serta sesuai dengan format keluaran yang diharapkan oleh metrik yardstick.

# Ensure the target is a factor
iris$Species <- as.factor(iris$Species)

rf_prob <- ranger(
  Species ~ ., data = iris,
  num.trees   = 300,
  probability = TRUE  # output class probabilities
)

# Predictions are a matrix of probabilities
pred_prob <- predict(rf_prob, data = iris[1:5, ])
print(pred_prob$predictions)

Paralelisme dalam ranger

ranger dirancang untuk kecepatan dan pemrosesan paralel. Tetapkan num.threads untuk menggunakan semua inti CPU yang tersedia. Hal ini dapat menghasilkan percepatan yang signifikan dibandingkan paket randomForest yang lebih lama, terutama untuk kumpulan data besar dengan banyak pohon.

# Use all available cores
rf_fast <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 1000,
  mtry       = 4,
  num.threads = parallel::detectCores()
)

cat('Trees:', rf_fast$num.trees)
cat('Threads used:', rf_fast$num.threads)
cat('OOB RMSE:', sqrt(rf_fast$prediction.error))

ranger melalui tidymodels

Anda dapat menggunakan ranger melalui antarmuka tidymodels, yang menyediakan sintaks konsisten dan terintegrasi dengan alur kerja, validasi silang, serta penyetelan. Tentukan mesin sebagai 'ranger' dan teruskan argumen khusus mesin dengan set_engine().

library(parsnip)
library(workflows)

rf_spec <- rand_forest(
  mtry  = tune(),
  trees = 500,
  min_n = tune()
) |>
  set_engine('ranger', importance = 'impurity') |>
  set_mode('regression')

wf <- workflow() |>
  add_recipe(rec) |>
  add_model(rf_spec)

print(wf)

Menafsirkan Keluaran ranger

Model ranger yang dicetak menampilkan: jumlah pohon, variabel target, jumlah fitur yang digunakan, galat prediksi OOB, dan R-kuadrat (untuk regresi). Selalu periksa galat OOB sebagai pemeriksaan kewajaran cepat—jika nilainya sangat rendah pada kumpulan data besar, curigai kebocoran data.

rf <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 500, mtry = 4,
  importance = 'impurity'
)

# Key output fields
cat('OOB MSE:      ', rf$prediction.error, '\n')
cat('OOB RMSE:     ', sqrt(rf$prediction.error), '\n')
cat('R-squared:    ', rf$r.squared, '\n')
cat('Num trees:    ', rf$num.trees, '\n')
cat('Num features: ', rf$num.independent.variables, '\n')

Pemeriksaan Singkat

Dalam hutan acak yang dibangun dengan ranger, apa yang diperkirakan oleh galat OOB (out-of-bag)?

Ringkasan Hutan Acak

Hal-hal penting dari Hutan Acak dengan ranger:

  • Hutan acak menggabungkan banyak pohon yang dibangun pada sampel bootstrap dengan pemilihan fitur acak pada setiap pemisahan.
  • mtry: sqrt(p) untuk klasifikasi, p/3 untuk regresi; setel parameter ini.
  • Galat OOB menyediakan perkiraan validasi gratis yang hampir tidak bias.
  • importance = 'impurity' atau 'permutation' memberikan skor kepentingan variabel.
  • Tetapkan probability = TRUE untuk keluaran probabilitas kelas dalam klasifikasi.
  • ranger sangat mendukung pemrosesan paralel; gunakan num.threads untuk kumpulan data besar.
  • Integrasikan dengan tidymodels melalui rand_forest() |> set_engine('ranger').
rf <- ranger(
  medv ~ ., data = MASS::Boston,
  num.trees  = 500,
  mtry       = 4,
  importance = 'impurity',
  num.threads = parallel::detectCores()
)

cat('OOB RMSE:', sqrt(rf$prediction.error))
cat('R2:', rf$r.squared)

print(sort(rf$variable.importance, decreasing = TRUE))

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Hutan Acak dengan ranger” gratis?

Ya — teks lengkap “Hutan Acak dengan ranger” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Hutan Acak dengan ranger”?

Latih model hutan acak, sesuaikan mtry dan ntrees, lalu nilai galat OOB. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Hutan Acak dengan ranger” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pohon Keputusan: Dasar Ensemble
  2. Hutan Acak dengan ranger
  3. Peningkatan Gradien dengan xgboost
  4. Kepentingan Fitur dan Interpretasi Model
← Kembali ke R Academy