Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.86 KB | None | 0 0
  1. ---
  2. title: "RandomForest"
  3. author: "Szymon Maksymiuk"
  4. date: "4 11 2019"
  5. output:
  6. html_document:
  7. df_print: paged
  8. toc: true
  9. toc_float: true
  10. code_folding: hide
  11. number_sections: true
  12. theme: spacelab
  13. ---
  14.  
  15. ```{r include=FALSE}
  16. knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
  17. ```
  18.  
  19. # Wstęp
  20.  
  21. Poniżej przedstawię 110 różnych wyjaśnień dla naszego zbioru. Będą to wyjaśnienia lokalne, a więc pokazujące jak poszczególne cechy danej obserwacji wpływały na odpowiedź modelu. Aby zachować balans między klasami, wezmę pierwsze 54 obserwacji z niezależnością, 3 ze sprzecznością oraz 33 z wynikaniem, zgodnie z ich rozłożeniem w zbiorze. Dla wszystkich obserwacji mujętych w tej sekcji, model poprawnie przewidział typ relacji. W kolejnej sekcji podam 10 obserwacji dla których model się pomylił. Warto zazanczyć, że dla każdej obserwacji pojawią się 3 wykresy, każdy z nich pokaże jak zmienne wpływały na decyzje w obrębie danej klasy.
  22.  
  23. Model którego użyłem to gbm z wytrenowanymi hiperparametrami. Miarą straty, której użyłem szukając najlepszego modelu było macro weighted averaging Precission, a więc metryka Precission zastosowana dla każdej z klas (na zasadzie 1 przeciw wszystkim) oraz uśredniona względem wag będących licznościami danej klasy. Wynik wynosił około 0.87 przy podobnym accuracy.
  24.  
  25. Słówko o samym wykresie choć zdaje mi się bardzo intuicyjny. Intercept oznacza średnią odpowiedź modelu dla danej klasy. Słupki pokazują jak wartości poszczególnych zmiennych wływają sie odchylenie od owej średniej.
  26.  
  27. ```{r warning=FALSE, message=FALSE}
  28. library(dplyr)
  29. library(forcats)
  30. dane_2911 <- as.data.frame(readxl::read_xlsx("PL_zbior_29.11.2019.xlsx"))
  31. dane_2911 <- select(dane_2911, T, `verb - semantic class`, `verb - tense`,
  32. `verb`, `verb - veridical (positive enviroment)`,`T - negation`, `T - type of sentence`,
  33. `complement - tense`, `verb - veridical (negative enviroment)`,
  34. `GOLD <T,H>`)
  35. colnames(dane_2911) <- make.names(colnames(dane_2911))
  36.  
  37. data <- dane_2911
  38. for (i in 2:ncol(data)) {
  39. data[,i] <- as.factor(data[,i])
  40. }
  41. data$verb <- fct_lump(as.factor(data$verb), 30)
  42. data <- data[data$GOLD..T.H. != "?",]
  43. data <- na.omit(data)
  44. data$GOLD..T.H. <- as.factor(as.character(data$GOLD..T.H.))
  45. m <- sample(1:nrow(data), 0.7*nrow(data))
  46. data_train <- data[m,]
  47. data_test <- data[-m,]
  48.  
  49.  
  50. library(randomForest)
  51. model <- randomForest(x = data_train[,-c(1,10)], y = data_train$GOLD..T.H., ntree = 2000, mtry = 2, type = "prob")
  52.  
  53.  
  54. custom_predict <- function(X.model, newdata){
  55. predict(X.model, newdata = newdata, type = "prob")
  56. }
  57.  
  58. library(DALEX)
  59. explainer <- explain(model, data = data_test[,-c(1, 10)], y = data_test$GOLD..T.H., predict_function = custom_predict,
  60. verbose = FALSE, precalculate = FALSE, colorize = FALSE, label = "Random Forest (ntree = 2000, mtry = 2)")
  61. ```
  62.  
  63. # Wyjaśnienia (model poprawnie przewidział klasę)
  64.  
  65. ## C
  66.  
  67. ```{r}
  68. new_observations_niez <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,1]>0.5),]
  69. new_observations_niez <- new_observations_niez[new_observations_niez$GOLD..T.H. == "C",][1:3,]
  70. library(iBreakDown)
  71. for (i in 1:3) {
  72. cat(as.character(new_observations_niez[i,1]))
  73. print(plot(break_down(explainer, new_observations_niez[i,-1])))
  74. cat("\n")
  75. }
  76. ```
  77.  
  78. ## E
  79.  
  80. ```{r}
  81. new_observations_sp <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,2]>0.5),]
  82. new_observations_sp <- new_observations_sp[new_observations_sp$GOLD..T.H. == "E",][1:33,]
  83. library(iBreakDown)
  84. for (i in 1:33) {
  85. cat(as.character(new_observations_sp[i,1]))
  86. print(plot(break_down(explainer, new_observations_sp[i,-1])))
  87. cat("\n")
  88. }
  89. ```
  90.  
  91. ## N
  92.  
  93. ```{r}
  94. new_observations_wy <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,3]>0.5),]
  95. new_observations_wy <- new_observations_wy[new_observations_wy$GOLD..T.H. == "N",][1:54,]
  96. library(iBreakDown)
  97. for (i in 1:54) {
  98. cat(as.character(new_observations_wy[i,1]))
  99. print(plot(break_down(explainer, new_observations_wy[i,-1])))
  100. cat("\n")
  101. }
  102. ```
  103.  
  104. # Wyjaśnienia (model błędnie przewidział klasę)
  105.  
  106. ## C (przewidziane błędnie)
  107.  
  108. ```{r}
  109. new_observations_niez <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,1]>0.5),]
  110. new_observations_niez <- new_observations_niez[new_observations_niez$GOLD..T.H. != "C",][1,]
  111. library(iBreakDown)
  112. for (i in 1:1) {
  113. if(nrow(new_observations_niez) == 0 ) break()
  114. cat(as.character(new_observations_niez[i,1]), "| true label:", as.character(new_observations_niez[i,]$GOLD..T.H.))
  115. print(plot(break_down(explainer, new_observations_niez[i,-1])))
  116. cat("\n")
  117. }
  118. ```
  119.  
  120. ## E (przewidziane błędnie)
  121.  
  122. ```{r}
  123. new_observations_sp <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,2]>0.5),]
  124. new_observations_sp <- new_observations_sp[new_observations_sp$GOLD..T.H. != "E",][1:3,]
  125. library(iBreakDown)
  126. for (i in 1:3) {
  127. if(nrow(new_observations_sp) == 0 ) break()
  128. cat(as.character(new_observations_sp[i,1]), "| true label:", as.character(new_observations_sp[i,]$GOLD..T.H.))
  129. print(plot(break_down(explainer, new_observations_sp[i,-1])))
  130. cat("\n")
  131. }
  132. ```
  133.  
  134. ## N (przewidziane błędnie)
  135.  
  136. ```{r}
  137. new_observations_wy <- data_test[which(as.data.frame(predict(model, newdata = data_test[,-1], type = "prob"))[,3]>0.5),]
  138. new_observations_wy <- new_observations_wy[new_observations_wy$GOLD..T.H. != "N",][1:6,]
  139. library(iBreakDown)
  140. for (i in 1:6) {
  141. if(nrow(new_observations_wy) == 0 ) break()
  142. cat(as.character(new_observations_wy[i,1]), "| true label:", as.character(new_observations_wy[i,]$GOLD..T.H.))
  143. print(plot(break_down(explainer, new_observations_wy[i,-1])))
  144. cat("\n")
  145. }
  146. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement