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 ')

Wykres ważności zmiennej w R

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 .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *