Cara melakukan bagging di r (langkah demi langkah)
Saat kami membuat pohon keputusan untuk kumpulan data tertentu, kami hanya menggunakan satu kumpulan data pelatihan untuk membangun model.
Namun, kelemahan dari penggunaan pohon keputusan tunggal adalah bahwa pohon tersebut cenderung memiliki varians yang tinggi . Artinya, jika kita membagi kumpulan data menjadi dua bagian dan menerapkan pohon keputusan pada kedua bagian tersebut, hasilnya bisa sangat berbeda.
Salah satu metode yang dapat kita gunakan untuk mengurangi varians dari satu pohon keputusan dikenal sebagai bagging , terkadang disebut agregasi bootstrap .
Pengantongan berfungsi sebagai berikut:
1. Ambil b sampel bootstrap dari kumpulan data asli.
2. Buat pohon keputusan untuk setiap sampel bootstrap.
3. Rata-ratakan prediksi dari setiap pohon untuk mendapatkan model akhir.
Dengan membangun ratusan atau bahkan ribuan pohon keputusan individual dan mengambil prediksi rata-rata dari semua pohon, kita sering kali mendapatkan model tas yang sesuai yang menghasilkan tingkat kesalahan pengujian yang jauh lebih rendah dibandingkan dengan pohon keputusan tunggal.
Tutorial ini memberikan contoh langkah demi langkah tentang cara membuat model yang dikantongi di R.
Langkah 1: Muat paket yang diperlukan
Pertama, kami akan memuat paket yang diperlukan untuk contoh ini:
library (dplyr) #for data wrangling library (e1071) #for calculating variable importance library (caret) #for general model fitting library (rpart) #for fitting decision trees library (ipred) #for fitting bagged decision trees
Langkah 2: Pasangkan model yang dikantongi
Untuk contoh ini, kami akan menggunakan kumpulan data R bawaan yang disebut Kualitas Udara yang berisi pengukuran kualitas udara di Kota New York selama 153 hari.
#view structure of air quality dataset
str(airquality)
'data.frame': 153 obs. of 6 variables:
$ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
$Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
$Month: int 5 5 5 5 5 5 5 5 5 5 ...
$Day: int 1 2 3 4 5 6 7 8 9 10 ...
Kode berikut menunjukkan cara menyesuaikan model yang dikantongi di R menggunakan fungsi bagging() dari perpustakaan ipred .
#make this example reproducible set.seed(1) #fit the bagged model bag <- bagging( formula = Ozone ~ ., data = airquality, nbagg = 150 , coob = TRUE , control = rpart. control (minsplit = 2 , cp = 0 ) ) #display fitted bagged model bag Bagging regression trees with 150 bootstrap replications Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, coob = TRUE, control = rpart.control(minsplit = 2, cp = 0)) Out-of-bag estimate of root mean squared error: 17.4973
Perhatikan bahwa kami memilih untuk menggunakan 150 sampel bootstrap untuk membangun model yang dikantongi dan kami menetapkan bahwa coob adalah TRUE untuk mendapatkan perkiraan kesalahan di luar kantong.
Kami juga menggunakan spesifikasi berikut dalam fungsi rpart.control() :
- minsplit = 2: Ini memberitahu model untuk hanya memerlukan 2 observasi dalam satu node untuk dipisahkan.
- cp = 0 . Ini adalah parameter kompleksitas. Dengan menyetelnya ke 0, kami tidak mengharuskan model untuk dapat meningkatkan kesesuaian keseluruhan dengan cara apa pun untuk melakukan pemisahan.
Pada dasarnya, kedua argumen ini memungkinkan setiap pohon untuk tumbuh sangat dalam, sehingga menghasilkan pohon dengan varian tinggi namun bias rendah. Kemudian, saat kami menerapkan bagging, kami dapat mengurangi varian model akhir sekaligus menjaga bias tetap rendah.
Dari hasil model, kita dapat melihat estimasi RMSE out-of-bag adalah 17.4973 . Ini adalah perbedaan rata-rata antara nilai perkiraan ozon dan nilai sebenarnya yang diamati.
Langkah 3: Visualisasikan pentingnya prediktor
Meskipun model yang dikantongi cenderung memberikan prediksi yang lebih akurat dibandingkan pohon keputusan individual, sulit untuk menafsirkan dan memvisualisasikan hasil dari model yang dikantongi yang sesuai.
Namun, kita dapat memvisualisasikan pentingnya variabel prediktor dengan menghitung total pengurangan RSS (jumlah sisa kuadrat) karena distribusi pada prediktor tertentu, yang dirata-ratakan pada semua pohon. Semakin besar nilainya, semakin penting prediktornya.
Kode berikut menunjukkan cara membuat plot kepentingan variabel untuk model tas pas, menggunakan fungsi varImp() dari pustaka sisipan :
#calculate variable importance VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag)) #sort variable importance descending VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),] #visualize variable importance with horizontal bar plot barplot(VI_plot$Overall, names.arg= rownames (VI_plot), horiz= TRUE , col=' steelblue ', xlab=' Variable Importance ')
Kita dapat melihat bahwa Solar.R adalah variabel prediktor terpenting dalam model, sedangkan Bulan adalah variabel yang paling tidak penting.
Langkah 4: Gunakan model untuk membuat prediksi
Terakhir, kita dapat menggunakan model tas pas untuk membuat prediksi tentang observasi baru.
#define new observation new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5) #use fitted bagged model to predict Ozone value of new observation predict(bag, newdata=new) 24.4866666666667
Berdasarkan nilai variabel prediktor, model tas pas memperkirakan nilai ozon pada hari tersebut adalah 24.487 .
Kode R lengkap yang digunakan dalam contoh ini dapat ditemukan di sini .