Znajomy brał udział w projekcie, w którym na podstawie historii należało wykonać predykcję w przód cechy Y. Problem polegał na tym, że cecha Y wykazywała tendencje do wzrostu. Na potrzeby tego wpisu Y to może być mleczność krów lub zapotrzebowanie na energię czy cokolwiek innego co z czasem średnio rośnie.
Rozmawialiśmy trochę o tym co może się sprawdzić w tego typu analizach. Jako benchmark wykorzystaliśmy współczesne techniki pozwalające na podgrzanie procesora typu lasy losowe czy SVM. Okazuje się jednak (po fakcie, jest to nawet zgodne z intuicją ;-), że jeżeli występuje w miarę stabilny trend to zakres wartości obserwowanych w przyszłości może być inny niż zakres wartości obserwowanych w przeszłości. W tym przypadku techniki takie jak zwykła regresja liniowa mogą dać lepsze wyniki niż wspomniane SVM i RF.
Rozważmy taki przykład. Mamy do dyspozycji N predyktorów, chcemy przewidzieć rozwój cechy Y. W rzeczywistości ta cecha zależy tylko od pierwszego z N predyktorów. W szranki postawimy SVM, RandomForest, regresję liniową i regresję z regularyzacją typu lasso.
Przykład będzie czysto symulacyjny.
Zacznijmy od wylosowania danych, po 100 obserwacji i N=25 predyktorów. Zbiór testowy będzie poza domeną zbioru uczącego, wszystkie zmienne przesuwamy o +1.
library(dplyr) library(lasso2) library(e1071) library(randomForest) library(ggplot2) # will be useful in simulations getData <- function(n = 100, N = 25 ){ x <- runif(N*n) %>% matrix(n, N) # artificial out-of-domain [0-1] x_test <- x + 1 list(x = x, y = x[,1] * 5 + rnorm(n), x_test = x_test, y_test = x_test[,1] * 5 + rnorm(n)) } # let's draw a dataset gdata <- getData() head(gdata$y) # [1] -0.5331184 3.1140116 4.9557897 3.2433499 2.8986888 5.2478431 dim(gdata$x) # [1] 100 25 |
Czytaj dalej Czy prosta regresja liniowa może pobić na głowę SVM i Random Forest?