Cây quyết định trong R: Cây phân loại với ví dụ

⚡ Tóm tắt thông minh

Cây quyết định trong R chia dữ liệu thành các nhánh bằng cách sử dụng các quy tắc đơn giản "có" hoặc "không" cho đến khi mỗi lá chứa một lớp chiếm ưu thế duy nhất. Hướng dẫn này xây dựng, vẽ biểu đồ, đánh giá và tinh chỉnh cây phân loại rpart trên tập dữ liệu về sự sống sót của tàu Titanic.

  • 🌳 Định nghĩa cốt lõi: Cây phân vùng không gian dự đoán một cách đệ quy, chọn tại mỗi nút cách phân chia sao cho giảm thiểu tối đa sự không thuần khiết của lớp.
  • 🔄 Chuẩn bị dữ liệu: Trộn tệp Titanic đã được sắp xếp bằng hàm sample(), loại bỏ các cột định danh, chuyển đổi các yếu tố, sau đó loại bỏ các hàng có giá trị NA.
  • 🛠️ Cú pháp mô hình: Gọi rpart(survived~., data = data_train, method = 'class') và hiển thị kết quả bằng rpart.plot(fit, extra = 106).
  • ⚙️ điều chỉnh: rpart.control() cung cấp các tham số minsplit, minbucket, maxdepth và cp, nâng cao độ chính xác lên 79.90 phần trăm.
  • 📊 Đánh giá: Hãy xây dựng ma trận nhầm lẫn bằng hàm table(), sau đó chia đường chéo cho tổng để đạt được độ chính xác kiểm tra là 78.47%.

Cây quyết định trong R

Cây quyết định là gì?

Cây quyết định Cây quyết định là một thuật toán học máy đa năng có thể thực hiện cả nhiệm vụ phân loại và hồi quy. Chúng là những thuật toán rất mạnh mẽ, có khả năng xử lý các tập dữ liệu phức tạp. Bên cạnh đó, cây quyết định là thành phần cơ bản của rừng ngẫu nhiên, một trong những thuật toán học máy mạnh mẽ nhất hiện nay.

Trước khi xây dựng một cây quyết định phân nhánh bằng mã, việc hiểu cách cây quyết định phân nhánh sẽ rất hữu ích.

Cây quyết định hoạt động như thế nào?

Cây quyết định biến tập dữ liệu thành sơ đồ dạng câu hỏi có hoặc không, được xây dựng từ ba loại nút: nguồn gốc nắm giữ mọi buổi quan sát huấn luyện, một nút bên trong đặt câu hỏi về một biến dự đoán và chia dữ liệu thành hai phần, và một Ngừng việc chia tách và trả về lớp đa số.

Sự tăng trưởng tuân theo một quy trình tham lam được gọi là phân vùng nhị phân đệ quy:

  1. Đánh giá từng trường hợp chia nhỏ. Với mỗi biến dự đoán và điểm cắt, hãy đo lường mức độ không thuần khiết của hai nhóm kết quả.
  2. Hãy giữ lại cái tốt nhất. Tại điểm phân tách đó, câu hỏi đặt ra là: sự phân tách nào làm giảm tạp chất nhiều nhất?
  3. Lặp lại thao tác này với từng đứa trẻ. cho đến khi một quy tắc kiểm soát ngăn chặn nó: minsplit, minbucket, maxdepth hoặc cp.
  4. Cắt tỉa. Sau đó, cp sẽ cắt tỉa những nhánh không mang lại lợi nhuận, giúp cây quyết định không ghi nhớ tập dữ liệu huấn luyện.

Vì mỗi câu hỏi so sánh một biến số với một ngưỡng nhất định, thuật toán không bao giờ cần đến việc hiệu chỉnh tỷ lệ hoặc mã hóa giả.

So sánh chỉ số Gini và entropy trong cây quyết định

Tạp chất đó có thể được đo bằng hai cách, và rpart cho phép bạn lựa chọn.

Tiêu chí Chỉ số Gini Entropy (Lượng thông tin thu được)
Công thức 1 – tổng bình phương tỷ lệ học sinh trong lớp - tổng của p nhân với log2(p)
Phạm vi (hai lớp) 0 để 0.5 0 để 1
Tính toán Nhanh hơn, không cần logarit Chậm hơn, sử dụng logarit
cài đặt rpart Mặc định parms = list(split = “information”)
fit_entropy <- rpart(survived~., data = data_train, method = 'class',
    parms = list(split = "information"))

