Rpart (r реализация CART) возвращает разделение, которое не минимизирует SSE - PullRequest
0 голосов
/ 01 апреля 2020

Я изучаю рекурсивное разбиение с помощью rpart. Насколько я понимаю из документации, rpart (реализация CART) должна выбрать переменную разделения и точку разделения, которая минимизирует среднеквадратическую ошибку в двух дочерних узлах. В ходе некоторых экспериментов я обнаружил, что это не всегда имеет место в дереве, выведенном rpart. Я приложил код R ниже, который иллюстрирует мою точку зрения.

library(MASS)
library(rpart)

### Defining the dataset
n <- 80
p <- 9
set.seed(123)
X <- mvrnorm(n, mu=1:p, Sigma = 4*diag(rep(1,p)))
y <- rnorm(n, mean=0, sd=11)

### Illustrating the rpart issue
### With this random seed, a one-level tree with rpart suggests splitting on variable 
## 4 at cut point 4.19
print(rpart(y~X, control=rpart.control(minsplit=n)))

### Just brute force looking for best split suggests that ths minimim SSE
### occurs if we split at 1st variable at 3.88
minSSE <- Inf
minsplit = NA
for (j in 1:p) {
  for (s in 1:(n-1)) {
    xjs <- sort(X[,j])[s]
    left <-y[X[,j] <= xjs]
    right <- y[X[,j] > xjs]
    SSE <- sum((left- mean(left))^2) + sum((right - mean(right))^2)
    if (SSE < minSSE) {
      minsplit = c(j,xjs)
      minSSE <- SSE
    }
  }
}
print(minsplit)

Кто-нибудь знает, что это за сделка? Я неправильно понимаю документацию rpart? Есть ли какая-то процедура приближения, которую использует rpart? Кто-нибудь еще сталкивался с подобной проблемой?

Спасибо!

...