Nội dung nghiên cứu bao gồm tất cả các vấn đề có liên quan bản chất của lỗi phần mềm, các phương pháp dự đoán lỗi phần mềm hiện tại, kỹ thuật phân tích và xử lý số liệu phần mềm, Nền tản
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA
-
NGUYỄN MẬU HẢI
DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN ĐỘ ĐO MÃ NGUỒN
Trang 2Tôi cam đoan đây là công trình nghiên cứu của riêng tôi Các số liệu, kết quả nêu trong luận văn là trung thực và chưa từng được ai công bố trong bất kỳ công trình nào khác
TÁC GIẢ LUẬN VĂN
Nguyễn Mậu Hải
Trang 3MỤC LỤC
MỤC LỤC 1
DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT VÀ CỤM TỪ 3
DANH MỤC CÁC BẢNG 6
DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ 7
TỔNG QUAN 8
1 Đặt vấn đề 8
2 Mục tiêu và nội dung nghiên cứu 9
3 Đối tượng và phạm vi nghiên cứu 9
4 Phương pháp nghiên cứu 9
5 Ý nghĩa khoa học và thực tiễn 9
CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐOÁN LỖI 11
1.1 Bài toán dự đoán lỗi 11
1.2 Quản lý lỗi phần mềm 11
1.3 Hướng tiếp cận dự đoán lỗi phần mềm 12
1.4 Độ đo mã nguồn 13
CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY 18
2.1 Học có giám sát 19
2.1 Học không có giám sát 21
2.2 Các yếu tố cần xem xét khi lựa chọn và áp dụng thuật toán học máy 23
2.3 Thuật toán Cây quyết định 24
CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY 29
3.1 SDP dựa trên học máy 29
3.2 Tiền xử lý dữ liệu 29
3.3 Kỹ thuật Ensemble learning 30
3.4 Các thuật toán Ensembles learning cho SDP 31
3.5 Đánh giá phương pháp dự đoán (Prediction Method evaluation) 39
CHƯƠNG IV: ĐÁNH GIÁ THỰC NGHIỆM CÁC PHƯƠNG PHÁP HỌC KẾT HỢP 43 4.1 Tập dữ liệu dự đoán lỗi phần mềm 43
4.2 Xây dựng mô hình 43
4.3 Tiêu chí đánh giá hiệu suất số liệu phần mềm 45
4.4 Kết quả thực nghiệm 45
4.5 Xây dựng website hỗ trợ dự đoán lỗi 51
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 53
TÀI LIỆU THAM KHẢO 56
Trang 4DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN ĐỘ ĐO MÃ NGUỒN
SỬ DỤNG KỸ THUẬT HỌC KẾT HỢP
Học viên: Nguyễn Mậu Hải, Chuyên ngành: Khoa học máy tính
Mã số:8480101, Khóa: K35 – KHMT, Trường Đại học Bách khoa - ĐHĐN
Tóm tắt – Lỗi phần mềm gây ảnh hưởng đến thời gian, chất lượng, chi phí, công sức và sự
lãng phí các nguồn lực Phát hiện lỗi trong giai đoạn đầu của quá trình phát triển phần mềm để khắc phục và sữa chữa sớm là một trong những đòi hỏi để cải thiện chất lượng, làm tăng hiệu quả phát triển phần mềm Có nhiều nghiên cứu, áp dụng các kỹ thuật Học máy để xây dựng công cụ dự đoán lỗi nhưng vẫn còn nhiều vấn đề hạn chế hoặc có thể chỉ phát huy ở một khía cạnh nào đó trong kỹ thuật phát triển phần mềm Luận án này cũng nhìn nhận tổng quan trong lĩnh vực quản lý lỗi phần mềm và dự đoán lỗi, tìm hiểu các thuật toán Học máy, đồng thời áp dụng kỹ thuật học kết hợp (ensemble learning) để dự đoán, phát hiện lỗi giúp khắc phục sớm nhằm cải thiện chất lượng phần mềm Các kỹ thuật học máy liên quan đến dự đoán lỗi được giới thiệu, đặc biệt là học có giám sát Các thuật toán Dicision Tree, Random Forest, Boosting, Bagging, AdaBoost được nghiên cứu để áp dụng Các kỹ thuật học kết hợp được triển khai bằng các mô hình Kỹ thuật Stacking được xây dựng dựa trên các mô hình emsembles như bộ học cơ sở và sau đó sử dụng Meta-Classifier tổng hợp kết quả và đưa ra kết quả cuối cùng Việc đánh giá mô hình và độ tin cậy của thuật toán được thực hiện dựa trên các phép đo F1, ROC, AUC và thời gian huấn luyện Với những kết quả trên, tác giả hướng thử nghiệm và tối ưu hóa, tiến đến xây dựng một công cụ dự đoán lỗi để áp dụng trong thực tế sản xuất phần mềm của doanh nghiệp
Từ khóa – Dự đoán lỗi phần mềm, học kết hợp, độ đo mã nguồn, số liệu phần mềm,
kiểm thử phần mềm
SOFTWARE DEFECT PREDICTION BASED ON THE SOURCE CODE
MEASUREMENT METHOD USING THE ENSEMBLES LEARNING
Abstract - Software defect affect time, quality, cost, effort and waste of resources Detecting errors in the early stages of software development to repair and fix early is one of the requirements
to improve quality, increase efficiency software development There are many studies, using machine learning techniques to build software defect prediction tools, but there are still many problems or can
be only promote in a certain aspect in software development techniques This thesis also provides an overview in the fields of software error management and defects prediction, understanding machine learning algorithms and applying techniques of ensemble learning to predict and detect errors fix early to improve software quality Machine learning techniques related to software defects prediction are introduced, especially supervised learning Decision Tree, Random Forest, Boosting, Bagging, AdaBoost algorithms are studied to apply Ensemble learning techniques are deployed by models The Stacking technique is built upon the emsembles models as the base learner and then uses the Meta-Classifier to summarize the results to produce the result final The evaluation of the model and the reliability of the algorithm is done based on F1, ROC, AUC and training time measurements With the above results, the author directs testing and optimization, proceeding to build an error prediction tool to apply in actual software production of enterprises
Key words – Software defect prediction; ensembles learning; source code measurement,
software metrics; software testing
Trang 5DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT VÀ CỤM TỪ
Analysis of variance Phân tích phương sai
Binomial distribution Phân phối nhị phân
Categorical variable Biến thứ bậc
Coefficient of correlation Hệ số tương quan
Coefficient of determination Hệ số xác định bội
Coefficient of heterogeneity Hệ số bất đồng nhất
Confidence interval Khoảng tin cậy
Continuous variable Biến liên tục
Cross Project Defect Prediction - CPDP Dự đoán lỗi liên dự án
Cross-over experiment Thí nghiệm giao chéo
Cumulative probability distribution Hàm phân phối tích lũy
Trang 6Fixed effects Ảnh hưởng bất biến
Latin square experiment Thí nghiệm hình vuông Latin
Least squares method Phương pháp bình phương nhỏ nhất Linear Logistic regression analysis Phân tích hồi qui tuyến tính logistic Linear regression analysis Phân tích hồi qui tuyến tính
Normal distribution Phân phối chuẩn
Poisson distribution Phân phối Poisson
Polynomial regression Hồi qui đa thức
Trang 7Probability Xác suất
Probability density distribution Hàm mật độ xác suất
Repeated measure experiment Thí nghiệm tái đo lường
Residual mean square Trung bình bình phương phần dư Residual sum of squares Tổng bình phương phần dư
Semi-Supervised Learning Học bán giám sát
Software Defect Prediction Dự đoán lỗi phần mềm
Standardized normal distribution Phân phối chuẩn chuẩn hóa Supervised Learing Học có giám sát
Survival analysis Phân tích biến cố
Unsupervised Learning Học không có giám sát
With-in Project Defect Prediction - WPDP Dự đoán lỗi bên trong dự án
Trang 8DANH MỤC CÁC BẢNG
Bảng 1 Số liệu dùng để đo lường các đặc trưng lỗi phần mềm 15
Bảng 2 Kết quả các thuật toán học kết hợp và Cây quyết định 46
Bảng 3 Kết quả F1 của các thuật toán Stacking 47
Bảng 4 Kết quả AUC của các thuật toán Stacking 48
Bảng 5 Kết quả thời gian huấn luyện của các thuật toán Stacking 49
Trang 9DANH MỤC CÁC HÌNH VÀ ĐỒ THỊ
Hình 1 Các nhóm tham số khác nhau về độ đo trong công nghệ phần mềm 13
Hình 2 Thuật toán học máy 18
Hình 3 Cây thể hiện sự sống trên tàu Titanic 25
Hình 4 Phân loại Bagging trên tập dữ liệu Iris với hai bộ ước tính cơ sở: DS và k-NN 33
Hình 5 Các cây trong Rừng ngẫu nhiên 34
Hình 6 AdaBoost sử dụng sô bộ ước tính cơ sở khác nhau 36
Hình 7 Stacking sử dụng nhiều loại bộ học khác nhau 38
Hình 8 Mô tả trực quan đường cong ROC 41
Hình 9 Mô hình Boosting cho thuật toán AdaBoost và Gradient Boosting 44
Hình 10 Mô hình Bagging cho thuật toán Random Forest và Bagging 44
Hình 11 Mô hình stacking 45
Hình 12 Đường cong ROC ứng với từng thuật toán học kết hợp 50
Hình 13 Giao diện ứng dụng web hỗ trợ dự đoán lỗi 51
Hình 14 Báo cáo kết quả dự đoán lỗi phần mềm 52
Trang 10Các dự án phát triển phần mềm đang ngày càng lớn, phức tạp, tốn kém và trở nên khó dự đoán Một trong nhiều vấn đề cần quan tâm là các dự án phần mềm khi gia tăng quy
mô và độ phức tạp, nó làm tăng khả năng rủi ro và do vậy ảnh hưởng đến chi phí hoặc tiến
độ của chính các dự án
Việc phát hiện các lỗi tiềm ẩn trong phần mềm có ý nghĩa rất lớn, giúp cải thiện thời gian, giảm chi phí và nâng cao năng lực cạnh tranh trong phát triển phần mềm Trường hợp không kiểm soát tốt lỗi, doanh nghiệp buộc phải tăng cường các khả năng khác, bao gồm: đánh giá mã tập trung, tăng cường kiểm tra đơn vị mã nguồn và tăng khả năng giám sát nhân lực phát triển ở nhiều cấp độ
Xuất phát từ việc nhìn nhận, các nhà phát triển phần mềm rất mong đợi và có nhu cầu về công cụ dự đoán các lỗi tốt hơn Bằng việc xác định xu hướng, tôi mong muốn đi sâu tìm hiểu các vấn đề này thông qua phân tích, đánh giá thuật toán và các mô hình Theo hiểu biết của tôi, cho đến nay vẫn chưa có nghiên cứu nào đáp ứng tốt mục tiêu dự đoán chính xác số lượng lỗi phần mềm với thời gian phù hợp
Mặc dù nhiều nghiên cứu gần đây đã chứng minh kết quả đầy hứa hẹn của Học máy khi sử dụng để dự đoán tỷ lệ lỗi phần mềm dựa trên các phép đo phân tích tình trạng như
độ phức tạp của mã nguồn và kích thước mã,… Tuy nhiên về tiêu chuẩn áp dụng cho ngành vẫn còn chậm Hầu hết các dự án phát triển phần mềm vẫn sử dụng các phương pháp dự đoán lỗi truyền thống, phần lớn tập trung vào mối quan hệ giữa số dòng mã với số lượng lỗi trong một ứng dụng Trong khi mối tương quan giữa hai phép đo này đã được chứng minh có độ lệch đáng kể và dẫn đến kết quả chưa được đánh giá cao
Trang 11Rõ ràng, rất cần có một giải pháp mới, hiệu quả hơn nhằm hỗ trợ các nhóm phát triển phần mềm đo lường hiệu quả về chất lượng, điều đó đề cập đến việc cần thiết phải có công
cụ dự đoán lỗi phần mềm
2 Mục tiêu và nội dung nghiên cứu
Nghiên cứu, đánh giá các thuật toán học máy và các thuật toán ứng dụng trong dự đoán lỗi phần mềm, tiến tới xây dựng công cụ dự đoán lỗi dựa trên học máy
Để làm được điều đó, tác giả cần có sự hiểu biết sâu về vấn đề này thông qua tìm hiểu một cách thấu đáo lý thuyết và kết hợp thực nghiệm Nội dung nghiên cứu bao gồm tất cả các vấn đề có liên quan bản chất của lỗi phần mềm, các phương pháp dự đoán lỗi phần mềm hiện tại, kỹ thuật phân tích và xử lý số liệu phần mềm, Nền tảng học máy, các thuật toán học máy và kỹ thuật ensemble learning dùng để dự đoán lỗi phần mềm
3 Đối tượng và phạm vi nghiên cứu
Phạm vi dự đoám lỗi phần mềm khá rộng đòi hỏi sự đầu tư nhiều về nguồn lực và thời gian Luận văn này đi sâu vào tìm hiểu lý thyết về phân tích dự đoán và lựa chọn dự đoán lỗi trên các file phần mềm được phát triển bằng ngôn ngữ Java Điều này được thực hiện trong phạm vi nghiên cứu các thuật toán phân tích dự đoán, các mô hình áp dụng, các phương pháp đánh giá các mô hình và nghiên cứu kỹ thuật ensemble dùng để dự đoán lỗi
4 Phương pháp nghiên cứu
Dựa trên lý thuyết về phân tích và thống kê, tác giả tìm hiểu cơ sở lý thuyết về các học máy đối với bài toán dự đoán và tìm hiểu các thuật toán ứng dụng tương ứng dựa trên quy trình kỹ thuật dự đoán lỗi phần mềm
Từ cơ sở lý thuyết đó, tác giả tiến hành lựa chọn xây dựng mô hình dựa trên thuật toán dự đoán lỗi (dựa trên thư viện sklearn) và lập trình ứng dụng bằng ngôn ngữ Python
Kết quả được đánh giá thông qua các phép hiệu suất đo mô hình và độ chính xác dự đoán, đồng thời cũng xét đến thời gian huấn luyện đối với từng mô hình sử dụng kỹ thuật ensembles learning cụ thể
5 Ý nghĩa khoa học và thực tiễn
- Áp dụng lý thuyết phân tích và dự đoán trong các lĩnh vực của đời sống
- Áp dụng kỹ thuật học máy và các thuật toán để dự đoán lỗi phần mềm
- Đóng góp bổ sung kết quả nghiên cứu và thực nghiệm, đóng góp công cụ phân tích sử dụng kỹ thuật học máy và các mô hình thuật toán ứng dụng
- Tạo ra công cụ để giúp các nhà phát triển cải thiện chất lượng phần mềm, kiểm soát tiến trình, giảm thiểu rủi ro và tăng tính khả thi cho các dự án
Trang 12- Giúp cho các Công ty phần mền kiểm soát tốt nguồn lực, giảm thiểu chỉ phí đầu
tư, rút ngắn thời gian, đảm bảo tính cạnh tranh và nâng cao hiệu quả kinh doanh
6 Cấu trúc luận văn
Luận văn được trình bày bao gồm 04 chương, với nội dung cụ thể như sau:
Chương 1 trình bày lý thuyết về độ đo mã nguồn và bài toán dự đoán lỗi Phần này nêu bài toán dự đoán lỗi và phương thức quản lý lỗi phần mềm xuất phát từ hướng tiếp cận dựa trên các tiêu chí độ đo mã nguồn
Chương II trình bày tổng quan về các kỹ thuật học máy, trong đó tập trung vào các
kỹ thuật học có giám sát Từ cơ sở lý thuyết, phần này cũng nêu rõ các yếu tố cần xem xét khi lựa chọn và áp dụng thuật toán học máy để đáp ứng giải quyết vấn đề cụ thể Thuật toán Cây quyết định là một trong những thuật toán cơ bản cũng được làm rõ để nghiên cứu ứng dụng cho bài toán dự đoán lỗi
Chương III trình bày tổng quan phương pháp dự đoán lỗi phần mềm dựa trên học máy với các vấn đề liên quan đến việc thu thập và xử lý dữ liệu Dữ liệu dùng trong Luận văn này được lấy từ kho PROMISE (địa chỉ: http://promise.site.uottawa.ca/SERepository), trước khi đưa vào mô hình, tác giả thực hiện công việc tiền xử lý để chuẩn hóa dữ liệu Các
kỹ thuật ensembles learning cũng được xem xét, đặt biệt là các biến thể của cây quyết định được thể hiện thông qua Random Forest, Boosting, Bagging, AdaBoost, Gadient Descent Tree và Stacking dùng cho dự đoán lỗi phần mềm Bên cạnh đó việc đánh giá mô hình cũng được trình bày để xác định hiệu suất, độ chính xác và độ tin cậy của mô hình
Chương IV trình bày việc thực hiện bài toán dự đoán lỗi phần mềm trong đó lựa chọn phương pháp dự đoán lỗi trên các tập tin được viết bằng ngôn ngữ Java Tập dữ liệu được lấy trên kho dữ liệu PROMISE dùng để huấn luyện mô hình và sử dụng thư viện sklearn để cài đặt thuật toán Các mô hình học máy được xây dựng từ các biến thể Cây quyết định bằng kỹ thuật học kết hợp với các tham số được để mặc định (quy định bởi thư viện sklearn)
Kết quả đánh giá dựa trên các phép đo F1, ROC, AUC và thời gian huấn luyện để đánh giá các mô hình Một website được xây dựng để người dùng chọn file (ngôn ngữ Java)
và cho phép chọn kỹ thuật ensembles learning phù hợp để dự đoán
Phần cuối là kết luận về các kết quả đã đạt được và hướng phát triển của luận văn
Trang 13CHƯƠNG I: ĐỘ ĐO MÃ NGUỒN VÀ BÀI TOÁN DỰ ĐOÁN LỖI
1.1 Bài toán dự đoán lỗi
Lỗi phần mềm là lỗi, sai sót, nhầm lẫn, sự cố hoặc sự thiếu chính xác trong phần mềm khiến nó tạo ra một kết quả sai hoặc sự cố không lường trước được Lỗi là thuộc tính
cố hữu của một hệ thống, chúng xuất hiện từ khâu thiết kế hoặc khâu sản xuất hoặc môi trường bên ngoài Lỗi phần mềm là lỗi lập trình gây ra hiệu năng khác so với dự tính Phần lớn các lỗi là từ mã nguồn hoặc thiết kế, một số trong số đó là từ mã không chính xác được tạo từ trình biên dịch
Đối với các nhà phát triển phần mềm và khách hàng, lỗi phần mềm là một vấn đề nguy hiểm Các lỗi phần mềm không chỉ làm giảm chất lượng phần mềm, tăng chi phí mà còn làm trì hoãn tiến độ phát triển, thậm chí có thể hủy bỏ cả dự án
Dự đoán lỗi phần mềm được đề xuất nhằm để giải quyết rắc rối này Để dự đoán lỗi phần mềm (Software Defect Prediction – SDP) hiệu quả có thể phải từ quá trình kiểm thử hiệu năng của phần mềm và trực tiếp phân bổ tài nguyên Để phần mềm phát triển đạt chất lượng, các lỗi phần mềm phải được phát hiện và sửa lỗi ở giai đoạn đầu của chu kỳ phát triển phần mềm (Software Development Life Cycle – SDLC)
1.2 Quản lý lỗi phần mềm
Mục đích chính của việc quản lý lỗi phần mềm là để kiểm soát, làm tăng chất lượng của phần mềm bằng cách xác định và sửa chữa các lỗi trong giai đoạn sớm của SDLC Các giai đoạn khác nhau của SDLC bao gồm thu thập các yêu cầu, phân tích, thiết kế, viết mã, thử nghiệm, triển khai và giai đoạn cuối cùng là công việc bảo trì SDP đóng vai trò quan trọng trong việc phát triển phần mềm chất lượng cao Xác định các lỗi trong giai đoạn đầu của SDLC là một công việc rất phức tạp, do đó cần được áp dụng các phương pháp hiệu quả để thực hiện
Các giai đoạn chính trong việc kiểm soát lỗi bao gồm:
Trang 141.3 Hướng tiếp cận dự đoán lỗi phần mềm
Qua việc nghiên cứu các kỹ thuật dự đoán đã được áp dụng và thử nghiệm, chúng ta nhận thấy có ba phương pháp chủ yếu thường được sử dụng để thực hiện đánh giá các mô hình dự đoán
Dự đoán lỗi bên trong dự án (With-in Project Defect Prediction - WPDP)
Dự đoán lỗi liên dự án (Cross Project Defect Prediction - CPDP), liên quan đến 2 trường hợp:
✓ CPDP đối với các tập dữ liệu đồng nhất (Homogeneity)
✓ CPDP đối với tập dữ liệu không đồng nhất, phức tạp (Hetrogeneous)
1.3.1 Dự đoán lỗi bên trong dự án
Mô hình dự đoán có thể được xây dựng bằng cách thu thập dữ liệu lịch sử từ một dự
án phần mềm và dùng nó để dự đoán các lỗi trong cùng dự án được gọi là WPDP WPDP hoạt động tốt nếu có đủ thông tin về lịch sử dữ liệu nhằm giúp đào tạo cho mô hình
Turhan, Burak và cộng sự đề xuất mô hình dự đoán lỗi dự đoán lỗi phần mềm đối với các vùng trọng điểm của phần mềm phát triển với tồn tại dữ liệu nội bộ (dự đoán lỗi bên trong dự án) Để áp dụng mô hình này, họ khuyến nghị các công ty phát triển phần mềm nên tạo một kho dữ liệu và lưu trữ các dữ liệu dự án và các thông tin liên quan đến lỗi
từ dự án trong suốt quá trình phát triển [19]
Nhược điểm của WPDP là:
✓ Không phải lúc nào tất cả các dự án đều có thể thu thập dữ liệu lịch sử đó;
✓ Không thể đạt được độ chính xác 100% khi sử dụng WPDP
Zimmerman và cộng sự nhận định rằng, dự đoán lỗi thực hiện tốt hơn trong các dự
án là khi có đủ dữ liệu để đào tạo cho mô hình [3] Nghĩa là, để xây dựng mô hình dự đoán lỗi, chúng ta cần truy cập dữ liệu lịch sử Trường hợp dữ liệu bị thiếu thì ta có thể áp dụng
Dự đoán lỗi liên dự án (CCDP)
Mặt khác, dữ liệu lịch sử thường không thể có đối với các dự án mới và áp dụng đối với nhiều công ty phát triển phần mềm Trong trường hợp này, dự đoán lỗi sẽ rất khó để có được thành công Để giải quyết vấn đề này, chúng ta cũng phải cần áp dụng CCDP
1.3.2 CPDP đối với các tập dữ liệu đồng nhất (Homogeneity)
CPDP đối với tập dữ liệu đồng nhất được sử dụng theo phương pháp tương tự như một dự án không có đủ dữ liệu lịch sử để đào tạo mô hình Do vậy, mô hình dự đoán được phát triển cho một dự án và nó được áp dụng cho một số dự án khác hoặc trên toàn dự án Nghĩa là, nó thực hiện cùng một mô hình dự đoán từ dự án này áp dụng sang dự án khác Hạn chế của việc áp dụng CPDP là nó mong muốn các dự án có tập số liệu tương đồng (tập
Trang 15số liệu phải bằng nhau giữa các dự án) Kết quả là, kỹ thuật áp dụng cho CPDP rất phức tạp khi liên quan đến các dự án với bộ dữ liệu không giống nhau [20]
1.3.3 CPDP đối với tập dữ liệu không đồng nhất (Hetrogeneous)
Để đối phó với sự không phù hợp nêu trên khi chỉ sử dụng bộ dữ liệu tương tự cho CPDP, kỹ thuật dự đoán lỗi không đồng nhất (Hetrogeneous Defect Prediction – HDP) đã được đề xuất để dự đoán các lỗi trên các dự án phần mềm với các bộ số liệu không cân bằng
1.4 Độ đo mã nguồn
Độ đo phần mềm là thành phần thuộc tính có thể định lượng hoặc đếm được mà chúng có thể được dùng để đo lường và dự đoán chất lượng của phần mềm Một độ đo là một chỉ số mô tả một tính năng cụ thể của phần mềm Xác định và đo lường số liệu phần mềm rất quan trọng vì nhiều lý do, bao gồm để ước thời gian thực thi, đo lường hiệu quả của quy trình phần mềm, ước tính các nỗ lực cần thiết cho quy trình, giảm bớt lỗi trong quá trình phát triển phần mềm, giám sát và kiểm soát quá trình thực thi dự án Ba nhóm tham
số được dùng để đo lường như mô tả trong Hình 1
Hình 1 Các nhóm tham số khác nhau về độ đo trong công nghệ phần mềm
Độ đo quy trình nhằm đánh giá hiệu quả các số liệu và giá trị của quy trình phần mềm, xác định sự hình thành của quy trình, nỗ lực cần có trong quy trình, hiệu quả của việc giảm thiểu lỗi trong quá trình phát triển, v.v
Độ đo sản phẩm dùng để xác định số liệu sản phẩm trong các giai đoạn khác nhau
từ giai đoạn lập yêu cầu đến triển khai phát triển phần mềm hoặc bản thân nội tại phần mềm Độ đo dự án là các phép đo của dự án phần mềm, chúng được dùng để theo dõi và kiểm soát việc thực hiện dự án qua các phiên bản Mục đích dùng độ đo phần mềm là:
• Đo lường kích thước, chất lượng phần mềm
• Đánh giá mức độ phức tạp
• Xác định ngày phiên bản
Trang 16• Ước lượng về tài nguyên, chi phí và tiến độ
Như vậy, có thể nói rằng để xây dựng một phần mềm dự đoán lỗi phải được thực hiện với một phạm vi rộng, đồng thời việc thu thập thông tin và xử lý các số liệu phục vụ cho việc xây dựng mô hình dự đoán cần có sự đầu tư rất lớn Trong phạm vi luận văn này, tôi chỉ tập trung vào việc nghiên cứu về độ đo sản phẩm phần mềm và dùng nó để dự đoán lỗi, bao gồm tập các số liệu hướng lớp được xác định từ mã nguồn
Độ đo mã tĩnh
Độ đo mã tĩnh là số liệu có thể được trích xuất trực tiếp từ mã nguồn, chẳng hạn như
số dòng mã (LOC) và độ phức tạp theo chu kỳ Source Lines of Code (SLOC) là một nhóm các số liệu tập trung vào số lượng dòng mã trong các tệp mã nguồn SLOC chứa các số liệu khác nhau: LOC vật lý (SLOCP), tổng số dòng mã LOC, dòng trống (BLOC), các dòng comment (CLOC), các dòng có chứa comment (SLOC-L) và các dòng lệnh thực thi [6] Lượng phức tạp của chu trình (Cyclomatic Complexity Number - CCN) hay còn được gọi
là số liệu McCabe là phép đo độ phức tạp của cấu trúc module quyết định được Thomas McCabe đề xuất [15] CCN xác định số lượng rẽ nhánh độc lập và được tính như sau: bắt đầu từ 0, CCN tăng thêm sau một lần gọi phương thức tách luồng điều khiển Trường hợp này được dùng đối với các câu lệnh If, Then, While, Case, Catch, &&, | |, Or, ? được phát hiện trong mã nguồn Các số liệu mã tĩnh khác bao gồm số các lệnh của trình biên dịch và
số lượng khai báo dữ liệu
Độ đo hướng đối tượng:
Số liệu hướng đối tượng là một danh mục con của số liệu mã tĩnh, vì số liệu này cũng được trích xuất từ chính mã nguồn
Bộ số liệu hướng đối tượng (OO) được Chidamber-Kemerer (C&K) sử dụng gồm
có 8 số liệu khác nhau: sáu số liệu được định nghĩa từ bộ số liệu C&K ban đầu và hai số liệu bổ sung là Weighted Methods per Class (WMC), Depth of Inheritance Tree (DIT), Number of Children (NOC) Coupling Between Objects (CBO), Response for Class (RFC), Lack of Cohesion in Methods (LCOM) [6]
Các số liệu OO bổ sung gồm Afferent couplings (Ca), Number of Public Methods (NPM) Ngoài ra, QMOOD cũng là một trong những mô hình đánh giá chất lượng của phần mềm hướng đối tượng Các số liệu được dùng để đánh giá sự tác động đến các thuộc tính chất lượng của phần mềm như SIZE, NOC, DIT, DAM, CBO, CAM, MOA, MFA, NOP, RFC, WMPC Do vậy, các số liệu QMOOD cũng được áp dụng trong phạm vi nghiên cứu này để hỗ trợ việc dự đoán chất lượng phần mềm
Trang 17Sau đây là bảng tổng hợp các số liệu dùng để đo lường phần mềm hướng lớp được dùng trong luận văn này:
Bảng 1 Số liệu dùng để đo lường các đặc trưng lỗi phần mềm
Tên số liệu Định nghĩa
Response for a
Class (RFC)
Số liệu RFC dùng để đo số phương thức khác nhau có thể được thực hiện khi một đối tượng của lớp đó nhận được yêu cầu Xuất phát ý tưởng ta muốn tìm mỗi phương thức của lớp, các phương thức mà lớp sẽ gọi và số lần lặp cho mỗi phương thức được gọi, tính toán khả năng phương thức tiếp tục được gọi của đồ thị gọi phương thức Tuy nhiên, quá trình này có thể khó thỏa mãn độ chính xác không cao Ckjm tính toán một xấp xỉ để giải quyết bằng cách đơn giản thiết lập với việc kiểm tra các lần gọi phương thức trong quan hệ phương thức lớp Giá trị của RFC là tổng số phương thức được gọi trong phạm vi phương thức lớp và số lượng các phương thức lớp Đây là cách đơn giản hóa được sử dụng trong mô tả của Chidamber và Kemerer
Trang 18thức không chia sẻ bất kỳ truy cập trường chung nào Việc thiếu sự gắn kết trong các phương thức sau đó được tính bằng cách trừ số lượng các cặp phương thức không chia sẻ một trường truy cập vào
số lượng các cặp phương thức mà chúng được thực hiện
Trang 19Inheritance
Coupling (IC)
Số liệu này cung cấp số lớp cha mà một lớp nhất định được kết hợp Một lớp được kết hợp với lớp cha nếu một trong những phương thức thừa kế của nó phụ thuộc vào các phương thức mới hoặc được xác định lại trong lớp Lớp được kết hợp với lớp cha nếu thỏa mãn một trong các điều kiện sau:
• Một trong các phương thức thừa kế của nó sử dụng một thuộc tính
mà nó được định nghĩa lại trong Phương thức mới
• Một trong những phương thức được thừa kế gọi một phương thức được định nghĩa lại
• Một trong những phương thức được thừa kế được gọi bởi một phương thức được định nghĩa lại và sử dụng tham số mà nó được định nghĩa trong Phương thức được định nghĩa lại
Coupling
Between Methods
(CBM)
Số liệu đo lường tổng số các phương pháp mới hoặc định nghĩa lại
mà tất cả các phương thức thừa kế được kết hợp Có một liên kết khi
ít nhất một trong các điều kiện mà định nghĩa số liệu IC được đưa ra Average Method
Complexity
(AMC)
Số liệu này đo trung bình kích thước phương thức cho mỗi lớp Kích thước của một phương thức bằng số mã nhị phân Java trong phương thức
• Max (CC) - giá trị lớn nhất của CC trong số các phương pháp của lớp được xét
• Avg (CC) – trung bình số học của giá trị CC trong lớp được xét Lines of Code
(LOC)
Số liệu LOC dựa trên mã nhị phân Java Nó là tổng số trường, số phương thức và số lệnh trong tất cả các phương thức của lớp được xét
Trang 20CHƯƠNG II: CÁC KỸ THUẬT HỌC MÁY
Để nâng cao hiệu quả và chất lượng phát triển phần mềm và dự đoán lỗi, các kỹ thuật khai phá dữ liệu khác nhau có thể được áp dụng các thuật toán khác nhau để giải quyết vấn đề
Các kỹ thuật SDP sử dụng kỹ thuật học phổ biến và các thuật toán học máy được mô
tả trong Hình 2
Hình 2 Thuật toán học máy
Các kỹ thuật khai phá dữ liệu khác nhau được áp dụng để dự đoán lỗi phần mềm Trong khai phá dữ liệu, học máy có thể chia làm 2 loại:
• Học có giám sát (Supervised Learning)
• Học không giám sát (Unsupervised Learning)
Ngoài ra, còn có kỹ thuật học tăng cường (Reinforce Learning) và học bán giám sát (Semi-Supervised Learning) Tuy nhiên, tôi chỉ quan tâm đến 2 kỹ thuật nêu trên để đi sâu nghiên cứu nhằm nắm bắt kỹ thuật, áp dụng trong luận văn của mình
Trang 212.1 Học có giám sát
Học có giám sát là hoạt động học máy để suy luận một đặc trưng từ dữ liệu huấn luyện được dán nhãn Các dữ liệu huấn luyện bao gồm một tập hợp các mẫu huấn luyện Trong học có giám sát, mỗi mẫu là một cặp đôi, gồm một đối tượng đầu vào (thường là vectơ) và giá trị đầu ra mong muốn (được gọi là tín hiệu giám sát) Thuật toán học có giám sát sẽ phân tích dữ liệu huấn luyện và tạo ra một hàm suy luận, có thể được sử dụng để ánh
xạ các mẫu mới Một kịch bản tối ưu sẽ cho phép thuật toán xác định chính xác các nhãn lớp cho các trường hợp không cụ thể Điều này đòi hỏi thuật toán học máy phải khái quát hóa từ dữ liệu huấn luyện đến các tình huống không cụ thể theo một cách "hợp lý" (xu hướng quy nạp) Hoạt động xảy ra tương tự suy luận của con người và động vật và thường được xem là khái niệm nhận thức từ việc học
Để áp dụng Học có giám sát giúp giải quyết một vấn đề nhất định, chúng ta phải thực hiện các bước sau:
Bước 1 Xác định loại hình các mẫu huấn luyện: trước khi làm bất cứ điều gì, người dùng nên quyết định loại hình dữ liệu nào sẽ được sử dụng làm tập huấn luyện Ví dụ trường hợp phân tích chữ viết tay, chúng ta có thể phải xác định dữ liệu là toàn bộ các ký tự, từ hoặc dòng chữ viết tay
Bước 2 Thu thập bộ dữ liệu huấn luyện: tập huấn luyện cần phải đại diện, là đặc trưng trong thế giới thực Do đó, một tập hợp các đối tượng đầu vào được thu thập và các đầu ra tương ứng cũng được thu thập từ người dùng, các chuyên gia hoặc từ các phép đo
Bước 3 Xác định biểu diễn đầu vào đặc trưng của chức năng đã được huấn luyện
Độ chính xác của đặc trưng được huấn luyện có sự phụ thuộc chặt chẽ vào cách thể hiện đối tượng đầu vào Thông thường, đối tượng đầu vào được chuyển đổi thành một vectơ đặc trưng, trong đó có một số đặc trưng mô tả về đối tượng Số lượng các đặc trưng không nên quá lớn vì sẽ làm tăng số chiều của dữ liệu nhưng cũng nên chứa đủ thông tin để đảm bảo
dự đoán đầu ra chính xác
Bước 4 Xác định cấu trúc của chức năng được huấn luyện và thuật toán học máy tương ứng Ví dụ, các nhà kỹ thuật có thể chọn sử dụng thuật toán Máy vectơ hỗ trợ (SVM) hoặc Cây quyết định (DS)
Bước 5 Hoàn thành thiết kế: chạy các thuật toán học máy trên tập huấn luyện được thu thập Một số thuật toán học có giám sát yêu cầu người dùng xác định các tham số nhất định để kiểm soát Các thông số này có thể tùy chọn hoặc điều chỉnh được nhằm giúp tối
ưu hóa hiệu suất trên một tập hợp con (còn gọi là tập xác nhận) của tập huấn luyện hoặc thông qua xác thực chéo
Trang 22Bước 6 Đánh giá tính chính xác của chức năng đã được huấn luyện: sau khi điều chỉnh tham số và huấn luyện, hiệu suất của hàm kết quả phải được đo trên tập kiểm tra độc lập, tách biệt với tập huấn luyện
Một số lượng lớn các thuật toán học có giám sát được đề xuất, mỗi thuật toán đều có điểm mạnh và điểm yếu và không có thuật toán học máy duy nhất nào hoạt động tốt nhất trên mọi vấn đề trong học máy có giám sát Có bốn vấn đề chính cần lưu ý trong học máy
có giám sát:
Sự đánh đổi giữa độ lệch và phương sai (Bias-variance tradeoff)
Vấn đề đầu tiên là sự đánh đổi giữa độ lệch (bias) và phương sai (variance) Giả sử rằng chúng ta có sẵn một số bộ dữ liệu dùng để huấn luyện khác nhau và đều được đánh giá tốt Một thuật toán học máy đưa ra kết quả lệch theo một đầu vào cụ thể x nếu khi huấn luyện trên mỗi bộ dữ liệu này về mặt hệ thống là nó không chính xác khi dự đoán đầu ra cho x Một thuật toán học máy có phương sai cao cho một đầu vào cụ thể x nếu nó dự đoán các giá trị đầu ra khác nhau khi được đào tạo trên các tập huấn luyện khác nhau Lỗi dự đoán của trình phân loại đã huấn luyện có liên quan đến độ lệch và phương sai của thuật toán học Như vậy, ta đã thấy ở đây đã có sự đánh đổi giữa độ lệch và phương sai Một thuật toán học máy có độ lệch thấp cần phải linh hoạt để có thể phù hợp với dữ liệu Nhưng nếu thuật toán học máy linh hoạt quá thì nó chỉ sẽ phù hợp với từng bộ dữ liệu huấn luyện khác nhau và do đó có thể làm phương sai cao Một khía cạnh quan trọng của nhiều phương pháp dùng trong học máy có giám sát là chúng có thể điều chỉnh sự đánh đổi giữa độ lệch
và phương sai này (tự động điều chỉnh hoặc cung cấp một tham số độ lệch/phương sai do người dùng định nghĩa)
Độ phức tạp của hàm và số lượng dữ liệu huấn luyện
Vấn đề thứ hai là lượng dữ liệu huấn luyện có liên quan đến độ phức tạp của hàm (hàm phân loại hoặc hàm hồi quy) Nếu hàm đơn giản thì không đòi hỏi sự linh hoạt của thuật toán học máy với độ lệch cao và phương sai thấp sẽ có khả năng chỉ đào tạo với một lượng dữ liệu nhỏ Trường hợp hàm phức tạp (chẳng hạn do sự liên quan, tương tác phức tạp giữa nhiều đặc trưng đầu vào khác nhau và hoạt động khác giữa các thành phần khác nhau của không gian đầu vào) thì chức năng sẽ có thể phải được huấn luyện với một lượng
dữ liệu rất lớn và sử dụng một thuật toán học máy linh hoạt với độ lệch thấp và phương sai cao Tuy nhiên, các thuật toán học máy được xem là tốt sẽ tự động điều chỉnh sự đánh đổi
độ lệch/phương sai dựa trên lượng dữ liệu có sẵn và độ phức tạp cụ thể của hàm để huấn luyện
Kích thước của không gian đầu vào
Trang 23Vấn đề thứ ba là chiều (dimensionality) của không gian đầu vào Nếu các vectơ đặc trưng đầu vào có kích thước rất cao, vấn đề học máy có thể khó khăn ngay cả khi hàm (phân loại hoặc hồi quy) chỉ phụ thuộc vào một số lượng nhỏ các đặc trưng đó
Điều này là do kích thước quá lớn của chiều có thể gây nhầm lẫn cho thuật toán học máy và khiến nó có phương sai cao Do đó, chiều đầu vào cao thường yêu cầu điều chỉnh
bộ phân loại để có phương sai thấp và độ lệch cao
Trong thực tế, chúng ta có thể loại bỏ bằng thủ công các đặc trưng không liên quan ra khỏi tập dữ liệu đầu vào thì mới có khả năng cải thiện độ chính xác của chức năng được huấn luyện Ngoài ra, có nhiều thuật toán có khả năng lựa chọn đặc trưng bằng cách xác định các đặc trưng có liên quan và loại bỏ các đặc trưng không liên quan Đây là một ví dụ về mang tính tổng quát hơn về giảm kích thước chiều với việc tìm cách ánh xạ dữ liệu đầu vào trên không gian chiều thấp hơn trước khi thực hiện chạy thuật toán học máy có giám sát
Nhiễu trong các giá trị đầu ra
Vấn đề thứ tư là mức độ nhiễu trong các giá trị đầu ra không mong muốn (các biến mục tiêu giám sát) Nếu các giá trị đầu ra mong muốn thường không chính xác (do lỗi con người hoặc cảm biến) thì thuật toán học máy không nên cố gắng tìm một chức năng khớp chính xác với các mẫu huấn luyện Việc cố gắng để phù hợp với dữ liệu quá thận trọng dẫn đến over-fitting Ta có thể điều chỉnh over-fitting ngay cả khi phép đo không có lỗi (nhiễu ngẫu nhiên) nếu chức năng của chúng ta đang cố học quá phức tạp đối với mô hình học máy Trong tình huống như vậy, một phần của chức năng đích không thể được mô hình hóa
sẽ làm hỏng dữ liệu huấn luyện (hiện tượng này gọi là nhiễu xác định) Khi một trong hai loại nhiễu xuất hiện, tốt nhất là ta xem xét ước lượng độ lệch cao hơn, phương sai thấp hơn
Trong thực tế, có một số cách tiếp cận để giảm nhiễu trong các giá trị đầu ra như dừng sớm để ngăn over-fitting cũng như phát hiện và loại bỏ nhiễu trong các mẫu huấn luyện trước khi đào tạo thuật toán học có giám sát Một số thuật toán xác định để loại bỏ các mẫu đào tạo bị nhiễu và các mẫu đào tạo nghi ngờ có nhiễu trước khi huấn luyện đã giảm lỗi bằng việc tổng quát hóa theo phương pháp thống kê
2.1 Học không có giám sát
Trong học máy, vấn đề của học không giám sát là việc cố gắng tìm cấu trúc ẩn trong
dữ liệu không được gắn nhãn do bởi các mẫu cung cấp cho bộ học không có nhãn, không
có tín hiệu lỗi hoặc phản hồi (reward) để đánh giá một giải pháp tiềm ẩn Điều này chính là
sự khác biệt giữa học không giám sát so với học có giám sát và học tập tăng cường
Học tập không giám sát có liên quan mật thiết đến vấn đề ước tính mật độ trong thống kê Tuy nhiên, học không giám sát cũng như nhiều kỹ thuật học khác đều nhằm tìm
Trang 24cách khái quát hóa và mô tả các đặc trưng chính của dữ liệu Nhiều phương pháp được sử dụng trong học không giám sát dựa trên khai phá dữ liệu được dùng để xử lý dữ liệu
Phương pháp tiếp cận học không giám sát gồm:
• Phân cụm (như k-mean, mô hình hỗn hợp, phân cụm theo phân cấp);
• Phương pháp học các mô hình như biến tiềm ẩn;
• Thuật toán tối đa hóa kỳ vọng (EM);
là một tổ hợp topographic trong đó các vị trí lân cận trong đồ thị đại diện cho các đầu vào
có thuộc tính tương tự Mô hình ART cho phép số lượng cụm thay đổi theo kích thước biến
cố và cho phép người dùng kiểm soát mức độ tương tự giữa các thành viên của cùng một cụm bằng hằng số do người dùng xác định được gọi là tham số cảnh báo Mạng ART cũng được dùng cho nhiều công việc nhận diện mẫu như tự động nhận diện mục tiêu và xử lý tín hiệu địa chấn
Phương pháp các khoảnh khắc là một trong những cách tiếp cận trong học không giám sát theo ý tưởng các khoảnh khắc Trong phương pháp các khoảnh khắc, các tham số chưa biết (quan tâm) trong mô hình có liên quan đến các khoảnh khắc của một hoặc nhiều biến ngẫu nhiên và do đó, các tham số chưa biết này có thể được ước tính trong các khoảnh khắc Các khoảnh khắc thường được ước tính từ các mẫu theo cách thực nghiệm Những khoảnh khắc cơ bản là khoảnh khắc thứ nhất và thứ hai Đối với một vectơ ngẫu nhiên, khoảnh khắc thứ tự đầu tiên là vectơ trung bình và khoảnh khắc thứ tự thứ hai là ma trận hiệp phương sai (khi giá trị trung bình bằng 0) Các khoảnh khắc bậc cao hơn thường được biểu diễn bằng các tensor là sự khái quát hóa các ma trận thành các bậc cao hơn như các mảng đa chiều Cụ thể, phương pháp các khoảnh khắc được chứng minh là có hiệu quả trong việc tìm hiểu các tham số của các mô hình biến tiềm ẩn Các mô hình biến tiềm ẩn là các mô hình thống kê trong đó ngoài các biến quan sát tồn tại còn một tập hợp các biến tiềm ẩn không tồn tại Một ví dụ thực tế về các mô hình biến tiềm ẩn trong học máy là mô hình chủ đề, đây là mô hình thống kê để tạo ra các từ (biến quan sát) trong tài liệu dựa trên
Trang 25chủ đề (biến tiềm ẩn) của tài liệu Trong mô hình chủ đề, các từ trong tài liệu được tạo theo các tham số thống kê khác nhau khi chủ đề của tài liệu được thay đổi Nó được chỉ ra rằng phương pháp mô men (kỹ thuật phân rã tensor) luôn phục hồi các tham số của một lớp lớn các mô hình biến tiềm ẩn theo một số giả định
Thuật toán tối đa hóa kỳ vọng (EM) cũng là một trong những phương pháp thiết thực nhất để học các mô hình biến tiềm ẩn Nhưng, nó có thể bị kẹt trong tối ưu cục bộ và sự hội
tụ toàn cục của thuật toán với các tham số chưa biết đúng của mô hình không được đảm bảo Trong khi với phương pháp các khoảnh khắc, sự hội tụ toàn cục được đảm bảo trong một số điều kiện
Tóm lại: Trong học không có giám sát, chúng ta không có thông tin trước đó và mọi vấn đề được thực hiện một cách linh hoạt Nếu việc học máy chỉ được huấn luyện với một
bộ đầu vào, nó được gọi là học không giám sát và bản thân nó sẽ có thể tìm thấy cấu trúc hoặc mối quan hệ giữa các đầu vào khác nhau Quan trọng nhất của học không giám sát là phân cụm, điều này sẽ tạo ra các cụm đầu vào khác nhau và sẽ có thể áp đặt đầu vào mới trong một cụm thích hợp Tất cả các thuật toán phân cụm đều thuộc các thuật toán học không giám sát Điển hình là:
• K – Means clustering
• Hierarchical clustering
• Make Density Based Clustering
Phạm vi luận văn này, tôi không đi sâu nghiên cứu về phương pháp học không giám sát mà chỉ tìm hiểu cơ bản để nắm những vấn đề liên quan giúp cho việc lựa chọn kỹ thuật học máy phù hợp để ứng dụng trong bài toán dự đoán lỗi phần mềm
2.2 Các yếu tố cần xem xét khi lựa chọn và áp dụng thuật toán học máy
a) Tính không đồng nhất của dữ liệu: nếu các vectơ đặc trưng bao gồm các đặc trưng có kiểu khác nhau (rời rạc, thứ tự rời rạc, giá trị liên tục) thì có một số thuật toán dễ
áp dụng hơn các thuật toán khác gồm SVM, hồi quy tuyến tính, hồi quy logistic, mạng nơ ron và k-NN yêu cầu các đặc trưng đầu vào phải là số và được chia tỷ lệ thành các phạm vi tương tự (ví dụ: trong khoảng [-1, 1]) Các phương pháp sử dụng hàm khoảng cách, chẳng hạn như K-NN và SVM với Gaussian kernels đặc biệt nhạy cảm với điều này Riêng đối với cây quyết định có lợi thế rất lớn là nó dễ dàng xử lý dữ liệu không đồng nhất
b) Dự phòng dữ liệu: nếu các đặc trưng đầu vào chứa thông tin dư thừa (ví dụ: các đặc trưng tương quan cao) thì một số thuật toán học máy (như hồi quy tuyến tính, hồi quy logistic và phương pháp dựa trên khoảng cách) sẽ hoạt động kém do tính không ổn định khi làm việc với dữ liệu số Vấn đề này thường có thể được giải quyết bằng cách áp đặt một
biểu thức chính quy
Trang 26c) Biểu diễn các tương tác và phi tuyến: nếu mỗi đặc trưng phân phối độc lập tại đầu ra, thì thuật toán dựa trên các hàm tuyến tính (như hồi quy tuyến tính, hồi quy logistic, SVM, Naive Bayes) và các hàm khoảng cách (như k-NN, SVM và Gaussian kernels) thường hoạt động tốt Tuy nhiên, nếu có các tương tác phức tạp giữa các đặc trưng, thì các thuật toán như cây quyết định và mạng nơ-ron hoạt động tốt hơn vì chúng được thiết kế đặc biệt để khai thác các tương tác này Phương pháp tuyến tính cũng có thể được áp dụng, nhưng ta cần phải thiết lập thủ công tham số chỉ định các tương tác khi sử dụng chúng
Tóm lại: Khi xem xét một ứng dụng mới, chúng ta có thể so sánh nhiều thuật toán học máy và xác định bằng thực nghiệm xem cái nào hoạt động tốt nhất trong giải quyết vấn
đề (cần xác nhận chéo) Điều chỉnh hiệu suất của một thuật toán học máy có thể rất mất thời gian nên ta cũng cần xem xét phương án nào tối ưu sau:
- Dùng tài nguyên có sẵn;
- Cần thời gian thu thập thêm thông tin đặc trưng để bổ sung dữ liệu huấn luyện;
- Dành thêm thời gian để điều chỉnh các thuật toán học máy
Phạm vi luận văn này, tôi nhận thấy việc sử dụng thuật toán cây quyết định sẽ là lựa chọn tối ưu Bởi lẽ, các kỹ thuật học có giám sát rất hữu ích và rất mạnh cho việc dự đoán lỗi phần mềm để xác định xem các module phần mềm có nguy cơ lỗi cao hơn hay không Trong dữ liệu học có giám sát được trích xuất bằng cách sử dụng lớp mục tiêu nếu việc học máy được đào tạo cho mỗi đầu vào với mục tiêu cho trước thì nó được gọi là học có giám sát, đồng thời sẽ có thể cung cấp mục tiêu cho bất kỳ đầu vào mới sau khi được huấn luyện đầy đủ Các mục tiêu thể hiện trong một số lớp được gọi là phân loại vấn đề Nếu không gian mục tiêu là liên tục, nó được gọi là hồi quy vấn đề Tất cả các thuật toán phân loại và hồi quy xuất hiện trong học có giám sát
Trong luận văn này, tôi chú trọng kỹ thuật học máy có giám sát để khai thác, ứng dụng trong dự đoán lỗi phần mềm theo định hướng ensemble learning
2.3 Thuật toán Cây quyết định
Cây quyết định là thuật toán thuộc kỹ thuật học có giám sát Việc huấn luyện cây quyết định và sử dụng nó như một mô hình dự đoán, ánh xạ các quan sát của một mẫu để đưa ra kết luận về giá trị mục tiêu của mẫu Đây là một trong những phương pháp mô hình
dự đoán được sử dụng trong thống kê, khai phá dữ liệu và học máy Các mô hình cây trong
đó biến mục tiêu có thể lấy một tập hợp các giá trị hữu hạn được gọi là cây phân loại Trong các cấu trúc cây này, các lá đại diện cho các nhãn lớp và các nhánh biểu thị các liên kết của các đặc trưng liên quan trực tiếp với các nhãn lớp đó Cây quyết định, trong đó biến mục tiêu có thể lấy giá trị liên tục (thường là số thực) được gọi là cây hồi quy
Trang 27Trong phân tích quyết định, cây quyết định có thể được dùng để thể hiện một cách trực quan, rõ ràng các quyết định và ra quyết định Trong khai phá dữ liệu, cây quyết định
mô tả dữ liệu nhưng không phải thể hiện quyết định, thay vì cây phân loại có thể kết quả từ một đầu vào cho việc ra quyết định
Trong phạm vi luận văn này, tôi chỉ đề cập đến cây quyết định dùng trong kỹ thuật khai phá dữ liệu
Huấn luyện cây quyết định là phương pháp thường được sử dụng trong khai phá dữ liệu Mục tiêu là tạo ra một mô hình dự đoán giá trị của biến mục tiêu dựa trên một số biến đầu vào Mỗi mẫu được thể hiện bên phải Mỗi nút bên trong tương ứng với một trong các biến đầu vào; có các nhánh con thể hiện mỗi giá trị có thể có của biến đầu vào tương ứng với nhánh đó Mỗi lá đại diện cho một giá trị của biến mục tiêu với các giá trị của các biến đầu vào được xác định bằng đường dẫn từ gốc đến lá
Cây quyết định là một đại diện đơn giản để phân loại các mẫu Huấn luyện cây quyết định là một trong những kỹ thuật thành công nhất trong học phân loại có giám sát Điều này, giả sử rằng tất cả các đặc trưng có các miền riêng biệt hữu hạn và có một đặc trưng đích duy nhất được gọi là phân loại Mỗi phần tử của miền phân loại được gọi là một lớp Cây quyết định hoặc cây phân loại là một cây, trong đó mỗi nút bên trong (không lá) được gắn nhãn ứng với một đặc trưng đầu vào
Ví dụ: tại Hình 3 thể hiện cơ hội sống của hành khách trên tàu Titanic (tuổi và số lượng vợ hoặc chồng hoặc anh chị em) Các số liệu dưới lá cho thấy xác suất sống sót và
tỷ lệ quan sát trong lá Ta thấy, cơ hội sống sót được xem xét nếu bạn là (i) nữ hoặc (ii) nam dưới 9,5 tuổi với ít hơn 2,5 anh chị em [27]
Hình 3 Cây thể hiện sự sống trên tàu Titanic
Trang 28Các cung đến từ một nút được gắn nhãn với một đặc trưng được gắn nhãn với mỗi giá trị có thể có của đặc trưng Mỗi lá của cây được gán nhãn với một lớp hoặc phân phối xác suất trên các lớp
Một cây có thể "được học" bằng cách chia tập dữ liệu gốc thành các tập hợp con dựa trên việc kiểm tra giá trị thuộc tính Quá trình này được lặp lại trên dẫn xuất mỗi tập con theo cách đệ quy được gọi là phân vùng đệ quy Đệ quy được hoàn thành khi tập con tại một nút có cùng một giá trị của biến mục tiêu hoặc khi chia tách không còn thêm giá trị cho các dự đoán Thuật toán tham lam là một ví dụ về quá trình duyệt từ trên xuống của cây quyết định, đây là cách phổ biến nhất để huấn luyện cây quyết định từ dữ liệu [30]
Trong khai phá dữ liệu, cây quyết định cũng có thể được mô tả như là sự kết hợp của các kỹ thuật toán học và máy tính để hỗ trợ cho việc mô tả, phân loại và khái quát hóa một tập hợp dữ liệu nhất định
Dữ liệu có trong hồ sơ của mẫu:
(𝒙; 𝑌) = (𝑥1; 𝑥2; 𝑥3 … ; 𝑥𝑘; 𝑌) (1)
Biến độc lập Y là biến mục tiêu mà chúng ta cố gắng để hiểu, phân loại hoặc khái quát hóa Vector x gồm các biến đầu vào x1, x2, x3…, xk mà chúng ta sử dụng cho công việc cần thực hiện
Cây quyết định dùng trong khai phá dữ liệu có hai loại chính:
• Cây phân loại: khi phân tích kết quả dự đoán thuộc về phân lớp dữ liệu
• Cây hồi quy: khi phân tích, kết quả dự đoán có thể được coi là một số thực (ví dụ: giá của một ngôi nhà, hoặc thời gian nằm viện của bệnh nhân)
Thuật ngữ phân tích cây phân loại và cây hồi quy (CART) là dùng để chỉ cả hai quy trình trên Cây được dùng cho hồi quy và cây được dùng cho phân loại có một số điểm tương đồng nhưng cũng có một số khác biệt, chẳng hạn như thủ tục dùng để xác định khi nào cần chia tách
Một số kỹ thuật được đánh giá nổi trội bởi việc xây dựng theo phương pháp ensemble thường sử dụng một số lượng lớn cây quyết định
Tóm lại: Huấn luyện cây quyết định là việc xây dựng một cây quyết định từ các bộ
dữ liệu đào tạo được gắn nhãn lớp Cây quyết định là một cấu trúc giống như biểu đồ dòng chảy, trong đó mỗi nút bên trong (không lá) biểu thị một kiểm thử trên một đặc trưng, mỗi nhánh thể hiện kết quả của một kiểm thử và mỗi nút lá (hoặc nút cuối) giữ một nhãn lớp Nút trên cùng trong cây được gọi là nút gốc
Có nhiều thuật toán sử dụng cây quyết định, đáng chú ý gồm:
Trang 29• ID3 (Iterative Dichotomiser 3)
• C4.5 (Successor of ID3)
• CART (Cây phân loại và cây hồi quy)
• CHAID (CHi-squared Automatic Interaction Detector) Thực hiện phân chia đa cấp khi tính toán cây phân loại
• MARS: cây quyết định mở để xử lý tốt hơn đối với dữ liệu số học
• Cây suy luận có điều kiện: tiếp cận dựa trên thống kê sử dụng không tham số làm tiêu chí chia tách cho các kiểm thử, được dùng để điều chỉnh cho nhiều kiểm thử để tránh
bị over-fitting Cách tiếp cận này làm cho lựa chọn dự đoán không sai lệch và không yêu cầu tỉa nhánh
Các thuật toán xây dựng từ cây quyết định thường duyệt từ trên xuống, bằng cách chọn một biến tốt nhất ở mỗi bước phân chia trong tập các mẫu Các thuật toán khác nhau
sử dụng các số liệu khác nhau để phép đo "tốt nhất" Chúng thường đo lường tính đồng nhất của biến mục tiêu trong các tập con Các số liệu này được áp dụng cho từng tập kiểu ứng viên và các giá trị là kết hợp các kết quả (ví dụ: tính trung bình) để cung cấp một phép
đo về chất lượng của sự phân chia
Ưu điểm của cây quyết định:
Trong số các phương pháp khai phá dữ liệu, cây quyết định có nhiều ưu điểm:
• Đơn giản để hiểu và giải thích: mô hình cây quyết định khá phổ biến và có thể giải thích ngắn gọn
• Yêu cầu chuẩn bị dữ liệu ít: các kỹ thuật khác thường yêu cầu chuẩn hóa dữ liệu, các biến giả cần được tạo và các giá trị trống cần được loại bỏ
• Có thể xử lý cả dữ liệu số và phân loại: các kỹ thuật khác thường phân tích các tập
dữ liệu chỉ có một loại biến (chẳng hạn: luật quan hệ chỉ có thể được dùng với các biến danh nghĩa trong khi các mạng nơ-ron chỉ có thể sử dụng với các biến số)
• Sử dụng mô hình hộp trắng: nếu một tình huống nhất định có thể quan sát được trong một mô hình, thì lời giải cho điều kiện này dễ dàng được giải thích bằng logic boolean (khác với mô hình hộp đen là mạng nơ-ron bởi đưa ra giải thích kết quả rất khó hiểu)
• Dễ dàng kiểm chứng: xác nhận mô hình bằng các kiểm chứng thống kê (điều này thể hiện được độ tin cậy của mô hình)
• Mạnh mẽ: thực hiện tốt ngay cả khi các giả định của nó phần nào không chính xác bởi mô hình thực mà từ đó dữ liệu được tạo ra
Trang 30• Thực hiện tốt trên các bộ dữ liệu lớn: một lượng lớn dữ liệu có thể được phân tích với tài nguyên tính toán tiêu chuẩn trong thời gian hợp lý (tiết kiệm thời gian)
Hạn chế của cây quyết định:
• Vấn đề huấn luyện cây quyết định tối ưu được xem là thành công theo một số khía cạnh tối ưu và thậm chí chỉ khái niệm đơn giản Do đó, các thuật toán học cây quyết định thực tế dựa trên các heuristic như thuật toán tham lam trong đó các quyết định tối ưu cục
bộ được thực hiện tại mỗi nút Các thuật toán như vậy không thể đảm bảo thu được cây quyết định tối ưu toàn cục Để giảm hiệu ứng tham lam của tối ưu cục bộ, nên áp dụng phương pháp khoảng cách thông tin kép của cây (DID)
• Bộ học cây quyết định có thể tạo ra những cây quá phức tạp không khái quát tốt từ
dữ liệu đào tạo (hiện tượng này được gọi là over-fitting) Các cơ chế cắt tỉa cây là cần thiết
để tránh vấn đề này (ngoại trừ một số thuật toán như phương pháp suy luận có điều kiện thì không cần cắt tỉa)
• Có những khái niệm khó học vì cây quyết định không dễ dàng thể hiện chúng (chẳng hạn như phép XOR, chẵn lẻ hoặc ghép) Trong những trường hợp này, cây quyết định trở nên quá lớn Các cách tiếp cận để giải quyết vấn đề liên quan đến việc thay đổi cách biểu diễn của miền vấn đề (được gọi là mệnh đề hóa) hoặc sử dụng thuật toán học máy dựa trên các biểu diễn biểu đạt hơn (như học quan hệ thống kê hoặc lập trình logic quy nạp)
• Đối với dữ liệu bao gồm các biến phân loại với số cấp khác nhau, mức tăng thông tin trong các cây quyết định làm cho bị thiên vị bởi các thuộc tính có nhiều cấp hơn Tuy nhiên, để tránh vấn đề lựa chọn dự đoán thiên vị ta dùng phương pháp suy luận có điều kiện
Trang 31CHƯƠNG III: DỰ ĐOÁN LỖI PHẦN MỀM DỰA TRÊN HỌC MÁY
Với những đòi hỏi chất lượng các sản phẩm phần mềm ngày càng được cải thiện, nguồn lực đầu tư cho phát triển phần mềm được quản lý tốt và chặt chẽ hợn, đồng thời giúp cho các nhà phát triển chủ động trong việc phân bổ nguồn lực hợp lý thì cần thiết phải quản
lý tốt lỗi phần mềm Đã có nhiều phương pháp được đề xuất trong việc dự đoán lỗi khác nhau, tuy nhiên sử dụng kỹ thuật học máy đang được khai thác và là xu hướng phổ biến, hứa hẹn mang lại hiệu quả cao đối với lĩnh vực này
3.1 SDP dựa trên học máy
Trong thời gian vừa qua, đã có nhiều nghiên cứu, áp dụng các thuật toán học máy khác nhau để dự đoán lỗi phần mềm Điều này còn có sự kết hợp với việc các nhà sản xuất phần mềm cũng cần quan tâm phân bổ nguồn lực nhiều hơn cho việc kiểm thử để phát hiện lỗi sớm
Chiến lược SDP thường dùng là hồi quy và phân loại Phương pháp hồi quy là dự đoán số lượng lỗi phần mềm Ngược lại, phương pháp phân loại nhằm mục đích quyết định liệu một module phần mềm có bị lỗi hay không Các mô hình phân loại có thể được huấn luyện từ dữ liệu lỗi của phiên bản trước theo cùng một phần mềm Các mô hình sau khi được huấn luyện có thể sử dụng để dự đoán lỗi cho các phần mềm được phát triển trong tương lai
Dữ liệu thu được trong dự đoán lỗi phần mềm thường là các tập dữ liệu không cân bằng [1], nghĩa là số lượng mẫu của một lớp cụ thể cao hơn rất nhiều so với lớp khác Để giải quyết với vấn đề này, các phương pháp học không cân bằng đã được đề xuất trong SDP
để cải thiện làm giảm thiểu vấn đề mất cân bằng dữ liệu Phương pháp học không cân bằng gồm Re-sampling, Cost-sensitive learning, Ensemble learning và imbalanced ensemble learning (phương pháp lai)
Phương pháp Ensemble đã thể hiện thành công, có tác dụng tích cực nhằm cải thiện kết quả trong dự đoán các module phần mềm dễ bị lỗi
3.2 Tiền xử lý dữ liệu
Trong lĩnh vực SDP, có khá nhiều bộ dữ liệu dùng để huấn luyện cho các mô hình
đã được các tổ chức có uy tín công bố và cung cấp công khai cho người dùng để khai thác
và kiểm chứng Tuy nhiên, để đảm bảo chất lượng của các bộ dữ liệu này, đồng thời phù hợp với yêu cầu của các thuật toán dùng để dự đoán, tôi thực hiện xử lý lại dữ liệu và dùng
nó cho việc thử nghiệm trong luận văn này, công việc được tóm tắt thành các bước như sau:
Bước 1: Xóa các trường hợp trùng lặp
Trang 32Xóa dữ liệu trùng lặp là đề cập đến các mô-đun phần mềm có cùng giá trị số liệu phần mềm và cùng nhãn (ví dụ: nhãn bị lỗi) Tình huống này có thể xảy ra trong thực tế Đáng tiếc là các trường hợp lặp này có thể có tác động tiêu cực đến học máy
Những vấn đề nêu trên đối với học máy là các trường hợp trùng lặp có thể gây ra hiệu suất quá lạc quan khi chúng được phân loại chính xác như một phần của dữ liệu thử nghiệm hoặc cũng có thể gây ra hiệu suất quá bi quan khi chúng bị phân loại sai thành một phần của dữ liệu thử nghiệm Hơn nữa, chúng không chỉ có thể làm cho quá trình đào tạo tốn thời gian mà còn không thể hiện bất kỳ cải thiện nào trong hiệu suất mô hình Do đó, các trường hợp trùng lặp nếu có nên được loại bỏ
Bước 2: Thay thế các giá trị thiếu:
Thay thế giá trị bị thiếu nói chung là một thể hiện bao gồm các giá trị của nhiều số liệu phần mềm Nếu một hoặc nhiều giá trị trong một trường hợp bị thiếu vì bất cứ lý do gì (kể cả do sự bất cẩn của người thu thập dữ liệu) thì trường hợp này không thể đáp ứng sự cân bằng đầu vào của phương pháp chúng ta thực hiện Những giá trị còn thiếu phải được
xử lý Trong nghiên cứu này, đối với một giá trị còn thiếu, chúng ta thay thế nó bằng giá trị trung bình của các số liệu tương ứng Ví dụ: Trình bày một bộ số liệu mt và các quan sát
của nó {mt1, , mt100}, giả sử rằng cả mt99 và mt100 đều bị thiếu (tức là NaN) Ta có thể
thay thế hai giá trị bị thiếu này theo công thức sau:
𝑚𝑡99 = 𝑚𝑡100 = 1
98∑98𝑖=1𝑚𝑡𝑖 (2)
Bước 3: Chuẩn hóa dữ liệu
Vì các giá trị của các số liệu phần mềm khác nhau thường có thứ tự độ lớn khác nhau, chúng ta phải tiến hành chuẩn hóa dữ liệu trên các số liệu này Để thực hiện, chúng
ta sử dụng phương pháp chuẩn hóa tối thiểu để chuẩn hóa dữ liệu và chuyển đổi tất cả các giá trị thành các giá trị trong khoảng [0, 1] Cho một số liệu x, giá trị tối đa và tối thiểu của
nó lần lượt là tối đa (x) và tối thiểu (x) Đối với mỗi giá trị xi của số liệu x, giá trị chuẩn hóa ~ xi được tính là:
~ x 𝑖 = (𝑥𝑖−min (𝑥))
(max (𝑥)−min (𝑥)) (3)
3.3 Kỹ thuật Ensemble learning
Trong thống kê và học máy, phương pháp Ensemble là phương pháp sử dụng nhiều thuật toán học máy để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học nào cấu thành Không giống như tổng hợp thống kê trong thống kê cơ học thường là vô hạn,
Trang 33Ensemble learning chỉ đề cập đến một tập hợp hữu hạn cụ thể của các mô hình thay thế, nhưng thường cho phép cấu trúc linh hoạt hơn nhiều trong số các phương án đó
Các thuật toán học có giám sát thường được mô tả là thực hiện nhiệm vụ tìm kiếm thông qua một không gian giả thuyết để tìm ra một giả thuyết phù hợp và do đó sẽ đưa ra dự đoán tốt với một vấn đề cụ thể Ngay cả khi không gian giả thuyết chứa các giả thuyết rất phù hợp cho một vấn đề cụ thể, có thể rất khó để tìm ra một vấn đề tốt Ensembles kết hợp nhiều giả thuyết để tạo thành một giả thuyết (kỳ vọng) tốt hơn Thuật ngữ “Ensembles” trong học máy, thường dùng riêng cho các phương pháp tạo ra nhiều giả thuyết sử dụng cùng một
bộ học cơ sở Thuật ngữ này được hiểu rộng hơn khi nhiều hệ thống phân loại (bao gồm kết hợp sự lai tạo) mà khi đó các giả thuyết không sinh ra bởi cùng một bộ học cơ sở
Đánh giá dự đoán dựa trên số đông thường đòi hỏi nhiều tính toán hơn so với đánh giá dự đoán của một mô hình duy nhất, do đó tổng hòa kết quả có thể được coi là một cách
để bù đắp cho các thuật toán học kém bằng việc thực hiện nhiều tính toán bổ sung Các thuật toán nhanh như cây quyết định thường được sử dụng với ensembles (như: Rừng ngẫu nhiên) mặc dù các thuật toán chậm hơn cũng có thể được hưởng lợi từ các kỹ thuật ensembles
Phương pháp Học Ensemble giúp cải thiện kết quả học bằng cách kết hợp một số mô hình Cách tiếp cận này cho phép mang lại hiệu suất dự đoán tốt hơn so với một mô hình duy nhất Đó là lý do tại sao các phương pháp Ensemble thường dành được gải thưởng cao trong các cuộc thi học máy có uy tín, chẳng hạn như các cuộc thi Netflix, KDD 2009, và Kaggle
3.4 Các thuật toán Ensembles learning cho SDP
Một thuật toán đưa ra kết quả tổng hợp là một thuật toán học có giám sát vì nó có thể được huấn luyện trước và sau đó được sử dụng để đưa ra dự đoán Ensembles được huấn luyện đại diện cho một giả thuyết duy nhất Tuy nhiên, giả thuyết này không nhất thiết phải được chứa trong không gian giả thuyết của các mô hình mà nó được xây dựng Do đó, kết quả tổng hợp có thể được thể hiện để tạo sự linh hoạt hơn trong các chức năng mà chúng có thể đại diện
Về lý thuyết, tính linh hoạt này có thể cho phép chúng phù hợp với dữ liệu huấn luyện hơn một
mô hình đơn lẻ nhưng trên thực tế, một số kỹ thuật ensemble (đặc biệt là Bagging) có xu hướng làm giảm các vấn đề liên quan đến việc dữ liệu huấn luyện over-fitting
Nhiều kết quả thực nghiệm đã chứng minh Ensembles learning có xu hướng mang lại kết quả tốt hơn khi có sự đa dạng đáng kể giữa các mô hình Do đó, nhiều phương pháp ensemble tìm cách thúc đẩy sự đa dạng giữa các mô hình mà chúng kết hợp Mặc dù không trực quan, các thuật toán ngẫu nhiên hơn (như cây quyết định ngẫu nhiên) có thể được sử dụng để tạo ra một tập hợp các thuật toán mạnh hơn Tuy nhiên, sử dụng một loạt các thuật
Trang 34toán học máy mạnh được chứng minh là hiệu quả hơn so với việc sử dụng các kỹ thuật cố gắng làm giảm các mô hình bằng cách khuyến khích sự đa dạng
Các phương pháp của Ensemble là các thuật toán meta, kết hợp nhiều kỹ thuật học máy vào một mô hình dự đoán để giảm phương sai (bagging), giảm bias (boosting), hoặc cải thiện dự đoán (stacking)
Các phương pháp của Ensemble có thể được chia thành hai nhóm:
▪ Các phương pháp tuần tự: là các bộ học cơ sở được tạo bằng cách sắp xếp tuần
tự (ví dụ AdaBoost) Ý tưởng cơ bản của phương pháp tuần tự là khai thác sự phụ thuộc giữa các bộ học cơ sở Hiệu suất tổng thể có thể được tăng lên bằng cách thu hẹp các mẫu
đã được gán sai trước đó bằng trọng số cao hơn
▪ Các phương pháp song song: là những bộ học cơ sở được tạo và sắp xếp song song (ví dụ: Random Forest) Mục đích cơ bản của phương pháp song song là khai thác độc lập giữa các bộ học cơ sở khi lỗi có thể được giảm đáng kể bởi cách tính trung bình của các mẫu
Hầu hết, các phương pháp Ensemble sử dụng một thuật toán cơ bản duy nhất (single)
để tạo ra các bộ học cơ sở đồng nhất, tức là bộ học cùng kiểu, dẫn đến kết hợp đồng nhất
(homogeneous ensembles)
Ngoài ra, có một số phương pháp sử dụng các bộ học không đồng nhất, nghĩa là các
bộ học có các kiểu khác nhau, dẫn đến sự kết hợp không đồng nhất (heterogeneous
ensembles) Để phương pháp được chính xác hơn so với bất kỳ thành viên duy nhất của
mình, những bộ học cơ sở phải được lựa chọn là chính xác nhất và đa dạng nhất có thể
3.4.1 Bagging
Bagging (viết tắt của tập hợp bootstrap) là một cách để giảm phương sai là tính trung bình kết hợp nhiều bộ ước tính trở thành một ước tính Ví dụ, chúng ta có thể đào tạo M cây khác nhau trên các tập con khác nhau của dữ liệu (được lựa chọn ngẫu nhiên với sự thay thế)
và tính toán tổng thể:
𝑀 ∑𝑀𝑚=0𝑓𝑚(𝑥) (4)
Bagging sử dụng lấy mẫu bootstrap để lấy các tập dữ liệu cho việc huấn luyện bộ học
cơ sở Tập hợp các đầu ra của bộ học cơ sở của Bagging sử dụng bỏ phiếu cho kỹ thuật phân loại và trung bình cho kỹ thuật hồi quy
Để trực quan, ta lấy ví dụ về Bagging trong ngữ cảnh phân loại trên bộ dữ liệu Iris và chọn hai bộ ước tính cơ sở: một là cây quyết định và một là phân loại k-NN Hình 4 cho thấy
Trang 35các ranh giới quyết định của các ước tính cơ sở được huấn luyện cũng như baggingcủa họ Ensembles áp dụng cho các tập dữ liệu Iris
Hình 4 Phân loại Bagging trên tập dữ liệu Iris với hai bộ ước tính cơ sở: DS và
k-NN
Cây quyết định thể hiện các ranh giới song song với các trục, trong khi k-NN = 1 phù hợp với các điểm dữ liệu phân bố chặt Các bagging ensembles được đào tạo bằng cách sử dụng 10 bộ ước tính cơ sở với tỷ lệ lấy mẫu con (subsampling) là 0,8 đối với dữ liệu đào tạo các đặc trưng [29]
Các cây quyết định dùng trong bagging ensemble đạt được độ chính xác cao hơn so với các k-NN bagging ensemble vì nó ít nhạy cảm với nhiễu trên các mẫu huấn luyện và do
đó chúng được đánh giá là bộ học ổn định
Kết luận: Kết hợp các bộ học ổn định là ít thuận lợi hơn bởi các bộ này sẽ không giúp cải thiện hiệu suất tổng thể