Trên thực tế, cả hai tiêu chí đều chọn cùng một tỷ lệ phân chia trong hầu hết các trường hợp, vì vậy chỉ số Gini mặc định là một lựa chọn an toàn.

Ưu điểm và nhược điểm của cây quyết định

Sự đánh đổi sẽ cho bạn biết khi nào một cây quyết định đơn lẻ là đủ và khi nào nên chuyển sang sử dụng nhiều cây hơn.

Ưu điểm

  • Hoàn toàn có thể giải thích được: Mô hình được điều chỉnh là một sơ đồ mà bất kỳ bên liên quan nào cũng có thể đọc hiểu.
  • Xử lý sơ bộ tối thiểu: Không cần hiệu chỉnh tỷ lệ hay chuẩn hóa, và các yếu tố hoạt động một cách tự nhiên.
  • Đảm nhiệm cả hai nhiệm vụ: `method = 'class'` phù hợp với bộ phân loại và `method = 'anova'` phù hợp với cây hồi quy.
  • Nhanh chóng để huấn luyện: Các tập dữ liệu lớn có thể được xử lý trong vài giây, vì vậy cây quyết định là một cơ sở ban đầu hữu ích.

Nhược điểm

  • Độ biến thiên cao: Một thay đổi nhỏ trong dữ liệu huấn luyện có thể tạo ra một cây quyết định hoàn toàn khác.
  • Dễ bị quá khớp dữ liệu: Một cây không bị ràng buộc sẽ phát triển cho đến khi mọi lá đều thuần khiết trừ khi cp và maxdepth hạn chế nó.
  • Chỉ áp dụng cho các đường chia song song với trục: Các đường biên chéo cần nhiều đường cắt hình bậc thang.

Cách khắc phục hai điểm yếu đầu tiên là trồng nhiều cây, đó chính là điều mà... rừng ngẫu nhiên không.

Hướng dẫn huấn luyện và trực quan hóa cây quyết định trong R

Để xây dựng cây quyết định đầu tiên của bạn trong R, bạn sẽ thực hiện bảy bước sau:

  • Bước 1: Nhập dữ liệu
  • Bước 2: Làm sạch tập dữ liệu
  • Bước 3: Tạo tập huấn luyện/kiểm tra
  • Bước 4: Xây dựng mô hình
  • Bước 5: Đưa ra dự đoán
  • Bước 6: Đo lường hiệu suất
  • Bước 7: Điều chỉnh các siêu tham số

Bước 1) Nhập dữ liệu

Nếu tò mò về số phận của tàu Titanic, bạn có thể xem video này trên Youtube. Mục đích của bộ dữ liệu này là dự đoán những người nào có nhiều khả năng sống sót hơn sau vụ va chạm với tảng băng trôi. Bộ dữ liệu chứa 13 biến và 1309 quan sát. Tập dữ liệu được sắp xếp theo biến X.

set.seed(678)
path <- 'https://raw.githubusercontent.com/guru99-edu/R-Programming/master/titanic_data.csv'
titanic <-read.csv(path)
head(titanic)

Đầu ra:

##   X pclass survived                                            name    sex
## 1 1      1        1                   Allen, Miss. Elisabeth Walton female
## 2 2      1        1                  Allison, Master. Hudson Trevor   male
## 3 3      1        0                    Allison, Miss. Helen Loraine female
## 4 4      1        0            Allison, Mr. Hudson Joshua Creighton   male
## 5 5      1        0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female
## 6 6      1        1                             Anderson, Mr. Harry   male
##       age sibsp parch ticket     fare   cabin embarked
## 1 29.0000     0     0  24160 211.3375      B5        S
## 2  0.9167     1     2 113781 151.5500 C22 C26        S
## 3  2.0000     1     2 113781 151.5500 C22 C26        S
## 4 30.0000     1     2 113781 151.5500 C22 C26        S
## 5 25.0000     1     2 113781 151.5500 C22 C26        S
## 6 48.0000     0     0  19952  26.5500     E12        S
##                         home.dest
## 1                    St Louis, MO
## 2 Montreal, PQ / Chesterville, ON
## 3 Montreal, PQ / Chesterville, ON
## 4 Montreal, PQ / Chesterville, ON
## 5 Montreal, PQ / Chesterville, ON
## 6                    New York, NY
tail(titanic)

Đầu ra:

##         X pclass survived                      name    sex  age sibsp
## 1304 1304      3        0     Yousseff, Mr. Gerious   male   NA     0
## 1305 1305      3        0      Zabour, Miss. Hileni female 14.5     1
## 1306 1306      3        0     Zabour, Miss. Thamine female   NA     1
## 1307 1307      3        0 Zakarian, Mr. Mapriededer   male 26.5     0
## 1308 1308      3        0       Zakarian, Mr. Ortin   male 27.0     0
## 1309 1309      3        0        Zimmerman, Mr. Leo   male 29.0     0
##      parch ticket    fare cabin embarked home.dest
## 1304     0   2627 14.4583              C          
## 1305     0   2665 14.4542              C          
## 1306     0   2665 14.4542              C          
## 1307     0   2656  7.2250              C          
## 1308     0   2670  7.2250              C          
## 1309     0 315082  7.8750              S

Từ đầu ra đầu và đuôi, bạn có thể nhận thấy dữ liệu không bị xáo trộn. Đây là một vấn đề lớn! Khi bạn phân chia dữ liệu của mình giữa tập huấn luyện và tập kiểm tra, bạn sẽ chọn có thể hành khách hạng 1 và 2 (Không có hành khách hạng 3 nào nằm trong 80% quan sát hàng đầu), nghĩa là thuật toán sẽ không bao giờ nhìn thấy các đặc điểm của hành khách hạng 3. Sai lầm này sẽ dẫn đến dự đoán kém.

Để khắc phục vấn đề này, bạn có thể sử dụng hàm sample().

shuffle_index <- sample(1:nrow(titanic))
head(shuffle_index)

Cây quyết định Mã R Giải thích

  • sample(1:nrow(titanic)): Tạo danh sách chỉ mục ngẫu nhiên từ 1 đến 1309 (tức là số hàng tối đa).

Đầu ra:

## [1]  288  874 1078  633  887  992

Bạn sẽ sử dụng chỉ mục này để xáo trộn tập dữ liệu titanic.

titanic <- titanic[shuffle_index, ]
head(titanic)

Đầu ra:

##         X pclass survived
## 288   288      1        0
## 874   874      3        0
## 1078 1078      3        1
## 633   633      3        0
## 887   887      3        1
## 992   992      3        1
##                                                           name    sex age
## 288                                      Sutton, Mr. Frederick   male  61
## 874                   Humblen, Mr. Adolf Mathias Nicolai Olsen   male  42
## 1078                                 O'Driscoll, Miss. Bridget female  NA
## 633  Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren) female  39
## 887                                        Jermyn, Miss. Annie female  NA
## 992                                           Mamee, Mr. Hanna   male  NA
##      sibsp parch ticket    fare cabin embarked           home.dest## 288      0     0  36963 32.3208   D50        S     Haddenfield, NJ
## 874      0     0 348121  7.6500 F G63        S                    
## 1078     0     0  14311  7.7500              Q                    
## 633      1     5 347082 31.2750              S Sweden Winnipeg, MN
## 887      0     0  14313  7.7500              Q                    
## 992      0     0   2677  7.2292              C	

Bước 2) Làm sạch tập dữ liệu

Một số biến chứa giá trị NA. Quá trình dọn dẹp diễn ra theo ba phần:

  • Bỏ các biến home.dest, cabin, name, X và ticket
  • Tạo các biến nhân tố cho pclass và sống sót
  • Bỏ NA
library(dplyr)
# Drop variables
clean_titanic <- titanic %>%
select(-c(home.dest, cabin, name, X, ticket)) %>% 
#Convert to factor level
	mutate(pclass = factor(pclass, levels = c(1, 2, 3), labels = c('Upper', 'Middle', 'Lower')),
	survived = factor(survived, levels = c(0, 1), labels = c('No', 'Yes'))) %>%
na.omit()
glimpse(clean_titanic)

