ĐẠI HỌC ĐÀ NẴNG
TRƢỜNG ĐẠI HỌC BÁCH KHOA
PHAN DUY HÙNG
XÂY DỰNG BỘ DỮ LIỆU VÀ DỰ ĐOÁN MÃ XẤU
SỬ DỤNG HỌC MÁY
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Đà Nẵng – Năm 2022
ĐẠI HỌC ĐÀ NẴNG
TRƢỜNG ĐẠI HỌC BÁCH KHOA
PHAN DUY HÙNG
XÂY DỰNG BỘ DỮ LIỆU VÀ DỰ ĐOÁN MÃ XẤU
SỬ DỤNG HỌC MÁY
Chuyên ngành: Khoa học máy tính
Mã số: 848.01.01
LUẬN VĂN THẠC SĨ
Ngƣời hƣớng dẫn khoa học: TS. LÊ THỊ MỸ HẠNH
Đà Nẵng – Năm 2022
i
LỜI CAM ĐOAN
Tơi xin cam đoan đây là cơng trình nghiên cứu của riêng tơi.
Những kiến thức trình bày trong luận văn là do tơi tìm hiểu, nghiên cứu và trình
bày lại theo cách hiểu. Trong quá trình làm luận văn tơi có tham khảo các tài liệu
có liên quan và đã ghi rõ nguồn tài liệu tham khảo đó.
Tác giả luận văn
Phan Duy Hùng
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
ii
TÓM TẮT LUẬN VĂN
XÂY DỰNG BỘ DỮ LIỆU VÀ DỰ ĐOÁN MÃ XẤU SỬ DỤNG HỌC MÁY
Học viên: Phan Duy Hùng Chun ngành: Khoa học máy tính
Mã số: 60.48.01 Khóa: K41.KMT (PFIEV) Trường Đại học Bách khoa - ĐHĐN
Tóm tắt – Một trong những cách để ngăn chặn lỗi phần mềm là phát hiện ra mã xấu và loại bỏ
nó trước khi nó gây ra các lỗi phần mềm. Xác định mã xấu có thể giúp các nhà phát triển cải
thiện chương trình của họ về chất lượng, đặc biệt là trong các hoạt động bảo trì. Mã xấu được
Martin Fowler và Kent Beck định nghĩa vào năm 1999. Cho đến nay có rất nhiều nghiên cứu về
cách phát hiện mã xấu. Hiện nay và trong tương lai, các nhà nghiên cứu hướng đến việc sử dụng
học máy để dự đoán mã xấu. Tuy nhiên, vấn đề về bộ dữ liệu về mã xấu đang là một trong những
cản trở của các nghiên cứu này. Vì vậy, tác giả đã xây dựng một bộ dữ liệu về mã xấu với nhiều
sự cải tiến như quy mô mẫu thử lớn, đa dạng với 13 loại mã xấu, đầy đủ các độ đo về mã nguồn.
Ngồi ra, tác giả cịn trình bày các 4 kịch bản thử nghiệm dự đoán mã xấu trên bộ dữ liệu mã xấu
được công bố bởi Fontana năm 2017 và bộ dữ liệu mới được tác giả cung cấp. Có 6 thuật tốn
học máy và 4 kỹ thuật tiền xử lý dữ liệu được áp dụng. Kết quả của các kịch bản được đánh giá
dựa trên các độ đo như ROC Curve, F1-score. Hầu hết các thuật tốn đều mang lại kết quả khả
quan. Trong đó, Random Forest, Support Vector Machine, Decision Tree cho kết quả cao nhất
(85%-99%). Hơn nữa, việc áp dụng các kỹ thuật tiền xử lý dữ liệu đã nâng cao độ chính xác từ
khoảng 60% lên khoảng 95%.
Từ khóa – Mã xấu; Bộ dữ liệu mã xấu; Thuật toán học máy; Tiền xử lý dữ liệu; Độ đo mã
nguồn
BUILD DATASETS AND PREDICT CODE SMELLS USING MACHINE LEARNING
Abstract - One of the ways to prevent software bugs is to detect code smell and remove it before
it causes software bugs. Identifying code smell can help developers improve their programs in
terms of quality, especially in maintenance activities. Code smell was defined by Martin Fowler
and Kent Beck in 1999. So far there are lots of researches on how to detect code smell. Now and
in the future, researchers aim to use machine learning to predict code smell. However, the
problem of code smell datasets is one of the obstacles of these studies. Therefore, the author has
built a dataset of code smell with many improvements such as large, many samples with 13 types
of code smell, full of source code metrics. Besides, the author also presents 4 code smell
prediction test scenarios on the code smell dataset published by Fontana in 2017 and the new
dataset provided by the author. There are 6 machine learning algorithms and 4 data
preprocessing techniques applied. The results of the scenarios are evaluated based on measures
such as ROC Curve, F1-score. Most of the algorithms give positive results. In which, Random
Forest, Support Vector Machine, Decision Tree gave the highest results (85%-99%).
Furthermore, the application of data preprocessing techniques has improved the accuracy from
about 60% to about 95%.
Key words – Code smell; Code smell datasets; Machine learning; Data preprocessing; Code
metrics
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
iii
MỤC LỤC
LỜI CAM ĐOAN .......................................................................................................... i
TÓM TẮT LUẬN VĂN ............................................................................................... ii
MỤC LỤC .................................................................................................................... iii
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT ..............................................v
DANH MỤC CÁC BẢNG........................................................................................... vi
DANH MỤC CÁC HÌNH .......................................................................................... vii
MỞ ĐẦU .........................................................................................................................1
1. Tính cấp thiết và lý do chọn đề tài ........................................................................1
2. Mục tiêu và nội dung nghiên cứu .........................................................................1
3. Đối tượng và phạm vi nghiên cứu ........................................................................2
4. Phương pháp nghiên cứu ......................................................................................2
5. Ý nghĩa khoa học và thực tiễn ..............................................................................3
6. Bố cục của luận văn ..............................................................................................3
CHƯƠNG 1. TỔNG QUAN VỀ DỰ ĐOÁN MÃ XẤU DỰA TRÊN HỌC
MÁY ................................................................................................................................4
1.1. Tổng quan .................................................................................................................4
1.1.1. Phát triển phần mềm .......................................................................................4
1.1.2. Mã xấu ............................................................................................................4
1.1.3. Các thuật toán học máy ...................................................................................5
1.1.4. Mã xấu và học máy .........................................................................................7
1.1.5. Mơ hình triển khai và phương pháp đo lường ................................................9
1.2. Phương pháp thực hiện ...........................................................................................11
1.2.1. Lý thuyết tập hợp dữ liệu ..............................................................................11
1.2.2. Lý thuyết kỹ thuật tiền xử lý dữ liệu.............................................................11
1.2.3. Lý thuyết lựa chọn đặc trưng ........................................................................13
1.3. Kết luận...................................................................................................................17
CHƯƠNG 2. XÂY DỰNG BỘ DỮ LIỆU MÃ XẤU ................................................19
2.1. Giới thiệu các bộ dữ liệu hiện tại ...........................................................................19
2.2. Các công cụ đo .......................................................................................................21
2.2.1. PMD ..............................................................................................................21
2.2.2. iPlasma ..........................................................................................................22
2.2.3. inFusion .........................................................................................................22
2.3. Hạn chế các công cụ thử nghiệm ............................................................................22
2.4. Đặc tả bộ dữ liệu .....................................................................................................23
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
iv
2.4.1. Thu thập mã nguồn .......................................................................................23
2.4.2. Sử dụng công cụ iPlasma ..............................................................................23
2.4.3. Đặc tả bộ dữ liệu ...........................................................................................24
2.5. Định nghĩa các loại mã xấu trong bộ dữliệu...........................................................29
2.5.1. Brain Method ................................................................................................29
2.5.2. Brain Class ....................................................................................................29
2.5.3. Data Class .....................................................................................................29
2.5.4. God Class ......................................................................................................29
2.5.5. Schizofrenic Class .........................................................................................29
2.5.6. Extensive Coupling .......................................................................................29
2.5.7. Feature Envy .................................................................................................30
2.5.8. Intensive Coupling ........................................................................................30
2.5.9. Shotgun Surgery............................................................................................30
2.6. Định nghĩa các độ đo ..............................................................................................30
2.7. Công khai bộ dữ liệu ..............................................................................................30
2.8. Đánh giá kết quả của bộ dữ liệu bằng các phương pháp học máy .........................33
2.9. Kết luận...................................................................................................................36
CHƯƠNG 3. ĐÁNH GIÁ CÁC PHƯƠNG PHÁP HỌC MÁY TRONG DỰ
ĐOÁN MÃ XẤU ..........................................................................................................37
3.1. Áp dụng học máy trong dự đốn mã xấu ...............................................................37
3.1.1. Các bước tiền xử lí dữ liệu ............................................................................37
3.1.2. Áp dụng các thuật toán học máy ...................................................................38
3.2. Đo lường, đánh giá, so sánh kết quả của các thuật toán .........................................39
3.2.1. Tổng quát ......................................................................................................39
3.2.2. Kịch bản thử nghiệm .....................................................................................39
3.2.3. Phân tích và đánh giá kết quả .......................................................................40
3.3. Kết luận...................................................................................................................47
CHƯƠNG 4. KẾT LUẬN VÀ BÀN LUẬN ..............................................................48
KẾT LUẬN VÀ KHUYẾN NGHỊ .............................................................................50
DANH MỤC TÀI LIỆU THAM KHẢO
QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN (Bản sao)
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
v
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
AUC
DT
LDA
FP
FN
kNN
MAR
MCAR
MLP
MNAR
RF
ROC
SVM
SMOTE
TN
TP
Area Under The Curve
Decision Tree
Linear Discriminant Analysis
False Positive
False Negative
k-Nerest-Neighbours
Missing at Random
Missing Completely at Random
Multilayer Perceptron
Missing not at Random
Random Forest
Receiver Operating Characteristic
Support Vector Machine
Synthetic Minority Over-sampling
True Negative
True Positive
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
vi
DANH MỤC CÁC BẢNG
Số hiệu
bảng
1.1.
2.1.
2.2.
3.1.
Tên bảng
Confusion matrix
Bảng tổng hợp các bộ dữ liệu về mã xấu từ năm 2009
Bảng tổng hợp mã xấu và độ đo
Các phương pháp tiền xử lý dữ liệu cho từng kịch bản
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Trang
10
21
27
40
Lưu hành nội bộ
vii
DANH MỤC CÁC HÌNH
Số hiệu
hình
1.1.
1.2.
1.3.
2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
3.1.
3.2.
3.3.
3.4.
3.5.
Tên hình
Mơ hình triển khai
Tổng hợp các phương pháp lựa chọn đặc trưng
Xác định phương pháp lựa chọn đặc trưng
Áp dụng iPlasma cho mẫu code
Đồ thị mối tương quan
Phân bố mã xấu loại method
Phân bố mã xấu loại class
Kết quả của loại mã xấu: class
Kết quả của loại mã xấu: method
Kịch bản kiểm thử 1
Kịch bản kiểm thử 2
Kịch bản kiểm thử 3
Kịch bản kiểm thử 4
Kết quả tổng hợp các kịch bản thử nghiệm
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Trang
9
16
17
24
26
31
32
34
35
42
43
44
45
46
Lưu hành nội bộ
1
MỞ ĐẦU
1. Tính cấp thiết và lý do chọn đề tài
Với sự phát triển công nghệ thông tin ngày một mạnh mẽ, số lượng phần mềm
ngày càng nhiều. Các dự án phát triển phần mềm đang ngày càng trở nên lớn, phức
tạp, tốn kém và ngày càng khó dự đốn. Các nhà phát triển phải làm việc năng suất
hơn để đáp ứng cho nhu cầu cao về số lượng cũng như chất lượng phần mềm. Một vấn
đề mà các nhà phát triển cần quan tâm là khả năng rủi ro gia tăng khi độ phức tạp của
phần mềm gia tăng. Điều này ảnh hưởng đến chi phí hoặc tiến độ của các dự án phát
triển phần mềm.
Việc dự đoán được các khiếm khuyết trong phần mềm mang lại một ý nghĩa rất
lớn. Điều đó có thể làm giảm chi phí và cải thiện thời gian và nâng cao chất lượng của
các dự án, làm giảm nguy cơ phá vỡ kế hoạch, chiến lượng của doanh nghiệp. Một
trong những khiếm khuyết của phần mềm mà chúng ta có thể dự đốn được là các mã
xấu.
Mã xấu được đề xuất vào năm 1999 bởi Martin Fowler và Kent Beck [1] như
một phương tiện để xác định các vấn đề thiết kế trong mã nguồn, ví dụ, lớp quá lớn
hoặc mã trùng lặp. Mã xấu có thể gây ra các hoạt động bảo trì tốn kém hoặc dễ bị lỗi.
Khi mã xấu được dự đốn, kỹ thuật tái cấu hình được áp dụng để loại bỏ các mã xấu.
Kỹ thuật tái cấu tạo cải thiện chất lượng mã, nhưng không thay đổi hành vi phần mềm.
Tuy nhiên, dự đoán mã xấu là một nhiệm vụ tốn kém về thời gian và tài nguyên.
Trước đây, việc dự đốn mã xấu dựa hồn tồn vào kiến thức, kinh nghiệm của
các nhà phát triển phần mềm. Sau đó họ đưa ra các tập quy tắc để xác định mã xấu.
Cách làm này khá chủ quan và tốn nhiều thời gian để thực hiện. Hiện nay, các nhà
nghiên cứu trên thế giới đang tiến đến việc sử dụng các kỹ thuật học máy để dự đoán
và dự đoán các mã xấu. Nhiều nghiên cứu gần đây đã chứng mình kết quả đầy hứa hẹn
của phương pháp sử dụng học máy để dự đoán mã xấu dựa trên các độ đo của phần
mềm. Một khó khăn trong việc sử dụng phương pháp học máy là cần phải có bộ dữ
liệu đủ lớn để thực hiện huấn luyện các mơ hình. Tuy nhiên, theo hiểu biết và sự tìm
hiểu của tơi, cho đến nay vẫn chưa có nghiên cứu nào đáp ứng tốt bộ dữ liệu về mã
xấu.
Vì những lý do như trên, tôi đã chọn đề tài luận văn cao học: Xây dựng bộ dữ
liệu và dữ đoán mã xấu sử dụng học máy.
2. Mục tiêu và nội dung nghiên cứu
Mục tiêu
Mục tiêu chính của luận văn nghiên cứu về dự đoán mã xấu sử dụng các thuật
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
2
toán học máy. Mục tiêu cụ thể của luận văn là xây dựng bộ dữ liệu cho bài toán dự
đoán mã xấu và nghiên cứu các thuật toán học máy áp dụng cho dự đoán mã xấu.
Nội dung nghiên cứu
Để hồn thành các mục tiêu của phân tích này, cần phải có sự hiểu biết thấu đáo
về vấn đề này. Điều này được thực hiện thơng qua tìm hiểu một cách thấu đáo giữa lý
thuyết và 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,
cụ thể:
- Lý thuyết về mã xấu.
- Phương pháp dự đoán mã xấu hiện tại.
- Áp dụng học máy vào dự đoán mã xấu.
- Bộ dữ liệu về mã xấu được sử dụng cho phương pháp máy học.
3. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu
Với mục tiêu đặt ra, luận văn sẽ tập trung nghiên cứu các nội dung chính sau:
- Nghiên cứu về dự đốn mã xấu trong quá khứ và hiện tại
- Dự đoán mã xấu dựa trên độ đo mã nguồn sử dụng các thuật toán học máy
- Nghiên cứu các thuật toán học máy ứng dụng trong dự đoán mã xấu
Phạm vi nghiên cứu
Với mục tiêu và đối tượng nghiên cứu đặt ra, phạm vi nghiên cứu của luận văn
như sau:
- Nghiên cứu các thuật toán học máy Linear Discriminant Analysis, K-NearestNeighbours, Multilayer Perceptron, Decision Tree, Support Vector Machine, Random
Forest.
- Nghiên cứu các kỹ thuật tiền xử lý dữ liệu Balancing, Normalization, Feature
selection.
- Nghiên cứu các bộ dữ liệu mã xấu từ năm 2009 đến nay.
- Nghiên cứu công cụ đo PMD, iPlasma, inFusion.
- Nghiên cứu hai loại mã xấu là Class và Method.
4. Phương pháp nghiên cứu
Phương pháp lý thuyết
Nghiên cứu và tổng hợp các tài liệu liên quan về mã xấu và dự đoán mã xấu sử
dụng các kỹ thuật học máy, cũng như nghiên cứu, phân tích các bộ dữ liệu về mã xấu
và các công cụ phát hiện mã xấu hiện nay.
Phương pháp thực nghiệm
- Sử dụng một số công cụ như iPlasma, PMD, … để xây dựng bộ dữ liệu về mã
xấu dựa trên các dự án mã nguồn mở
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
3
- Cài đặt và thử nghiệm hiệu quả của một số thuật toán học máy trên bộ dữ liệu
mới và bộ dữ liệu của Fontana [14]
5. Ý nghĩa khoa học và thực tiễn
Ý nghĩa khoa học
- Áp dụng lý thuyết phân tích và dự đốn trong các lĩnh vực của đời sống.
- Áp dụng phương pháp học máy để dự đoán mã xấu.
Ý nghĩa thực tiễn
- Đề xuất giải pháp nhằm cải thiện chất lượng chẩn đốn mã xấu, góp phần
giúp cho các nhà quản lý phát triển phần mềm giảm thiểu nguồn lực, kiểm sốt tốt tiến
trình, giảm thiểu rủi ro và tăng tính khả thi cho các dự án.
- Giúp cho các chủ doanh nghiệp CNTT 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 nhằm đảm bảo phát triển bền vững.
- Đóng góp kết quả nghiên cứu và thực nghiệm, giúp cải thiện góc nhìn về
khoa học phục vụ cho các nghiên cứu và phát triển các ứng dụng trên nhiều lĩnh vực
khác của đời sống – xã hội trong thời gian tiếp theo.
6. Bố cục của luận văn
Ngoài phần mở đầu và kết luận, đề tài gồm có 4 chương:
Chương 1: Tổng quan về dự đoán mã xấu dựa trên học máy
Chương 2: Xây dựng bộ dữ liệu mã xấu
Chương 3: Đánh giá các phương pháp học máy trong dự đoán mã xấu
Chương 4: Kết luận và hướng phát triển
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
4
CHƯƠNG 1
TỔNG QUAN VỀ DỰ ĐOÁN MÃ XẤU DỰA TRÊN HỌC MÁY
1.1. Tổng quan
1.1.1. Phát triển phần mềm
Phần mềm là tập hợp dữ liệu hoặc các câu lệnh hướng dẫn máy tính cho máy
tính biết cách làm việc. Phát triển phần mềm là việc chuyển nhu cầu của khách hàng
hay mục tiêu tiếp thị thành sản phẩm phần mềm. Bao gồm các quá trình của kỹ nghệ
phần mềm kết hợp với nghiên cứu mục tiêu tiếp thị. Từ đó phát triền những sản phẩm
phần mềm của máy tính. Nói cách khác, phát triển ứng dụng đề cập đến tập hợp những
hoạt động của máy vi tính, dành riêng cho quá trình khởi tạo, triển khai, thiết kế, hỗ
trợ phần mềm.
Trong bối cảnh Cách mạng công nghiệp lần thứ tư (CMCN 4.0), công nghệ
thông tin (CNTT) là lĩnh vực Việt Nam đang đồng hành cùng sự phát triển của thế
giới, với việc nghiên cứu, phát triển những công nghệ hiện đại nhất. Mặc dù chịu ảnh
hưởng của nhiều làn sóng dịch Covid-19 liên tiếp, kinh tế Việt Nam nói chung và
ngành Công nghệ thông tin vẫn đạt được những thành tựu đáng kể. Không chỉ lĩnh vực
phần cứng, điện tử viễn thơng có những bước chuyển mình mà ngay cả đối với công
nghiệp phần mềm, cùng với sự tiến bộ của khoa học công nghệ, phát triển phần mềm
là một trong những lĩnh vực quan trọng trong thời đại công nghệ số hiện nay. Với sự
phát triển nhảy vọt nhanh và mạnh mẽ, Việt Nam đã có vị trí trên bản đồ công nghệ
thông tin thế giới khi trở thành một trong những nước mạnh về công nghệ thông tin
trong khu vực, đứng thứ nhất về ngành dịch vụ phần mềm trong số 6 nước phát triển
mạnh nhất khu cự ASEAN. Khơng ít doanh nghiệp Việt Nam làm phần mềm xuất
khẩu đã và đang có sự chuyển dịch từ vai trị thụ động sang chủ động hơn trong hoạt
động cung cấp dịch vụ cho các khách hàng, tham gia sâu cùng với khách hàng ngay từ
khâu nghiên cứu sản phẩm; khách hàng chỉ đặt đầu bài, doanh nghiệp tự tìm lời giải và
thực hiện. Hiện nay, phần mềm đã có những bước chuyển đổi hết sức mạnh mẽ và hỗ
trợ hầu hết cho tất cả các loại ngành nghề từ công nghiệp, giải trí đến dịch vụ. . . Hầu
như tất cả những cơng việc thực hiện trên máy tính ngày nay đều thông qua các phần
mềm chuyên dụng. Trong tương lai, phần mềm sẽ thống trị toàn bộ thế giới công nghệ
thông tin, nhất là các phần mềm tự động là một viễn cảnh hồn tồn thực tế và có thể
xảy ra.
1.1.2. Mã xấu
Lỗi phần mềm là một lỗi hay hỏng hóc trong chương trình hoặc hệ thống máy
tính khiến nó tạo ra kết quả khơng chính xác hoặc khơng mong muốn hoặc hành xử
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
5
theo những cách khơng lường trước được. Q trình tìm và sửa lỗi được gọi là "gỡ lỗi"
và thường sử dụng các kỹ thuật hoặc cơng cụ chính thức để xác định lỗi và từ những
năm 1950, một số hệ thống máy tính đã được thiết kế để ngăn chặn, phát hiện hoặc tự
động sửa các lỗi máy tính khác nhau trong quá trình hoạt động.
Hầu hết các lỗi phát sinh từ các lỗi và sai lầm được tạo ra trong mã nguồn của
chương trình hoặc thiết kế của chương trình hoặc trong các thành phần và hệ điều hành
được sử dụng bởi các chương trình đó. Một số ít các lỗi được gây ra bởi trình biên dịch
sản xuất mã khơng chính xác. Một chương trình có chứa nhiều lỗi (bug) và/hoặc lỗi
ảnh hưởng nghiêm trọng đến chức năng của nó, được cho là có lỗi (buggy). Lỗi có thể
kích hoạt các lỗi khác tạo ra hiệu ứng gợn. Lỗi có thể có hiệu ứng tinh tế hoặc khiến
chương trình bị sập hoặc treo máy tính. Các lỗi khác đủ điều kiện là lỗi bảo mật và có
thể, ví dụ, cho phép người dùng độc hại bỏ qua các kiểm sốt truy cập để có được các
đặc quyền trái phép.
Một trong những cách để ngăn chặn lỗi phần mềm xảy ra là phát hiện ra các mã
xấu và loại bỏ nó trước khi nó gây ra các lỗi phần mềm. Mã xấu là một phép ẩn dụ để
mô tả các mẫu, đoạn mã thường liên quan đến thiết kế tồi và lập trình tồi. Năm 1999,
Martin Fowler và Kent Beck [1] đã định nghĩa về mã xấu trong các nghiên cứu của họ.
Martin Fowler cho rằng: "Mã xấu là dấu hiệu bề mặt thường tương ứng với vấn đề sâu
hơn trong hệ thống" [2]. Kent Beck định nghĩa mã xấu như sau: "Mã xấu là một gợi ý
rằng đã xảy ra lỗi ở đâu đó trong mã của bạn. Sử dụng mã xấu để theo dõi vấn đề" [1].
Trong nghiên cứu của mình, cả hai ơng đều thống nhất mã xấu khơng phải là lỗi, nó
chỉ là một dấu hiệu cảnh báo lỗi có thể xảy ra. Nghiên cứu của các ơng đã đặt nền
móng cho sự phát triển trong việc xác định và phát hiện ra mã xấu sau đó.
Mã xấu có thể được sử dụng để trả lời câu hỏi về việc cấu trúc lại khi nào và cái
gì. Ý tưởng khơng nhất thiết là khơng cho phép có mã xấu, mà đúng hơn, mã xấu là
gợi ý cho chúng ta biết rằng việc tái cấu trúc có thể có lợi. Một số ví dụ về mã xấu là:
mã trùng lặp, các phương thức quá dài, các lớp chứa quá nhiều chức năng, các lớp vi
phạm quy tắc ẩn hoặc đóng gói dữ liệu hoặc các lớp ủy quyền phần lớn chức năng của
chúng cho các lớp khác.
1.1.3. Các thuật tốn học máy
Trước đây, mã xấu có thể được phát hiện bằng nhận thức chủ quan của các nhà
phát triển [3]. Cách tiếp cận này không hiệu quả và khó được triển khai trên các tập dữ
liệu lớn do xung đột của các bộ đánh giá khác nhau [4]. Nó phụ thuộc rất nhiều vào
kiến thức và kinh nghiệm của những người đánh giá các ngôn ngữ lập trình khác nhau.
Một phương pháp khác để phát hiện mã xấu là sử dụng các công cụ dựa trên quy tắc.
Hầu hết các công cụ này sử dụng một bộ ngưỡng để phân biệt các trường hợp có mùi
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
6
và khơng nặng mùi [5]. Họ có thể xác định một tập hợp con các mã xấu trong hệ
thống. Tuy nhiên, kết quả của các công cụ này không nhất qn [6].
Hiện tại, có rất nhiều thuật tốn học máy có thể giải quyết các vấn đề khác
nhau. Một số trong số chúng có thể được sử dụng để xác định mã xấu trong phần
mềm. Trong bài báo này, tôi tập trung vào các thuật toán học máy được bao gồm như
Linear Discriminant Analysis (LDA) [7], k-Nearest-Neighbours (kNN) [8], Multilayer
Perceptron (MLP) [9], Decision Tree (DT) [10], Support Vector Machine (SVM) [11],
Random Forest (RF) [12].
Linear Discriminant Analysis (LDA) là tổng quát của Phân biệt tuyến tính của
Fisher, một phương pháp được sử dụng trong thống kê, nhận dạng mẫu và học máy để
tìm một tổ hợp tuyến tính của các đối tượng đặc trưng hoặc phân tách hai hoặc nhiều
lớp đối tượng hoặc sự kiện . Kết hợp thu được có thể được sử dụng như một bộ phân
loại tuyến tính, hoặc phổ biến hơn là để giảm kích thước trước khi phân loại.
k-Nearest-Neighbours (kNN) là một trong những thuật toán học máy nổi tiếng
nhất được sử dụng rộng rãi trong lĩnh vực nghiên cứu phân loại dữ liệu. Thuật toán kNearest-Neighbors (k-NN) là một phương pháp phân loại không tham số được phát
triển lần đầu tiên bởi Evelyn Fix và Joseph Hodges vào năm 1951 [13]. Nó được sử
dụng để phân loại và hồi quy. Trong thuật toán này, mỗi hàng xóm sẽ được gán một
trọng số, và một tập hợp các hàng xóm sẽ được gán một lớp. Những người hàng xóm
gần hơn đóng góp nhiều hơn vào mức trung bình hơn những người ở xa hơn. Khoảng
cách thường được sử dụng trong thuật toán này là khoảng cách Euclidean hoặc khoảng
cách Hamming.
Multilayer Perceptron (MLP) là một lớp của mạng nơ-ron nhân tạo truyền
thẳng (ANN). Một MLP bao gồm ít nhất ba lớp nút: lớp đầu vào, lớp ẩn và lớp đầu ra.
Đây là một cơng cụ mơ hình hóa mạnh mẽ áp dụng quy trình đào tạo có giám sát bằng
cách sử dụng các ví dụ dữ liệu với các đầu ra đã biết. Thủ tục này dự đoán đầu ra từ dữ
liệu đầu vào đã cho bằng cách tạo ra một mơ hình hàm phi tuyến.
Decision Tree (DT) là một công cụ hỗ trợ quyết định sử dụng mơ hình định
dạng Decision Tree. Decision Tree là một cấu trúc giống như lưu đồ, trong đó mỗi nút
bên trong đại diện cho một "thử nghiệm" trên một thuộc tính. Mỗi nhánh đại diện cho
kết quả của thử nghiệm và mỗi nút rời đại diện cho một nhãn lớp. Các đường đi từ gốc
đến lá thể hiện các quy tắc phân loại.
Support Vector Machine (SVM) là một phương pháp học có giám sát tạo ra các
hàm ánh xạ đầu vào-đầu ra từ một tập hợp dữ liệu đào tạo được gắn nhãn. Hàm ánh xạ
có thể là một hàm phân loại, tức là loại dữ liệu đầu vào hoặc một hàm hồi quy. Các
hàm nhân phi tuyến thường được sử dụng để biến đổi dữ liệu đầu vào thành không
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
7
gian đặc trưng chiều cao để phân loại.
Random Forest (RF) hoặc rừng quyết định ngẫu nhiên là một phương pháp học
tập tổng hợp để phân loại, hồi quy và các nhiệm vụ khác. Decision Tree là một cây
phân cấp có cấu trúc được sử dụng để phân lớp các đối tượng dựa trên một loạt các
luật. Các thuộc tính của đối tượng có thể thuộc các kiểu dữ liệu khác nhau như nhị
phân, danh nghĩa, thứ tự, định lượng, trong khi thuộc tính lớp con phải có kiểu dữ liệu
nhị phân hoặc thơng thường. Tóm lại, đối với dữ liệu trên các đối tượng bao gồm các
thuộc tính cùng với các lớp của nó, Decision Tree sẽ sinh ra các luật để dự đoán lớp dữ
liệu chưa biết.
1.1.4. Mã xấu và học máy
Trong quá khứ và những năm gần đây, vấn đề phát hiện mã xấu rất tích cực.
Cộng đồng nghiên cứu đã đề xuất các kỹ thuật phát hiện mã xấu khác nhau, có thể
được chia thành hai loại chính. Phương pháp đầu tiên bao gồm các kỹ thuật dựa trên
quy tắc xác định một số quy tắc phát hiện bằng cách sử dụng số liệu mã và một số
ngưỡng được áp dụng trên các số liệu đó để phân biệt giữa mã xấu và mã tốt. Phương
pháp thứ hai bao gồm các kỹ thuật dựa trên máy học, áp dụng phương pháp học có
giám sát để phát hiện mã xấu.
Năm 2009, Khomh và cộng sự [14] đã đề xuất sử dụng Bayesian Be-lief
Networks để xác định và phát hiện mã xấu. Họ đã thực hiện các thí nghiệm chỉ trên hai
chương trình mở để phát hiện ba loại mã xấu là God Class, Spaghetti Code và Chức
năng Phân hủy. Sau đó, Hassaine và cộng sự (2010) [15] đã trình bày việc phát hiện
mã xấu. Họ đã thử nghiệm trên cùng một tập dữ liệu để phát hiện ra ba loại mã xấu
giống trong (Khomh và cộng sự 2009) [14]. Kết quả thử nghiệm cho thấy cách tiếp
cận của họ tốt hơn so với cách tiếp cận trong (Khomh và cộng sự 2009) [14] về độ
chính xác.
Maneerat và Muenchaisri (2011) [16] đã thu thập bảy bộ dữ liệu từ các tài liệu
trước đó cung cấp 27 số liệu mơ hình thiết kế và 7 mã xấu. Họ đã được đào tạo và thử
nghiệm để dự đoán mã xấu bằng cách sử dụng bảy thuật toán học máy. Các tác giả đã
không thực hiện bất kỳ tham chiếu nào đến tập dữ liệu của họ. Wang và cộng sự
(2012) [17] đã đề xuất một phương pháp giúp các nhà phát triển hiểu được tác hại của
các hoạt động sao chép mã bằng cách sử dụng Bayesian Networks và một tập hợp các
đặc trưng được lựa chọn từ lịch sử, mã, điểm đến. mã xấu duy nhất được xem xét
trong nghiên cứu này là Duplicated Code.
Năm 2012, Maiga và cộng sự [18] đã giới thiệu một cách tiếp cận để phát hiện
các anti-patterns dựa trên Support Vector Machine và có tính đến phản hồi của các
người tham gia đánh giá. Cách tiếp cận của họ có thể phát hiện ra một số mã xấu bao
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
8
gồm God Class, Spaghetti Code, Function Decomposition và Swiss Army Knife.
Fontana và cộng sự (2013) [19] lần đầu tiên trình bày một cách tiếp cận để phát
hiện mã xấu bằng cách sử dụng máy học. Sau đó, năm 2016, họ mở rộng cơng việc
của mình bằng cách áp dụng các thuật toán học máy khác nhau trên bốn mã xấu (Data
Class, God Class, Feature Envy, và Long Method) [3]. Kết quả thí nghiệm cho thấy
hiệu suất cao, khơng phụ thuộc vào loại mã xấu.
Amorim và cộng sự (2015) [20] đã giới thiệu một thử nghiệm sử dụng thuật
toán Decision Tree để phát hiện mã xấu. Họ đã sử dụng thuật toán di truyền để chọn
các chỉ số làm đặc điểm cho 12 mã xấu trong 4 dự án mã nguồn mở và họ đã chỉ ra
rằng thuật toán Decision Tree vượt trội hơn so với thuật toán của Support Vector
Machine và Bayesian Belief Networks.
Yang và cộng sự (2015) [21] đã đề xuất một mơ hình phân loại áp dụng học
máy cho các đánh giá của từng người dùng cá nhân về các bản sao mã. Công việc này
được coi là phát hiện mã xấu Duplicated Code. Vào năm 2016, White và cộng sự [22]
cũng đã giới thiệu một cách tiếp cận khác để phát hiện bản sao mã, tức là mã xấu trùng
lặp, sử dụng học sâu. Các đặc trưng cho bản sao mã được học tự động từ mã nguồn
thay vì sử dụng các số liệu.
Fontana và Zanoni (2017) [23] đã phân loại mã xấu theo mức độ nghiêm trọng
của chúng bằng cách sử dụng các kỹ thuật học máy. Mức độ nghiêm trọng có thể giúp
các nhà phát triển đánh giá cao các hoạt động tái cấu trúc. Họ đã thử nghiệm tám
phương pháp học máy trên bốn mã xấu bao gồm Data Class, God Class, Feature Envy
và Long Method.
Vào năm 2018, Hadj-Kacem và Bouassida [24] đã đề xuất một phương pháp kết
hợp sử dụng cả thuật toán khơng giám sát và có giám sát để phát hiện mã xấu. Đầu
tiên, một bộ mã hóa tự động sâu sẽ trích xuất các đặc trưng có liên quan. Sau đó, bộ
phân loại mạng nơ-ron nhân tạo được sử dụng để tìm hiểu và dự đốn mã xấu. Liu và
cộng sự (2019) [25] đã giới thiệu một cách tiếp cận sử dụng học sâu để tự động chọn
các đặc trưng của mã nguồn để phát hiện mã xấu. Họ đã thiết kế cách tiếp cận cho bốn
mùi Feature Envy, Long Method, Large Class và Misplaced Class.
Pecorelli và cộng sự (2019) [26] tập trung vào dữ liệu không cân bằng để phát
hiện mã xấu. Họ đã thử nghiệm năm phương pháp cân bằng dữ liệu cho năm loại mã
xấu khác nhau và kết luận rằng kỹ thuật SMOTE là hiệu suất tốt nhất. Guggulothu và
Moiz (2020) [27] đã giới thiệu phương pháp phân loại nhiều nhãn để phát hiện xem
một đoạn mã nhất định có nhiều mã xấu hay khơng. Họ chỉ thử nghiệm với hai loại mã
xấu là Long Method và Feature Envy.
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
9
1.1.5. Mơ hình triển khai và phương pháp đo lường
1.1.5.1. Mơ hình triển khai
Hình 1.1. Mơ hình triển khai
Trong phần này, tơi trình bày các bước áp dụng các kỹ thuật được trình bày ở
trên để phát hiện mã xấu. Hình 1.1 cho thấy các bước này cho giai đoạn đào tạo và giai
đoạn thử nghiệm. Đầu tiên, tập dữ liệu thô được tách thành hai tập dữ liệu với tỷ lệ
75% cho đào tạo (1), 25% cho thử nghiệm (4). Sau khi tách, tập dữ liệu này vẫn là dữ
liệu thô, tập dữ liệu thô được chuyển thành tập dữ liệu nhị phân (2) (5). Điều này có
nghĩa là mỗi loại mã xấu sẽ được chia thành một tập dữ liệu nhị phân. Mỗi phiên bản
trong tập dữ liệu được gắn một nhãn. Nhãn này có hai giá trị đúng hoặc sai tương ứng
với trường hợp này là có mùi hoặc khơng có mùi. Các kỹ thuật tiền xử lý dữ liệu được
áp dụng tương tự, đồng bộ với tập dữ liệu huấn luyện và tập dữ liệu kiểm tra. Các
thuật toán này đã được giới thiệu ở phần trước. Các mơ hình phân loại được xây dựng
dựa trên từng thuật toán học máy dựa trên tập dữ liệu đào tạo (3). Các mơ hình này
được sử dụng lại để kiểm tra dữ liệu (6). Kết quả của quá trình kiểm tra là danh sách
các nhãn tương ứng cho từng dịng máy và từng loại mã xấu. Độ chính xác của q
trình này được tính tốn dựa trên các nhãn danh sách trong dữ liệu thử nghiệm và các
nhãn danh sách được dự đốn thơng qua các mơ hình.
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
10
1.1.5.2. Phương pháp đo lường
Trong phạm vi của bài luận, độ đo accuracy, f1-score và ROC (Receiver
Operating Characteristic) được sử dụng để đo lường sự hiệu quả của các thuật toán
học máy cho từng kịch bản kiểm thử. Tất cả các thử nghiệm đều được thực hiện với bộ
dữ liệu nhị phân, vì thế ma trận 2x2 Confusion Matrix. Đây là một trong những kỹ
thuật đo lường hiệu suất phổ biến nhất và được sử dụng rộng rãi cho các mơ hình phân
loại. Bảng 1.1 mơ tả đầy đủ kết quả của quá trình phân loại.
Bảng 1.1. Confusion matrix
Acutally Positive (1)
Actually Negative (0)
Predicted Positive (1)
True Positives (TPs)
False Positives (FPs)
Predicted Negative (0)
False Negatives (FNs)
True Negative (TNs)
Trong đó:
• true positives (TP): Số các mẫu dự đốn mã xấu đúng.
• true negatives (TN): Số các mẫu dự đốn khơng phải mã xấu đúng.
• false positives (FP): Số các mẫu dự đoán mã xấu sai.
• false negatives (FN): Số các mẫu dự đốn khơng phải mã xấu sai.
Accuracy đại diện cho tỷ lệ giữa các trường hợp được dự đốn chính xác và tất
cả các trường hợp trong tập dữ liệu. Độ chính xác của thuật toán phân loại trên một tập
dữ liệu nhất định được xác định theo công thức:
(1)
F1-score được định nghĩa là trung bình hài hịa của precision và recall, có hình
dạng sau:
(2)
Trong đó:
(3)
(4)
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
11
ROC curves cũng được sử dụng để đánh giá hiệu quả của các mơ hình dự báo.
Đường cong càng dài về phía trái và biên trên, thì diện tích dưới đường cong AUC
càng lớn, mơ hình dự đốn càng hiệu quả, ngược lại, đường cong càng tiến tới đường
chéo 45 độ, AUC của mơ hình càng nhỏ thì mơ hình càng kém hiệu quả.
1.2. Phương pháp thực hiện
1.2.1. Lý thuyết tập hợp dữ liệu
Ngày nay, khám phá tri thức và khai thác dữ liệu là một lĩnh vực nghiên cứu
đang phát triển nhanh chóng. Con người cần một câu trả lời nhanh chóng và chính xác
về vấn đề hiện tại của mình dựa trên tập dữ liệu hiện có.
Lý thuyết tập hợp thô sơ đã được giới thiệu bởi nhà logic học Balan Zdzislak
Pawlak vào năm 1982 [28]. Tác giả đã cung cấp một cơng cụ để phân tích và trích xuất
dữ liệu từ dữ liệu khơng chính xác để phát hiện ra các mối quan hệ giữa các đối tượng
và các đối tượng ẩn trong dữ liệu. Từ đó cung cấp một cách đặc biệt để mơ tả, phân
tích và thao tác dữ liệu cũng như một cách tiếp cận đối với sự khơng chắc chắn và
khơng chính xác của dữ liệu. Mục đích của lý thuyết tập hợp thơ là phân loại dữ liệu
trong dạng biểu cịn gọi là hệ thống thông tin. Mỗi hàng đại diện cho một đối tượng và
mỗi cột đại diện cho một thuộc tính. Nó cung cấp một hệ thống giúp phân loại các tập
dữ liệu, trích xuất thơng tin hữu ích từ các tập dữ liệu. Nhờ vào dữ liệu thô mà các nhà
nghiên cứu, ứng dụng có thể biết trước được loại dữ liệu sẽ được xử lý, nó giúp giảm
bớt khối lượng và thời gian xử lý của hệ thống dữ liệu. Một trong những khái niệm cơ
bản và rất quan trọng trong lý thuyết tập thô là xấp xỉ tập hợp. Trong lý thuyết tập thơ,
người ta có thể thay thế một tập hợp bằng các xấp xỉ của tập hợp đó dựa trên một số
thơng tin cho trước với quan hệ không phân biệt.
1.2.2. Lý thuyết kỹ thuật tiền xử lý dữ liệu
Tiền xử lý dữ liệu là một bước rất quan trọng trong việc giải quyết bất kỳ vấn
đề nào trong lĩnh vực Học Máy. Hầu hết các bộ dữ liệu được sử dụng trong các vấn đề
liên quan đến Học Máy cần được xử lý, làm sạch và biến đổi trước khi một thuật toán
Học Máy có thể được huấn luyện trên những bộ dữ liệu này. Các kỹ thuật tiền xử lý dữ
liệu phổ biến hiện nay bao gồm: xử lý dữ liệu bị khuyết (missing data), mã hóa các
biến nhóm (encoding categorical variables), chuẩn hóa dữ liệu (standardizing data), co
giãn dữ liệu (scaling data). Những kỹ thuật này tương đối dễ hiểu nhưng sẽ có nhiều
vấn đề phát sinh khi chúng ta áp dụng vào các dữ liệu thực tế. Bởi lẽ các bộ dữ liệu
ứng với các bài toán trong thực tế rất khác nhau và mỗi bài tồn thì đối mặt với những
thách thức khác nhau về mặt dữ liệu.
Trong thực tế, dữ liệu có thể khơng được thu thập trực tiếp bởi con người vì các
lý do xoay quanh vấn đề về chi phí, cơ sở hạ tầng, con người. Do đó, dữ liệu có thể bị
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
12
thiếu bởi một sai sót của máy móc, hoặc thực tế nó khơng tồn tại tại một thời điểm
nhất định trong khi thu thập dữ liệu. Qua nghiên cứu, các dữ liệu bị khuyết bởi các
nguyên nhân sau đây:
Khuyết ngẫn nhiên (Missing at Random – MAR): Khuyết ngẫn nhiên nghĩa là
xu hướng giá trị của một đặc trưng bị khuyết khơng liên quan đến tính chất của đặc
trưng đó nhưng liên quan đến một vài đặc trưng không bị khuyết khác. Nói cách khác,
sự khuyết dữ liệu của đặc trưng này có điều kiện hoặc phụ thuộc vào một hoặc một vài
các đặc trưng khác.
Khuyết hoàn toàn ngẫu nhiên (Missing Completely at Random – MCAR):
Khuyết hoàn toàn ngẫu nhiên nghĩa là xu hướng bị khuyết của một đặc trưng là hồn
tồn ngẫu nhiên. Khơng có mối quan hệ nào giữa đặc trưng bị khuyết với các giá trị
giả định hoặc các ràng buộc trên các đặc trưng khác. Ở đây, tập dữ liệu bị khuyết chỉ
là một tập con ngẫu nhiên của bộ dữ liệu.
Khuyết không ngẫu nhiên (Missing not at Random – MNAR): Khuyết không
ngẫu nhiên xảy ra khi một điểm dữ liệu bị khuyết phụ thuộc cả vào các giá trị giả định.
1.2.2.1 Các phương pháp xóa dữ liệu bị khuyết
Trong thực tế, có rất nhiều phương pháp để xử lý dữ liệu bị khiếm khuyết. Cách
đơn giản nhất mà hầu như mọi người đều có thể nghĩ đến là xóa đi những dữ liệu bị
khuyết. Trong nội dung bài luận văn này, tôi sẽ tập trung khái quát một vài phương
pháp cơ bản cốt lõi sau đây:
Listwise: Phương pháp xóa dữ liệu listwise xóa đi tất cả các điểm dữ liệu có
một hoặc một vài giá trị đặc trưng bị khuyết. Phương pháp này thường chỉ được sử
dụng khi chúng ta đang tiến hành một nghiên cứu để so sánh với một phương pháp xử
lý khác. Vì trong thực tế thì phương pháp này đem lại nhiều bất lợi. Bởi lẽ dữ liệu
khuyết hoàn toàn ngẫu nhiên MCAR thường hiếm gặp, do đó, phương pháp này nhiều
khả năng tạo ra các tham số và ước lượng bị lệch cho mơ hình.
Pairwise: Phương pháp xóa pairwise cố gắng tối thiểu hóa sự mất mát khi sử
dụng phương pháp xóa listwise. Để hiểu đơn giản về phương pháp xóa pairwise, ta hãy
liên tưởng đến ma trận tương quan. Mỗi giá trị tương quan thể hiện mức độ liên kết
giữa hai biến (đặc trưng). Với mỗi cặp biến mà dữ liệu không bị khuyết, hệ số tương
quan sẽ được đưa vào tính tốn. Do đó, phương pháp xóa pairwise tối đa hóa các dữ
liệu có sẵn bởi một phân tích cơ sở. Một thế mạnh của phương pháp này là nó làm
tăng sức mạnh và tính hiệu quả của các phân tích mà chúng ta muốn thực hiện. Mặc dù
phương pháp này được khuyến nghị dùng nhiều hơn là phương pháp xóa listwise,
nhưng nó cũng sử dụng giả thiết rằng dữ liệu bị khuyết thuộc dạng khuyết hoàn toàn
ngẫu nhiên MCAR.
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
13
Xóa bỏ các đặc trưng: Sẽ ln là tốt hơn nếu chúng ta giữ lại dữ liệu thay vì
xóa bỏ nó khỏi dữ liệu thu thập được. Nhưng đơi khi chúng ta cũng có thể xóa bỏ đi
một vài đặc trưng trong bộ dữ liệu nếu chúng bị khuyết nhiều hơn 60% (hoặc một
ngưỡng nào đó mà chúng ta thấy phù hợp) tổng số quan sát và đặc trưng đó không quá
quan trọng. Tuy nhiên, tốt hơn hết là chúng ta nên tìm cách xử lý dữ liệu bị khuyết
thay vì xóa các đặc trưng của chúng đi.
Điền vào dữ liệu bị khuyết: Như đã nói ở trên, các nhà phân tích dữ liệu thường
tìm cách điền vào các dữ liệu bị khuyết thay vì xóa chúng khỏi bộ dữ liệu. Đối với
từng loại dữ liệu khác nhau và từng bài tốn khác nhau, người ta có những chiến lược
xử lý khác nhau.
1.2.2.2 Các phương pháp xử lý dữ liệu chung
Như tơi trình bày ở phần trước, một đặc trưng thường được phân loại vào một
trong hai dạng là thuộc tính dạng số và thuộc tính dạng nhóm. Các xử lý dữ liệu bị
khuyết cũng sẽ khác nhau ứng với hai loại thuộc tính này. Trong phần này, tơi sẽ trình
bày các phương pháp điền vào dữ liệu bị khuyết để được bộ dữ liệu đầy đủ trước khi
bước vào huấn luyện. Với một đặc trưng dữ liệu dạng số, có rất nhiều lựa chọn mà
chúng ta có thể xem xét khi điền vào một giá trị bị khuyết, ví dụ:
- Một giá trị hằng có ý nghĩa trong miền xác định của dữ liệu, ví dụ như 0.
- Một giá trị của một đặc trưng từ một mẫu dữ liệu ngẫu nhiên trong tập dữ
liệu.
- Các giá trị thống kê cơ bản như giá trị trung bình, giá trị trung vị hay giá trị
mốt (mode) của cột. Một giá trị được ước lượng từ một mơ hình dự đốn khác. Các
đặc trưng dữ liệu dạng nhóm cần được tinh chỉnh một cách khéo léo hơn, vì vậy chúng
ta cần chú ý nhiều đến hiệu năng của mơ hình sau khi chúng ta tinh chỉnh (so sánh
trước và sau khi áp dụng tinh chỉnh).
- Thay thế bằng giá trị xuất hiện nhiều nhất của đặc trưng đó trong tồn bộ tập
dữ liệu. Tuy nhiên, cách này thường phát sinh độ lệch nhất định cho mơ hình.
- Coi các giá trị bị khuyết là một giá trị mới trong tập giá trị đặc trưng nhóm.
- Sử dụng một mơ hình dự đoán để ước lượng giá trị thay thế cho giá trị bị
khuyết. Trong trường hợp này, chúng ta chia bộ dữ liệu ra thành hai phần bao gồm:
Một phần chứa các dữ liệu đầy đủ để huấn luyện, phần còn lại chứa các điểm dữ liệu
bị khuyết. Một số phương pháp có thể kể đến như hồi quy logistic (logistic regression),
KNN hoặc phương pháp ANOVA.
1.2.3. Lý thuyết lựa chọn đặc trưng
Lựa chọn biến và đặc trưng đã trở thành trọng tâm của nhiều nghiên cứu trong
các lĩnh vực ứng dụng mà các bộ dữ liệu với hàng chục hoặc hàng trăm ngàn đặc trưng
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
14
có sẵn. Những lĩnh vực này bao gồm xử lý văn bản các tài liệu internet, phân tích
mảng biểu hiện gen và hóa học tổ hợp. Mục tiêu quan trọng của việc lựa chọn đặc
trưng là cải thiện hiệu suất dự đoán, cung cấp các yếu tố dự báo nhanh hơn và hiệu quả
hơn về chi phí và cung cấp sự hiểu biết tốt hơn về quy trình cơ bản tạo ra dữ liệu.
Những đóng góp của vấn đề đặc biệt này bao gồm một loạt các khía cạnh của các vấn
đề như vậy: cung cấp định nghĩa tốt hơn về chức năng khách quan, xây dựng đặc
trưng, xếp hạng đặc trưng, lựa chọn đặc trưng đa biến, phương pháp tìm kiếm hiệu quả
và các phương pháp đánh giá tính hợp lệ. Phần lớn các thuật toán học máy phân loại
chỉ giải quyết tốt một bộ dữ liệu giới hạn về quy mô cũng như độ phức tạp. Ngược lại,
lượng dữ liệu mà chúng ta thu thập được ngày càng nhiều hơn. Tuy nhiên, kết quả của
các thuật toán phân loại sử dụng học máy phụ thuộc rất nhiều vào các đặc trưng của bộ
dữ liệu. Phương pháp trích chọn đặc trưng sẽ giúp giảm kích cỡ của khơng gian dữ
liệu, đồng thời có thể loại bỏ đi các đặc trưng gây nhiễu làm ảnh hưởng đến kết quả
phân loại.
1.2.3.1 Các phương pháp lựa chọn đặc trưng
Các phương pháp lựa chọn đặc trưng nhằm mục đích giảm số lượng biến đầu
vào xuống những biến được cho là hữu ích nhất đối với mơ hình để dự đốn biến mục
tiêu. Việc lựa chọn chủ yếu tập trung vào việc loại bỏ các yếu tố dự đốn khơng có
thơng tin hoặc dư thừa khỏi mơ hình. Một số mơ hình dự đốn có một số lượng lớn các
biến có thể làm chậm q trình phát triển và đào tạo mơ hình và yêu cầu một lượng lớn
bộ nhớ hệ thống. Ngoài ra, hiệu suất của một số mơ hình có thể giảm khi bao gồm các
biến đầu vào không liên quan đến biến mục tiêu.
Cách đầu tiên khi nghĩ về trích chọn đặc trưng là sử dụng phương pháp học có
giám sát và khơng giám sát. Có sự khác biệt quan trọng trong việc lựa chọn đặc trưng
cho các thuật toán học có giám sát và khơng giám sát. Đối với kỹ thuật học khơng
giám sát, q trình lựa chọn đặc trưng sẽ bỏ qua các biến mục tiêu, chẳng hạn như
phương pháp loại bỏ biến dư thưa bằng cách sử dụng sự tương quan giữa các biến. Đối
với kỹ thuật học có giám sát thì sử dụng các biến mục tiêu chẳng hạn như phương
pháp loại bỏ các biến không liên quan.
Một cách tiếp cận khác trọng việc trích chọn đặc trưng là sử dụng phương pháp
wrapper và filter. Các phương pháp này hầu như luôn được giám sát và được đánh giá
dựa trên hiệu suất của mơ hình dựa trên bộ dữ liệu. Phương pháp lựa chọn đặc trưng
wrapper tạo ra nhiêu mơ hình với các tập hợp con khác nhau của các đặc trưng đầu
vào và chọn những đặc trưng đó dẫn đến mơ hình hoạt động tốt nhất theo số liệu hiệu
suất. Các phương pháp này không quan tâm đến các kiểu biến, mặc dù chúng có thể
tốn kém về mặt tính tốn. Phương pháp lựa chọn đặc trưng filter sử dụng các kỹ thuật
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
15
thống kê để đánh giá mối quan hệ giữa mỗi biến đầu vào và biến mục tiêu, và những
điểm số này được sử dụng làm cơ sở để chọn (lọc) những biến đầu vào sẽ được sử
dụng trong mơ hình.
Cuối cùng, có một số thuật tốn học máy thực hiện lựa chọn đặc trưng tự động
như một phần của việc học mơ hình, có thể coi các kỹ thuật này là phương pháp lựa
chọn đặc trưng nội tại.
Lựa chọn đặc trưng cũng liên quan đến các kỹ thuật giảm số lượng chiều trong
khơng gian bộ dữ liệu, trong đó, cả hai phương pháp đều tìm kiếm ít biến đầu vào hơn
cho một mơ hình dự đốn. Sự khác biệt là lựa chọn đặc trưng chọn các đặc trưng để
giữ hoặc loại bỏ khỏi tập dữ liệu, trong khi việc giảm kích thước (số chiều) tạo ra phép
chiếu dữ liệu dẫn đến các đặc trưng đầu vào hoàn toàn mới. Do đó, giảm kích thước
(số chiều là một sự thay thế để lựa chọn đặc trưng chứ không phải là một loại lựa chọn
đối tượng.
Các phương pháp lựa chọn đặc trưng được tổng hợp trong Hình1.2.
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ
16
Hình 1.2. Tổng hợp các phương pháp lựa chọn đặc trưng
1.2.3.2 Xác định phương pháp lựa chọn đặc trưng
Điểm chung là dùng các phương pháp thống kê kiểu tương quan giữa các biến
đầu vào và đầu ra làm cơ sở để chọn lọc các đặc trưng. Do đó, lựa chọn các phương
pháp thống kê phụ thuộc rất nhiều vào các loại dữ liệu biến. Các kiểu dữ liệu phổ biến
bao gồm số (chẳng hạn như chiều cao) và phân loại (chẳng hạn như nhãn), mặc dù mỗi
loại có thể được chia nhỏ hơn như số nguyên và dấu phẩy động cho các biến số và
boolean, thứ tự hoặc danh nghĩa cho các biến phân loại. Càng biết nhiều về kiểu dữ
liệu của một biến, thì càng dễ chọn một biện pháp thống kê thích hợp cho phương
pháp chọn các đặc trưng được dựa vào bộ lọc. Hình 1.3 dưới đây biểu diễn sơ đồ chi
THƯ VIỆN TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐẠI HỌC ĐÀ NẴNG.
Lưu hành nội bộ