Bạn vừa huấn luyện một máy tăng cường gradient (GBM) và một bộ phân loại rừng ngẫu nhiên (RF) trên dữ liệu của mình bằng cách sử dụng bộ lệnh h2oml mới của Stata. Mô hình GBM của bạn đạt độ chính xác 87% trên dữ liệu kiểm định, trong khi mô hình RF đạt 85%. Có vẻ như GBM là bộ phân loại ưu tiên, phải không? Khoan đã.
Tại Sao Độ Chính Xác Thôi Là Chưa Đủ
Độ chính xác, diện tích dưới đường cong, và sai số căn bậc hai trung bình là những chỉ số phổ biến, nhưng chúng chỉ cung cấp các ước lượng điểm. Những con số này phản ánh mức độ tốt của một mô hình khi hoạt động trên một mẫu kiểm định cụ thể, nhưng chúng không tính đến biến thiên có thể phát sinh từ mẫu này sang mẫu khác. Nói cách khác, chúng không trả lời câu hỏi cốt lõi này: liệu sự khác biệt về hiệu suất giữa các phương pháp này có duy trì ở cấp độ tổng thể, hay nó chỉ có thể xảy ra do ngẫu nhiên trong tập dữ liệu kiểm định cụ thể này?
Khi so sánh các phương pháp như GBM và RF, một vài phần trăm điểm khác biệt về hiệu suất có thể chưa đủ thuyết phục. Nếu không xem xét mức độ kết quả có thể thay đổi trên các mẫu khác nhau, thật khó để biết liệu một phương pháp có liên tục vượt trội hơn phương pháp kia hay liệu sự khác biệt quan sát được chỉ là sản phẩm của biến thiên ngẫu nhiên trong dữ liệu. Các kiểm định thống kê là yếu tố cần thiết trong vấn đề này, vì chúng cung cấp một khuôn khổ để đánh giá liệu các khác biệt quan sát được có khả năng tồn tại trong tổng thể hay không.
Giới Thiệu
Một thực hành phổ biến trong học máy để so sánh các bộ phân loại là chia tập dữ liệu thành phân tách ba chiều (tập huấn luyện, tập thẩm định và tập kiểm định) hoặc phân tách hai chiều (tập huấn luyện và tập kiểm định). Tập thẩm định (đối với phân tách ba chiều) hoặc kiểm định chéo (đối với phân tách hai chiều) được sử dụng để tinh chỉnh mô hình, trong khi tập kiểm định đánh giá hiệu suất cuối cùng. Để biết chi tiết, hãy xem Lựa chọn mô hình trong học máy trong [H2OML] Giới thiệu.
Tuy nhiên, một nhược điểm tinh tế nhưng quan trọng của việc chỉ dựa vào một tập kiểm định duy nhất là biến thiên ngẫu nhiên trong việc lựa chọn dữ liệu kiểm định. Cụ thể, ngay cả khi hai bộ phân loại hoạt động giống hệt nhau trên toàn bộ tổng thể, một bộ có thể xuất hiện vượt trội hơn do các biến động ngẫu nhiên trong dữ liệu kiểm định đã được lấy mẫu. Điều này đặc biệt có vấn đề với các tập kiểm định nhỏ.
Để giải quyết vấn đề này, các kiểm định thống kê được đề xuất trong tài liệu nghiên cứu (Dietterich 1998; Alpaydin 1999; Raschka 2018). Trong bài viết này, chúng ta sẽ khám phá câu hỏi sau: Với hai phương pháp học máy và một tập huấn luyện, làm thế nào chúng ta có thể kiểm định xem các bộ phân loại có cùng tỷ lệ lỗi trên dữ liệu chưa từng thấy hay không?
Chúng ta tập trung vào hai kiểm định: kiểm định McNemar (McNemar 1947) và kiểm định F kiểm định chéo 5x2 kết hợp (Alpaydin 1999). Sử dụng Stata và bộ lệnh h2oml của nó, chúng ta sẽ chứng minh ứng dụng của chúng. Bài viết được cấu trúc như sau: Đầu tiên, chúng ta giới thiệu cả hai kiểm định về mặt khái niệm; sau đó, chúng ta chuyển sang triển khai thực tế trong Stata.
Các Kiểm Định Thống Kê
Trong phân loại nhị phân, hiệu suất của một mô hình có thể được đánh giá bằng tỷ lệ lỗi phân loại sai, là tỷ lệ các dự đoán không chính xác trong tổng số dự đoán. Gọi dương tính thật (TP) và âm tính thật (TN) lần lượt là số lượng các trường hợp dương tính và âm tính được phân loại đúng. Gọi dương tính giả (FP) và âm tính giả (FN) lần lượt là số lượng các trường hợp bị phân loại sai. Tỷ lệ lỗi phân loại sai được định nghĩa là:
e = (FP + FN) / (TP + TN + FP + FN)
Ngược lại, độ chính xác của mô hình, đo lường tỷ lệ các dự đoán đúng, được cho bởi:
độ chính xác = (TP + TN) / (TP + TN + FP + FN) = 1 – e
Để biết chi tiết, hãy xem [H2OML] Tùy chọn chỉ số. Các chỉ số này là nền tảng để đánh giá chất lượng các dự đoán được thực hiện bởi các phương pháp như rừng ngẫu nhiên hoặc máy tăng cường gradient.
Kiểm Định McNemar
Kiểm định McNemar là một kiểm định phi tham số cho các so sánh cặp có thể được sử dụng để đánh giá xem hai phương pháp phân loại có khác nhau về hiệu suất trên cùng một tập kiểm định hay không.
Gọi n_ij là số lượng các trường hợp mà dự đoán của bộ phân loại A (ví dụ: GBM) là i (i = 1 cho dự đoán đúng hoặc i = 0 cho dự đoán sai) và dự đoán của bộ phân loại B (ví dụ: RF) là j (j = 1 cho dự đoán đúng hoặc j = 0 cho dự đoán sai). Bảng tần số 2x2 là:
Bảng 1: Thông tin cần thiết để thực hiện kiểm định McNemar để so sánh tỷ lệ lỗi của hai bộ phân loại nhị phân
| | B sai | B đúng |
|---|---|---|
| A sai | n_00 | n_01 |
| A đúng | n_10 | n_11 |
Chúng ta quan tâm đến các phần tử ngoài đường chéo: n_01 (A sai, B đúng) và n_10 (A đúng, B sai). Các giá trị này thể hiện sự bất đồng giữa các bộ phân loại.
Giả thuyết không H0 là hai bộ phân loại có cùng tỷ lệ lỗi:
H0: P(A sai, B đúng) = P(A đúng, B sai) hay n_01 = n_10
Theo giả thuyết không, số lượng các bất đồng n_01 + n_10 tuân theo phân phối nhị thức với xác suất bằng nhau cho mỗi kết quả. Với các kích thước mẫu lớn, phân phối nhị thức có thể được xấp xỉ bằng phân phối chi bình phương với 1 bậc tự do.
Thống kê kiểm định McNemar là:
chi bình phương = (n_01 – n_10) ^ 2 / (n_01 + n_10)
Thống kê này được phân phối xấp xỉ chi bình phương với 1 bậc tự do theo giả thuyết không. Xem Dữ liệu trường hợp đối chứng được ghép cặp không phân tầng (mcc và mcci) trong [R] epitab để biết thêm chi tiết.
Kiểm Định F Kiểm Định Chéo 5x2 Kết Hợp
Kiểm định F kiểm định chéo 5x2 kết hợp là một phương pháp thống kê để so sánh hiệu suất của hai phương pháp phân loại có giám sát. Nó được thiết kế để kiểm định giả thuyết không:
H0: Hai bộ phân loại có sai số khái quát hóa bằng nhau
và được xây dựng dựa trên kiểm định t cặp 5x2 CV của Dietterich (Dietterich 1998). Alpaydin (1999) đã xác định tính không ổn định trong kiểm định gốc do lựa chọn tùy ý một trong 10 thống kê kiểm định có thể và đề xuất một kiểm định F kết hợp tổng hợp tất cả chúng để tăng tính vững chắc.
Chúng ta thực hiện 5 lần lặp của kiểm định chéo 2 lượt, tạo ra 10 tập kiểm định riêng biệt. Gọi p_i^(j) là sự khác biệt về tỷ lệ lỗi giữa hai bộ phân loại trên lượt j = 1, 2 của lần lặp i = 1, ..., 5. Tức là:
p_i^(j) = e_i,A^(j) – e_i,B^(j) = độ chính xác_i,B^(j) – độ chính xác_i,A^(j)
trong đó e_i,A^(j) và e_i,B^(j) là tỷ lệ lỗi phân loại sai của bộ phân loại A và B, tương ứng, trên lượt thứ j của lần lặp thứ i, và độ chính xác_i,A^(j) và độ chính xác_i,B^(j) là các giá trị độ chính xác tương ứng.
Đối với mỗi lần lặp i, chúng ta tính trung bình:
p_bar_i = (p_i^(1) + p_i^(2)) / 2
và ước lượng của phương sai:
s_i^2 = (p_i^(1) – p_bar_i)^2 + (p_i^(2) – p_bar_i)^2 = (p_i^(1) – p_i^(2))^2 / 2
#### Kiểm Định t 5x2 CV Gốc (Để Tham Khảo)
Dietterich (1998) đề xuất thống kê t:
t = p_1^(1) / căn bậc hai ( (1/5) * tổng của s_i^2 từ i=1 đến 5 )
Điều này chỉ sử dụng 1 trong 10 giá trị p_i^(j) có thể, điều này tạo ra tính ngẫu nhiên dựa trên lựa chọn thứ tự lượt.
#### Đạo Hàm Kiểm Định F 5x2 CV Kết Hợp
Để cải thiện tính vững chắc, kiểm định F kết hợp tổng hợp tất cả 10 bình phương sai khác p_i^(j) và tất cả năm phương sai s_i^2.
Định nghĩa:
N = tổng từ i=1 đến 5, j=1 đến 2 của (p_i^(j))^2
M = tổng từ i=1 đến 5 của s_i^2
Theo giả thuyết không và giả định độc lập (xấp xỉ), chúng ta có:
F = (N / 10) / (M / 5) = tổng từ i=1 đến 5, j=1 đến 2 của (p_i^(j))^2 / (2 * tổng từ i=1 đến 5 của s_i^2)
Thống kê này được phân phối xấp xỉ F với (10, 5) bậc tự do.
Tóm lại, kiểm định F kiểm định chéo 5x2 kết hợp cải thiện so với kiểm định t gốc của Dietterich bằng cách:
* Sử dụng tất cả 10 sai khác lượt thay vì chỉ 1.
* Giảm độ nhạy cảm với thứ tự các lượt hoặc lần lặp.
* Kiểm soát tốt hơn lỗi loại I và cải thiện độ mạnh thống kê.
Triển Khai Trong Stata
Chúng ta bắt đầu phân tích bằng cách tải tệp attrition.dta và tạo một biến mới, logincome, lưu trữ logarit của thu nhập hàng tháng. Đây là một phép biến đổi phổ biến được sử dụng để chuẩn hóa các biến phân phối lệch trước khi mô hình hóa.
1. use https://www.stata.com/users/assaad_dallakyan/attrition, clear
2. gen logincome = log(monthlyincome)Sau đó, chúng ta khởi tạo cụm H2O bằng h2o init và đưa tập dữ liệu hiện tại vào một H2O frame, attrition, và đặt nó làm H2O frame hiện tại.
1. h2o init
2. _h2oframe put, into(attrition) currentChúng ta chia attrition.dta thành các H2O frame huấn luyện (70%) và kiểm định (30%) bằng cách sử dụng mã hạt giống ngẫu nhiên 19 để đảm bảo khả năng tái lập. Sau đó, chúng ta đặt train làm H2O frame làm việc hiện tại để huấn luyện mô hình.
1. _h2oframe split attrition, into(train test) split(0.7 0.3) rseed(19) replace
2. _h2oframe change trainĐể tiện lợi, chúng ta định nghĩa một macro toàn cục, predictors, bao gồm tập hợp đầy đủ các biến dự đoán cho mô hình. Chúng bao gồm nhiều đặc điểm cá nhân và liên quan đến công việc, như trình độ học vấn, mức độ hài lòng với công việc, cân bằng công việc-cuộc sống và thông tin nhân khẩu học.
1. global predictors age education employeenumber environmentsat
2> jobinvolvement jobsatisfaction logincome numcompaniesworked
3> performance relationshipsat totalworkingyears worklifebalance
4> yearsatcompany yearsincurrentrole yearswithcurrmanager
5> businesstravel gender jobrole maritalstatusKiểm Định McNemar
Đầu tiên, chúng ta huấn luyện một bộ phân loại GBM bằng cách sử dụng tập dữ liệu huấn luyện. Khi mô hình đã được huấn luyện, chúng ta chỉ định rằng H2O frame kiểm định nên được sử dụng cho các lệnh hậu ước lượng tiếp theo, hiển thị ma trận nhầm lẫn và tạo dự đoán. Các lớp dự đoán này được lưu trữ trong biến attrition_gbm trong H2O frame kiểm định test, và mô hình được lưu dưới tên gbm để so sánh sau này. Để đơn giản, đối với cả bộ phân loại GBM và RF, chúng ta đã sử dụng các giá trị mặc định cho tất cả các siêu tham số và không thực hiện tinh chỉnh. Tuy nhiên, trong các ứng dụng thực tế, chúng ta có nhiều khả năng muốn so sánh các mô hình tốt nhất thu được sau khi tinh chỉnh siêu tham số; xem Tinh chỉnh siêu tham số trong [H2OML] Giới thiệu để biết thêm chi tiết về tinh chỉnh.
1. h2oml gbbinclass attrition $predictors, h2orseed(19)
2(
3output omitted
4)
5. h2omlpostestframe test
6(testing frame test is now active for h2oml postestimation)
7. h2omlestat confmatrix
8Confusion matrix using H2O
9Testing frame: test
10 | Predicted
11 attrition | No Yes | Total Error Rate
12-----------+-----------------------+----------------------
13 No | 318 33 | 351 33 .094
14 Yes | 48 32 | 80 48 .6
15-----------+-----------------------+----------------------
16 Total | 366 65 | 431 81 .188
17Note: Probability threshold .254 that maximizes F1 metric
18 used for classification.
19. h2omlpredict attrition_gbm, class
20Progress (%): 0 100
21. h2omlest store gbmTrên tất cả 431 quan sát trong tập dữ liệu kiểm định, có 81 trường hợp phân loại sai, cho tỷ lệ lỗi tổng thể là 0.188.
Chúng ta lặp lại quy trình tương tự cho một bộ phân loại RF. Các dự đoán được lưu trữ trong biến attrition_rf, và mô hình được lưu dưới dạng rf.
1. h2oml rfbinclass attrition $predictors, h2orseed(19)
2(
3output omitted
4)
5. h2omlpostestframe test
6(testing frame test is now active for h2oml postestimation)
7. h2omlestat confmatrix
8Confusion matrix using H2O
9Testing frame: test
10 | Predicted
11 attrition | No Yes | Total Error Rate
12-----------+-----------------------+----------------------
13 No | 276 75 | 351 75 .214
14 Yes | 29 51 | 80 29 .362
15-----------+-----------------------+----------------------
16 Total | 305 126 | 431 104 .241
17Note: Probability threshold .21 that maximizes F1 metric
18 used for classification.
19. h2omlpredict attrition_rf, class
20Progress (%): 0 100
21. h2omlest store rfTrên tất cả 431 quan sát trong tập dữ liệu kiểm định, có 104 trường hợp phân loại sai, cho tỷ lệ lỗi tổng thể là 0.241. Thoạt nhìn, có vẻ như GBM vượt trội hơn RF về độ chính xác dự đoán (tỷ lệ lỗi 0.188 so với 0.241). Tuy nhiên, sự khác biệt này có thể không cho thấy sự khác biệt trong tổng thể. Điều này nhấn mạnh tầm quan trọng của việc bổ sung các chỉ số độ chính xác bằng kiểm định thống kê phù hợp, như chúng ta sẽ làm tiếp theo với kiểm định McNemar và kiểm định F kiểm định chéo 5x2.
Để thực hiện kiểm định McNemar, chúng ta đưa dữ liệu kiểm định và các dự đoán trở lại Stata (thông qua _h2oframe get) để phân tích thống kê thêm. Chúng ta mã hóa các dự đoán và kết quả phân loại dạng chuỗi thành các biến số và loại bỏ các phiên bản chuỗi gốc.
1. clear
2. _h2oframe get attrition attrition_gbm attrition_rf using test
3. encode attrition, gen(nattrition)
4. encode attrition_gbm, gen(nattrition_gbm)
5. encode attrition_rf, gen(nattrition_rf)
6. drop attrition attrition_gbm attrition_rfBước tiếp theo là tạo một bảng ba chiều phân nhóm chéo các giá trị thực với cả hai dự đoán của mô hình. Từ kết quả, chúng ta xác định các số lượng cần thiết (hiển thị trong bảng 1) cho kiểm định McNemar và lưu trữ chúng vào các macro cục bộ.
1. table (nattrition_gbm) (nattrition nattrition_rf ), nototal
2---------------------------------------------------
3 | nattrition
4 | No Yes
5 | nattrition_rf nattrition_rf
6 | No Yes No Yes
7---------------+-----------------------------------
8nattrition_gbm |
9 No | 303 17 41 8
10 Yes | 9 22 5 26
11---------------------------------------------------
12. local n00 = 22 + 41 // Nb. of obs. misclassified by both GBM and RF
13. local n01 = 17 + 5 // Nb. of obs. misclassified by RF but not by GBM
14. local n10 = 9 + 8 // Nb. of obs. misclassified by GBM but not by RF
15. local n11 = 303 + 26Sau đó, chúng ta chạy lệnh mcci để tính thống kê McNemar bằng cách sử dụng các tần số này.
1. mcci `n00' `n01' `n10' `n11'
2 | Controls |
3Cases | Exposed Unexposed | Total
4-----------------+------------------------+-----------
5 Exposed | 63 22 | 85
6 Unexposed | 17 329 | 346
7-----------------+------------------------+-----------
8 Total | 80 351 | 431
9McNemar's chi2(1) = 0.64 Prob > chi2 = 0.4233
10Exact McNemar significance probability = 0.5224Kết quả không cung cấp bằng chứng để bác bỏ giả thuyết không, cho thấy không có sự khác biệt về hiệu suất.
Đối với các mô hình tốn kém về mặt tính toán để huấn luyện, Dietterich (1998) khuyến nghị kiểm định McNemar là phương pháp được lựa chọn. Đối với các mô hình có thể được huấn luyện nhiều lần (ví dụ: 10 lần), ông khuyến nghị kiểm định t 5x2 CV vì nó mạnh hơn một chút so với kiểm định McNemar. Tiếp theo, chúng ta mô tả cách triển khai kiểm định F 5x2 CV trong Stata, đây là một phiên bản cải tiến của kiểm định t 5x2 CV.
Kiểm Định F Kiểm Định Chéo 5x2 Kết Hợp
Chúng ta bắt đầu bằng cách chuyển sang H2O frame chứa toàn bộ tập dữ liệu (attrition). Sau đó, chúng ta khởi tạo các biến vô hướng để tích lũy N và M được sử dụng để tính thống kê F.
1. _h2oframe change attrition
2. scalar N = 0
3. scalar M = 0Chúng ta sẽ thực hiện 5 lần lặp, trong mỗi lần lặp, chúng ta chia ngẫu nhiên tập dữ liệu thành hai nửa bằng nhau, huấn luyện và kiểm định. Để đảm bảo khả năng tái lập, chúng ta đặt một mã hạt giống trong Stata và sau đó tạo số giả ngẫu nhiên bằng hàm runiformint(). Chúng ta trích xuất các chữ số từ số này để tạo thành một mã hạt giống mới, mà chúng ta truyền cho bộ tạo số giả ngẫu nhiên của H2O thông qua tùy chọn rseed() của lệnh _h2oframe split. Lưu ý rằng quy trình này khác với quy trình chúng ta đã khuyến cáo không nên trong mục [R] set seed. Trong trường hợp này, vì bộ tạo số giả ngẫu nhiên của H2O không liên quan đến của Stata, không có rủi ro bộ tạo hội tụ về một chu trình. Sau đó, chúng ta huấn luyện GBM và RF trên mỗi nửa và đánh giá chúng trên nửa còn lại, ghi lại độ chính xác của chúng (được tính thông qua lệnh h2omlestat threshmetric). Chúng ta tính sự khác biệt về hiệu suất cho mỗi lượt (p_i^(j), j = 1, 2) và lưu trữ chúng vào các biến vô hướng pi1 và pi2. Sau đó, chúng ta tính phương sai và tích lũy bình phương các sai khác và phương sai trên tất cả các lần lặp. Những giá trị này sau đó được sử dụng để tính thống kê F.
1. set seed 19
2. forvalues i = 1(1)5 {
3 2. local split_seed = runiformint(1, 50000)
4 3. _h2oframe split attrition, into(train test) split(0.5 0.5) rseed(`split_seed') replace
5 4. quietly {
6 5. _h2oframe change train
7 6. h2oml gbbinclass attrition $predictors, h2orseed(19) validframe(test)
8 7. h2omlestat threshmetric
9 8. scalar accA_1 = r(threshmetric)[4,1] // Accuracy of A (GBM) on 1st fold
10 9.
11. h2oml rfbinclass attrition $predictors, h2orseed(19) validframe(test)
12 10. h2omlestat threshmetric
13 11. scalar accB_1 = r(threshmetric)[4,1] // Accuracy of B (RF) on 1st fold
14 12.
15. _h2oframe change test
16 13. h2oml gbbinclass attrition $predictors, h2orseed(19) validframe(train)
17 14. h2omlestat threshmetric
18 15. scalar accA_2 = r(threshmetric)[4,1] // Accuracy of A (GBM) on 2nd fold
19 16.
20. h2oml rfbinclass attrition $predictors, h2orseed(19) validframe(train)
21 17. h2omlestat threshmetric
22 18. scalar accB_2 = r(threshmetric)[4,1] // Accuracy of B (RF) on 2nd fold
23 19.
24 // Compute the difference in performance
25. scalar pi1 = accA_1 - accB_1 // Equation (2)
26 20. scalar pi2 = accA_2 - accB_2
27 21. scalar variance = (pi1 - pi2)^2 / 2 // Equation (3)
28 22. scalar N = N + pi1^2 + pi2^2 // Equation (4)
29 23. scalar M = M + variance // Equation (4)
30 24. }
31 25. }
32. scalar f_stat = N / (2 * M) // Equation (5)
33. scalar p_value = Ftail(10, 5, f_stat)
34. di p_value
35.19382379Kết quả của kiểm định này ủng hộ kết quả của kiểm định McNemar. Không có bằng chứng cho thấy các phương pháp hoạt động khác nhau.
✨ **Giá trị đắt giá**
Việc đánh giá hiệu suất của các bộ phân loại học máy không nên chỉ dừng lại ở các chỉ số điểm như độ chính xác. Các kiểm định thống kê như kiểm định McNemar và kiểm định F kiểm định chéo 5x2 kết hợp là công cụ thiết yếu để xác định liệu sự khác biệt hiệu suất quan sát được có thực sự có ý nghĩa thống kê ở cấp độ tổng thể hay chỉ là biến thiên ngẫu nhiên trong dữ liệu mẫu. Việc áp dụng chúng, như đã trình bày với Stata, giúp đưa ra các kết luận mạnh mẽ hơn và đáng tin cậy hơn trong khoa học dữ liệu.
Câu hỏi tư duy hoặc bài tập ứng dụng
Khi nào bạn nên ưu tiên sử dụng kiểm định McNemar thay vì kiểm định F kiểm định chéo 5x2 kết hợp, và ngược lại? Hãy giải thích lý do, đặc biệt xét đến chi phí tính toán và số lượng lần có thể huấn luyện mô hình.