Code Giải thích

  • select(-c(home.dest, cabin, name, X, ticket)): Bỏ các biến không cần thiết
  • pclass = factor(pclass, levels = c(1,2,3), labels= c('Upper', 'Middle', 'Lower')): Thêm nhãn vào biến pclass. 1 trở thành Upper, 2 trở thành Middle và 3 trở thành Lower
  • factor(survived, levels = c(0,1), labels = c('No', 'Yes')): Thêm nhãn cho biến survived. 0 trở thành No và 1 trở thành Yes
  • na.omit(): Loại bỏ các quan sát NA

Đầu ra:

## Observations: 1,045
## Variables: 8
## $ pclass   <fctr> Upper, Lower, Lower, Upper, Middle, Upper, Middle, U...
## $ survived <fctr> No, No, No, Yes, No, Yes, Yes, No, No, No, No, No, Y...
## $ sex      <fctr> male, male, female, female, male, male, female, male...
## $ age      <dbl> 61.0, 42.0, 39.0, 49.0, 29.0, 37.0, 20.0, 54.0, 2.0, ...
## $ sibsp    <int> 0, 0, 1, 0, 0, 1, 0, 0, 4, 0, 0, 1, 1, 0, 0, 0, 1, 1,...
## $ parch    <int> 0, 0, 5, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 2, 0, 4, 0,...
## $ fare     <dbl> 32.3208, 7.6500, 31.2750, 25.9292, 10.5000, 52.5542, ...
## $ embarked <fctr> S, S, S, S, S, S, S, S, S, C, S, S, S, Q, C, S, S, C...		

Bước 3) Tạo tập huấn luyện/kiểm tra

Trước khi huấn luyện mô hình của mình, bạn cần thực hiện hai bước:

  • Tạo tập huấn luyện và kiểm tra: Bạn huấn luyện mô hình trên tập huấn luyện và kiểm tra dự đoán trên tập kiểm tra (tức là dữ liệu chưa nhìn thấy)
  • Cài đặt rpart.plot từ bảng điều khiển

Thực tiễn phổ biến là chia dữ liệu 80/20, 80% dữ liệu dùng để huấn luyện mô hình và 20% để đưa ra dự đoán. Bạn cần tạo hai khung dữ liệu riêng biệt. Bạn không muốn chạm vào tập kiểm tra cho đến khi hoàn thành việc xây dựng mô hình của mình. Bạn có thể tạo tên hàm create_train_test() có ba đối số.

create_train_test(df, size = 0.8, train = TRUE)
arguments:
-df: Dataset used to train the model.
-size: Size of the split. By default, 0.8. Numerical value
-train: If set to `TRUE`, the function creates the train set, otherwise the test set. Default value sets to `TRUE`. Boolean value.You need to add a Boolean parameter because R does not allow to return two data frames simultaneously.
create_train_test <- function(data, size = 0.8, train = TRUE) {
    n_row = nrow(data)
    total_row = size * n_row
    train_sample <- 1: total_row
    if (train == TRUE) {
        return (data[train_sample, ])
    } else {
        return (data[-train_sample, ])
    }
}

Code Giải thích

  • function(data, size=0.8, train = TRUE): Thêm các đối số trong hàm
  • n_row = nrow(data): Đếm số hàng trong tập dữ liệu
  • Total_row = size*n_row: Trả về hàng thứ n để xây dựng tập tàu
  • train_sample <- 1:total_row: Chọn hàng đầu tiên đến hàng thứ n
  • if (train ==TRUE){ } else { }: Nếu điều kiện được đặt thành đúng, trả về tập tàu, nếu không thì trả về tập kiểm tra.

Bạn có thể kiểm tra chức năng của mình và kiểm tra kích thước.

data_train <- create_train_test(clean_titanic, 0.8, train = TRUE)
data_test <- create_train_test(clean_titanic, 0.8, train = FALSE)
dim(data_train)

Đầu ra:

## [1] 836   8
dim(data_test)

Đầu ra:

## [1] 209   8

Tập dữ liệu huấn luyện có 836 hàng và 8 cột, trong khi tập dữ liệu kiểm tra có 209 hàng và cũng có 8 cột tương tự.

Bạn sử dụng hàm prop.table() kết hợp với table() để xác minh xem quá trình ngẫu nhiên hóa có đúng hay không.

prop.table(table(data_train$survived))

Đầu ra:

##
##        No       Yes 
## 0.5944976 0.4055024
prop.table(table(data_test$survived))

Đầu ra:

## 
##        No       Yes 
## 0.5789474 0.4210526

Trong cả hai tập dữ liệu, số lượng người sống sót là như nhau, khoảng 40%.

Cài đặt rpart.plot

rpart.plot không có sẵn trong thư viện conda. Bạn có thể cài đặt nó từ bảng điều khiển:

install.packages("rpart.plot")

Bước 4) Xây dựng mô hình

Bạn đã sẵn sàng xây dựng mô hình. Cú pháp của hàm cây quyết định rpart() là:

rpart(formula, data=, method='')
arguments:			
- formula: The function to predict
- data: Specifies the data frame
- method:			
- "class" for a classification tree 			
- "anova" for a regression tree	

Bạn sử dụng phương thức lớp vì bạn dự đoán một lớp.

library(rpart)
library(rpart.plot)
fit <- rpart(survived~., data = data_train, method = 'class')
rpart.plot(fit, extra = 106)

Code Giải thích

  • rpart(): Hàm phù hợp với mô hình. Các đối số là:
    • sống sót ~.: Công thức của cây quyết định
    • data = data_train: Tập dữ liệu
    • Method = 'class': Phù hợp với mô hình nhị phân
  • rpart.plot(fit, extra= 106): Vẽ cây. Tham số extra được đặt thành 106, hiển thị xác suất của lớp thứ hai cộng với tỷ lệ phần trăm quan sát trong mỗi nút. Bạn có thể tham khảo họa tiết để biết thêm thông tin về các lựa chọn khác.

Đầu ra:

 Xây dựng mô hình cây quyết định trong R

Bạn bắt đầu từ nút gốc, ở đỉnh của đồ thị và ở độ sâu 0 trên 3:

  1. Ở trên cùng, đó là xác suất sống sót tổng thể. Nó cho thấy tỷ lệ hành khách sống sót sau vụ tai nạn. 41% hành khách sống sót.
  2. Nút này hỏi xem giới tính của hành khách có phải là nam hay không. Nếu có, thì bạn sẽ đi xuống nút con bên trái của nút gốc (độ sâu 1). Có 63% là nam giới với xác suất sống sót là 21%.
  3. Ở nút thứ hai, bạn hỏi xem hành khách nam có trên 3.5 tuổi không. Nếu có thì cơ hội sống sót là 19%.
  4. Bạn cứ tiếp tục như vậy để hiểu những đặc điểm nào ảnh hưởng đến khả năng sống sót.

Lưu ý rằng, một trong nhiều ưu điểm của Cây Quyết định là chúng yêu cầu rất ít việc chuẩn bị dữ liệu. Đặc biệt, chúng không yêu cầu chia tỷ lệ hoặc căn giữa tính năng.

Theo mặc định, hàm rpart() sử dụng Gini Chỉ số Gini được sử dụng để chọn từng nhánh. Giá trị Gini càng cao, các lớp bên trong nút đó càng bị pha trộn nhiều, vì vậy thuật toán luôn chọn nhánh có giá trị Gini thấp nhất.

Bước 5) Đưa ra dự đoán

Bạn có thể dự đoán tập dữ liệu thử nghiệm của mình. Để đưa ra dự đoán, bạn có thể sử dụng hàm Predict(). Cú pháp cơ bản của dự đoán cho cây quyết định R là:

predict(fitted_model, df, type = 'class')
arguments:
- fitted_model: This is the object stored after model estimation. 
- df: Data frame used to make the prediction
- type: Type of prediction			
    - 'class': for classification			
    - 'prob': to compute the probability of each class			
    - 'vector': Predict the mean response at the node level	

Giờ bạn cần dự đoán, đối với mỗi trong số 209 hành khách trong tập dữ liệu thử nghiệm, liệu mô hình có kỳ vọng họ sống sót sau vụ va chạm hay không.

predict_unseen <-predict(fit, data_test, type = 'class')

Code Giải thích

  • dự đoán(fit, data_test, type='class'): Dự đoán lớp (0/1) của tập kiểm tra

Bây giờ hãy so sánh các lớp dự đoán với kết quả thực tế.

table_mat <- table(data_test$survived, predict_unseen)
table_mat

