2015-07-08 13 views
5

Tôi gặp khó khăn trong việc hiểu cách cây được cấu trúc trong gói máy gbm gradient tăng cường của R. Cụ thể, xem đầu ra của pretty.gbm.treeCác tính năng nào làm các chỉ số trong SplitVar trỏ đến?Hiểu cấu trúc cây trong gói R gbm

Tôi được đào tạo một GBM trên một tập dữ liệu, đây là đỉnh ~ quý của một trong những cây của tôi - là kết quả của một cuộc gọi đến pretty.gbm.tree:

SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction 
0   9 6.250000e+01  1   2   21  0.6634681 5981 0.005000061 
1  -1 1.895699e-12  -1  -1   -1  0.0000000 3013 0.018956988 
2  31 4.462500e+02  3   4   20  1.0083722 2968 -0.009168477 
3  -1 1.388483e-22  -1  -1   -1  0.0000000 1430 0.013884830 
4  38 5.500000e+00  5  18   19  1.5748155 1538 -0.030602956 
5  24 7.530000e+03  6  13   17  2.8329899 361 -0.078738904 
6  41 2.750000e+01  7  11   12  2.2499063 334 -0.064752766 
7  28 -3.155000e+02  8   9   10  1.5516610  57 -0.243675567 
8  -1 -3.379312e-11  -1  -1   -1  0.0000000  45 -0.337931219 
9  -1 1.922333e-10  -1  -1   -1  0.0000000  12 0.109783128 
``` 

Có vẻ với tôi ở đây là các chỉ số là 0 dựa trên, xem xét cách LeftNode, RightNodeMissingNode trỏ đến các hàng khác nhau. Khi thử nghiệm điều này bằng cách sử dụng các mẫu dữ liệu và theo dõi nó xuống cây để dự đoán của họ, tôi nhận được câu trả lời đúng khi tôi xem xét SplitVar để sử dụng 1 dựa trên chỉ mục.

Tuy nhiên, 1 trong số nhiều cây tôi xây dựng có số trong cột SplitVar! Đây là cây này:

SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction 
0   4 1.462500e+02  1   2   21  0.41887 5981 0.0021651262 
1  -1 4.117688e-22  -1  -1   -1  0.00000 512 0.0411768781 
2   4 1.472500e+02  3   4   20  1.05222 5469 -0.0014870985 
3  -1 -2.062798e-11  -1  -1   -1  0.00000  23 -0.2062797579 
4   0 4.750000e+00  5   6   19  0.65424 5446 -0.0006222011 
5  -1 3.564879e-23  -1  -1   -1  0.00000 4897 0.0035648788 
6  28 -3.195000e+02  7  11   18  1.39452 549 -0.0379703437 

Cách chính xác để xem chỉ mục được sử dụng bởi cây gbm là gì?

+0

Sẽ hữu ích nếu bạn đưa vào một ví dụ nhỏ có thể tái sản xuất (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) với đầu vào mẫu và mã bạn đang sử dụng để tạo các đối tượng của mình. Chỉ hiển thị kết quả không cho phép chúng tôi biết được những gì đang xảy ra. Vectơ trong R luôn dựa trên 1. Cột đầu tiên chưa được đặt tên thường là tên hàng chứ không phải chỉ mục. – MrFlick

Trả lời

7

Cột đầu tiên được in khi bạn sử dụng pretty.gbm.treerow.names được gán trong tập lệnh pretty.gbm.tree.R. Trong tập lệnh, số row.names được gán làm row.names(temp) <- 0:(nrow(temp)-1) trong đó temp là thông tin cây được lưu trữ ở dạng data.frame. Cách đúng để giải thích row.names là đọc nó như là node_id với nút gốc được gán giá trị 0.

Trong ví dụ của bạn:

Id SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction 0 9 6.250000e+01 1 2 21 0.6634681 5981 0.005000061

có nghĩa là nút gốc (thể hiện bằng số lượng hàng 0) được chia bởi các biến chia 9 thứ (đánh số của biến phân chia ở đây bắt đầu từ 0 , do đó, biến phân chia là cột thứ 10 trong bộ huấn luyện x). SplitCodePred của 6.25 biểu thị rằng tất cả các điểm nhỏ hơn 6.25 được chuyển đến LeftNode 1 và tất cả các điểm lớn hơn 6.25 được chuyển đến RightNode 2. Tất cả các điểm có giá trị thiếu trong cột này được gán cho MissingNode 21. ErrorReduction0.6634 do sự phân chia này và có 5981 (Weight) trong nút gốc. Prediction của 0.005 biểu thị giá trị được gán cho tất cả các giá trị tại nút này trước khi điểm được chia. Trong trường hợp các nút đầu cuối (hoặc lá) được biểu thị bằng -1 trong SplitVar, LeftNode, RightNodeMissingNode, Prediction biểu thị giá trị được dự đoán cho tất cả các điểm thuộc nút lá được điều chỉnh (lần) lần shrinkage.

Để hiểu cấu trúc cây, điều quan trọng cần lưu ý là việc tách cây sẽ xảy ra theo chiều sâu đầu tiên. Vì vậy, khi nút gốc (với nút id 0) được chia thành nút trái và nút bên phải của nó, phía bên trái được xử lý cho đến khi không còn phân tách nữa trước khi quay lại và ghi nhãn nút bên phải. Trong cả hai cây trong ví dụ của bạn, các RightNode nhận được một giá trị của 2. Điều này là bởi vì trong cả hai trường hợp, các LeftNode hóa ra là một nút lá.

+0

Chỉ muốn chỉ ra rằng điểm chính xác bằng 6,25 đi đúng. – Zelazny7

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