Jak wykonać pakowanie w r (krok po kroku)
Kiedy tworzymy drzewo decyzyjne dla danego zbioru danych, do budowy modelu używamy tylko jednego zbioru uczącego.
Jednakże wadą stosowania pojedynczego drzewa decyzyjnego jest to, że charakteryzuje się ono dużą wariancją . Oznacza to, że jeśli podzielimy zbiór danych na dwie połowy i zastosujemy drzewo decyzyjne do obu połówek, wyniki mogą być bardzo różne.
Jedną z metod, którą możemy zastosować w celu zmniejszenia wariancji pojedynczego drzewa decyzyjnego, jest gromadzenie danych , czasami nazywane agregacją bootstrap .
Pakowanie działa w następujący sposób:
1. Pobierz próbki bootstrapowe z oryginalnego zbioru danych.
2. Utwórz drzewo decyzyjne dla każdej próbki bootstrap.
3. Uśrednij przewidywania z każdego drzewa, aby otrzymać ostateczny model.
Budując setki, a nawet tysiące pojedynczych drzew decyzyjnych i biorąc średnie przewidywania wszystkich drzew, często otrzymujemy model z dopasowanym workiem, który daje znacznie niższy poziom błędów testu w porównaniu z pojedynczym drzewem decyzyjnym.
W tym samouczku przedstawiono krok po kroku przykład tworzenia modelu workowanego w języku R.
Krok 1: Załaduj niezbędne pakiety
Najpierw załadujemy niezbędne pakiety dla tego przykładu:
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
Krok 2: Załóż model w worku
W tym przykładzie użyjemy wbudowanego zbioru danych R o nazwie Air Quality , który zawiera pomiary jakości powietrza w Nowym Jorku w ciągu 153 poszczególnych dni.
#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 ...
Poniższy kod pokazuje, jak dopasować model w pakiecie w R przy użyciu funkcji bagging() z biblioteki 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
Należy zauważyć, że do zbudowania modelu w workach zdecydowaliśmy się użyć 150 próbek ładowanych metodą ładowania początkowego i określiliśmy, że wartość coob ma wartość PRAWDA , aby uzyskać szacunkowy błąd po wyjęciu z worka.
W funkcji rpart.control() zastosowaliśmy także następujące specyfikacje:
- minsplit = 2: Mówi modelowi, że do podziału potrzebne są tylko 2 obserwacje w węźle.
- cp = 0 . Jest to parametr złożoności. Ustawiając go na 0, nie wymagamy, aby model był w stanie w jakikolwiek sposób poprawić ogólne dopasowanie, aby wykonać podział.
Zasadniczo te dwa argumenty pozwalają poszczególnym drzewom rosnąć niezwykle głęboko, co prowadzi do drzew o dużej wariancji, ale niskim obciążeniu. Następnie, stosując workowanie, jesteśmy w stanie zmniejszyć wariancję ostatecznego modelu, utrzymując jednocześnie niskie odchylenie.
Z wyników modelu wynika, że szacunkowy RMSE out-of-bag wynosi 17,4973 . Jest to średnia różnica między przewidywaną wartością ozonu a rzeczywistą obserwowaną wartością.
Krok 3: Wizualizuj znaczenie predyktorów
Chociaż modele workowe zwykle zapewniają dokładniejsze przewidywania niż pojedyncze drzewa decyzyjne, trudno jest zinterpretować i wizualizować wyniki dopasowanych modeli workowych.
Możemy jednak zwizualizować znaczenie zmiennych predykcyjnych, obliczając całkowitą redukcję RSS (resztkowej sumy kwadratów) w wyniku rozkładu na danym predyktorze, uśrednionej dla wszystkich drzew. Im większa wartość, tym ważniejszy predyktor.
Poniższy kod pokazuje, jak utworzyć wykres o zmiennej ważności dla modelu dopasowanej torby, korzystając z funkcji varImp() z biblioteki caret :
#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 ')
Widzimy, że Solar.R jest najważniejszą zmienną predykcyjną w modelu, a Miesiąc jest najmniej ważny.
Krok 4: Użyj modelu do przewidywania
Wreszcie możemy użyć modelu dopasowanego worka do przewidywania nowych obserwacji.
#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
Na podstawie wartości zmiennych predykcyjnych model dopasowanej torby przewiduje, że wartość ozonu w tym konkretnym dniu wyniesie 24 487 .
Pełny kod R użyty w tym przykładzie można znaleźć tutaj .