Code Giải thích

  • table(data_test$survived, predict_unseen): Xây dựng bảng thống kê tương quan giữa các lớp dự đoán và kết quả thực tế.

Đầu ra:

##      predict_unseen
##        No Yes
##   No  106  15
##   Yes  30  58

Các hàng là giá trị thực tế, các cột là dự đoán. Mô hình đã xác định chính xác 106 người không sống sót và 58 người sống sót, nhưng lại dán nhãn 15 người không sống sót là người sống sót và 30 người sống sót là đã chết.

Bước 6) Đo lường hiệu suất

Bạn có thể tính toán thước đo độ chính xác cho nhiệm vụ phân loại bằng ma trận hỗn loạn:

ma trận hỗn loạn là sự lựa chọn tốt hơn để đánh giá hiệu suất phân loại. Ý tưởng chung là đếm số lần các trường hợp Đúng được phân loại là Sai.

Đo lường hiệu suất của cây quyết định trong R

Mỗi hàng trong ma trận nhầm lẫn biểu thị một mục tiêu thực tế, trong khi mỗi cột biểu thị một mục tiêu được dự đoán. Hàng đầu tiên của ma trận này xem xét những hành khách đã chết (lớp âm): 106 người được phân loại chính xác là đã chết (Âm tính thật), trong khi 15 người bị phân loại sai là người sống sót (Dương tính giảHàng thứ hai xem xét những người sống sót: 58 người được xác định chính xác (Đúng tích cực), trong khi 30 người khác bị bỏ sót (Sai âm).

Bạn có thể tính toán kiểm tra độ chính xác từ ma trận nhầm lẫn:

Đo lường hiệu suất của cây quyết định trong R

Đó là tỷ lệ giữa dương thực và âm thực trên tổng của ma trận. Với R, bạn có thể viết mã như sau:

accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)

Code Giải thích

  • sum(diag(table_mat)): Tổng của đường chéo
  • sum(table_mat): Tổng của ma trận.

Bạn có thể in độ chính xác của bộ kiểm tra:

print(paste('Accuracy for test', accuracy_Test))

Đầu ra:

## [1] "Accuracy for test 0.784688995215311"

Độ chính xác trên tập dữ liệu kiểm tra là 0.7847, tức là 78.47 phần trăm. Lặp lại bài tập trên tập dữ liệu huấn luyện để xem mô hình bị quá khớp đến mức nào.

Bước 7) Điều chỉnh các siêu tham số

Cây quyết định trong R có nhiều tham số khác nhau để kiểm soát các khía cạnh của sự phù hợp. Trong thư viện cây quyết định rpart, bạn có thể kiểm soát các tham số bằng hàm rpart.control(). Trong đoạn mã sau, bạn giới thiệu các tham số bạn sẽ điều chỉnh. Bạn có thể tham khảo họa tiết cho các thông số khác.

rpart.control(minsplit = 20, minbucket = round(minsplit/3), maxdepth = 30)
Arguments:
-minsplit: Set the minimum number of observations in the node before the algorithm perform a split
-minbucket: Set the minimum number of observations in a terminal node, i.e. the leaf
-maxdepth: Set the maximum depth of any node of the final tree. The root node is treated as depth 0

Chúng ta sẽ tiến hành như sau:

  • Xây dựng hàm để trả về độ chính xác
  • Điều chỉnh độ sâu tối đa
  • Điều chỉnh số lượng mẫu tối thiểu mà một nút phải có trước khi có thể phân chia
  • Điều chỉnh số lượng mẫu tối thiểu mà một nút lá phải có

Bạn có thể viết một hàm để hiển thị độ chính xác. Bạn chỉ cần bọc mã bạn đã sử dụng trước đó:

  1. dự đoán: dự đoán_unseen <- dự đoán (phù hợp, data_test, type = 'class')
  2. Tạo bảng: table_mat <- table(data_test$survived, Predict_unseen)
  3. Tính toán độ chính xác: độ chính xác_Test <- sum(diag(table_mat))/sum(table_mat)
accuracy_tune <- function(fit) {
    predict_unseen <- predict(fit, data_test, type = 'class')
    table_mat <- table(data_test$survived, predict_unseen)
    accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
    accuracy_Test
}

