2015-01-09 12 views
6

Trong r gói R, điều gì xác định kích thước của cây được trình bày trong bảng CP cho cây quyết định? Trong ví dụ dưới đây, bảng CP mặc định chỉ trình bày các cây có các nút 1, 2 và 5 (tương ứng là nsplit = 0, 1 và 4).Kích cỡ cây được đưa ra bởi bảng CP trong rpart

library(rpart) 
fit <- rpart(Kyphosis ~ Age + Number + Start, method="class", data=kyphosis) 
> printcp(fit) 

Classification tree: 
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis, 
method = "class") 

Variables actually used in tree construction: 
[1] Age Start 

Root node error: 17/81 = 0.20988 

n= 81 

     CP nsplit rel error xerror xstd 
1 0.176471  0 1.00000 1.00000 0.21559 
2 0.019608  1 0.82353 0.94118 0.21078 
3 0.010000  4 0.76471 0.94118 0.21078 

Có quy tắc vốn có rpart() được sử dụng để xác định kích thước cây để trình bày không? Và có thể ép buộc printcp() trả lại thống kê xác thực chéo cho tất cả các kích thước cây có thể, ví dụ như ví dụ trên, cũng bao gồm các hàng cho các cây có 3 và 4 nút (nsplit = 2, 3) không?

Trả lời

3

Chức năng rpart() được kiểm soát bằng cách sử dụng chức năng rpart.control(). Nó có các thông số như minsplit mà nói với các chức năng để chỉ chia khi có nhiều quan sát thì giá trị cụ thể và cp mà nói với các chức năng để chỉ chia nếu thiếu tổng thể phù hợp được giảm một yếu tố của cp. Nếu bạn xem summary(fit) trên ví dụ trên, nó sẽ hiển thị số liệu thống kê cho tất cả các giá trị của nsplit. Để có được các giá trị này để in khi sử dụng printcp(fit), bạn cần phải chọn các giá trị thích hợp là cpminsplit khi gọi hàm rpart gốc.

+0

Cảm ơn câu trả lời của bạn, nhưng tôi đã có ấn tượng rằng 'minsplit' và' cp' là các thông số được sử dụng để trồng cây trước khi xác thực chéo được cố gắng - chứ không phải cắt tỉa nó sau đó. câu hỏi và bảng CP đề cập đến. Nếu tôi đã hiểu lầm, bạn có thể tư vấn tại sao đầu ra ở trên chỉ trình bày nsplit = 0, 1, 4 và những giá trị thích hợp nào của 'minsplit' và' cp' có thể là nsplit = 0, 1, 2, 3, 4? Ngẫu nhiên, 'tóm tắt (phù hợp)' không cho tôi số liệu thống kê chéo xác nhận cho tất cả các giá trị của nsplit - bảng CP mà nó cho thấy giống như câu hỏi. – alopex

1

Tài liệu cran-r trên rách đề cập thêm tùy chọn cp = 0 vào hàm rpart. http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf Nó cũng đề cập đến các tùy chọn khác có thể được đưa ra trong các chức năng rpart ví dụ như để kiểm soát số lượng chia tách.

dfit <- rpart(y ~ x, method='class', 
      control = rpart.control(xval = 10, minbucket = 2, **cp = 0**)) 
+1

Cảm ơn câu trả lời của bạn, nhưng như trên, tôi tin rằng 'minbucket' và' cp' chỉ ảnh hưởng đến sự phát triển của cây, chứ không phải việc cắt tỉa chéo xác nhận mà đến sau đó. Trong trường hợp này, việc thêm 'control = rpart.control (cp = 0)' không thay đổi bảng CP được trình bày trong câu hỏi. – alopex

+0

Tôi không biết làm thế nào bạn có thể buộc nhiều tùy chọn hơn để hiển thị tất cả các phần tách. Trừ khi có một tăng thêm với sự chia rẽ, tôi không nghĩ rằng rpart sẽ bao gồm nó trong đầu ra. Ngoài ra, kyphosis là một tập dữ liệu nhỏ chỉ có 81 người bị ám ảnh. Nếu bạn thấy âm mưu CP với các tùy chọn bên dưới, thì không có nhiều cơ hội trong X Lỗi tương đối giữa 1 và 3 và do đó nsplit = 2 không được xem xét hoàn toàn. fit2 <- rpart (Kyphosis ~ Tuổi + Số + Bắt đầu, dữ liệu = kyphosis, phương pháp = "class", control = rpart.control (minsplit = 8)) rsq.rpart (fit2) –

Các vấn đề liên quan