Bây giờ hãy tinh chỉnh các tham số và xem liệu bạn có thể cải thiện mô hình mặc định hay không. Xin nhắc lại, bạn cần đạt độ chính xác cao hơn 0.7847.

control <- rpart.control(minsplit = 4,
    minbucket = round(5 / 3),
    maxdepth = 3,
    cp = 0)
tune_fit <- rpart(survived~., data = data_train, method = 'class', control = control)
accuracy_tune(tune_fit)

Đầu ra:

## [1] 0.7990431

Với tham số sau:

minsplit = 4
minbucket = round(5/3)
maxdepth = 3
cp = 0

Độ chính xác tăng từ 0.7847 lên 0.7990, do đó cây quyết định đã được tinh chỉnh vượt trội hơn cấu hình mặc định khoảng 1.4 điểm phần trăm.

Cây quyết định trong R: Tham khảo nhanh các hàm

Bảng dưới đây liệt kê mọi hàm được sử dụng trong bảy bước nêu trên, cùng với gói cung cấp hàm đó và các tham số mà hàm đó yêu cầu. R.

Thư viện Mục tiêu Chức năng Lớp Thông số Kỹ thuật Chi Tiết
phần Cây phân loại tàu trong R rpart() tốt nghiệp lớp XNUMX công thức, df, phương pháp
phần Đào tạo cây hồi quy rpart() anova công thức, df, phương pháp
phần Vẽ cây rpart.plot() mô hình vừa vặn
cơ sở dự đoán dự đoán () tốt nghiệp lớp XNUMX mô hình, loại trang bị
cơ sở dự đoán dự đoán () thăm dò mô hình, loại trang bị
cơ sở dự đoán dự đoán () vector mô hình, loại trang bị
phần thông số điều khiển rpart.control() chia nhỏ Đặt số lượng quan sát tối thiểu trong nút trước khi thuật toán thực hiện phân tách
thùng nhỏ Đặt số lượng quan sát tối thiểu trong một nút cuối cùng, tức là nút lá.
độ sâu tối đa Đặt độ sâu tối đa cho bất kỳ nút nào của cây cuối cùng. Nút gốc được coi là có độ sâu 0.
phần Mô hình tàu với tham số điều khiển rpart() công thức, df, phương pháp, điều khiển

Lưu ý: Huấn luyện mô hình trên dữ liệu huấn luyện và kiểm tra hiệu suất trên tập dữ liệu không nhìn thấy, tức là tập kiểm tra.

Câu Hỏi Thường Gặp

Cả hai đều phù hợp với cây phân loại và cây hồi quy. rpart() triển khai CART với tính năng cắt tỉa chéo tích hợp thông qua cp và kết hợp với rpart.plot để tạo ra các biểu đồ rõ ràng, điều này khiến nó trở thành lựa chọn phổ biến hơn.

Tham số cp đặt mức cải thiện tối thiểu mà một nhánh phải mang lại để được giữ lại. Giá trị lớn hơn sẽ cắt tỉa mạnh mẽ hơn và tạo ra các cây nhỏ hơn. Sử dụng printcp() và plotcp() để tìm giá trị có lỗi kiểm định chéo thấp nhất.

Đúng vậy. Hàm rpart() sử dụng các phép chia thay thế để định tuyến các quan sát có biến dự đoán bị thiếu xuống nhánh tương tự nhất. Hướng dẫn này sử dụng hàm na.omit() thay thế, chỉ đơn thuần là để giữ cho tập dữ liệu ví dụ đơn giản.

Cây quyết định là nền tảng của trí tuệ nhân tạo có khả năng giải thích được trong lĩnh vực tín dụng, bảo hiểm và chăm sóc sức khỏe, nơi mà cơ quan quản lý có thể yêu cầu lý do chính xác đằng sau một quyết định. Chúng cũng tạo thành các mô hình học cơ bản bên trong các mô hình tăng cường độ dốc và rừng ngẫu nhiên.

Đúng vậy. Trợ lý AI có thể dịch các quy tắc phân tách thành ngôn ngữ thông thường, đề xuất các giá trị cp để kiểm tra và cảnh báo hiện tượng quá khớp trong đầu ra printcp(). Hãy xác minh mọi đề xuất dựa trên kết quả kiểm định chéo của riêng bạn trước khi thực hiện.

Tóm tắt bài viết này với: