I. ĐẶT VẤN ĐỀ Khai phá dữ liệu là một ngành khoa học thực nghiệm. Nó được thiết kế sao cho bạn có thể nhanh chống thử nghiệm những cách thức hiện tại trên cơ sở dữ liệu mới một cách linh hoạt. Nó cung cấp nhiều sự hỗ trợ cho toàn bộ quá trình xử lý số liệu thực nghiệm, bao gồm chuẩn bị dữ liệu đầu vào, việc ước lượng học những sơ đồ thống kê, và hình dung dữ liệu ra và kết quả của việc học. Weka được phát triển bởi đại học Waikato bang New Zealand, và có tên là Waikato Environment for Knowledge Analysis. Hệ thống được viết bởi java và phân phối dưới thuật ngữ GNU. Nó cung cấp một giao diện tương tự cho nhiều giải thuật học khác nhau với nhiều phương thức chho quá trình xử lý để ước lượng kết quả bằng sơ đồ cho bất kì một dữ liệu nào. Workbenh bao gồm những phương thức chuẩn cho các vấn đề của khai phá dữ liệu như: phân lớp,hồi quy, phân nhóm, phân cụm, luật kết hợp, và các thuộc tính kết hợp.Cụ thể đề tài này em tìm hiểu về bài toán phân lớp trong weka và áp dụng trong bài toán khả năng mắc căn bệnh tim II. XÂY DỰNG CƠ SỞ DỮ LIỆU Cơ sở dữ liệu này chứa 13 thuộc tính (đã được chiết xuất từ một tập hợp lớn hơn 75) Thuộc tính Thông tin: ------------------------ - 1. tuổi - 2. giới tính - 3. đau ngực (4 giá trị) Đau thắt ngực điển hình Đau thắt ngực không điển hình Đau không phải đau thắt ngực Không có triệu chứng bệnh
Trang 1HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
-& -Đề tài:
SỬ DỤNG PHẦN MỀM WEKA PHÂN LỚP CHO KHẢ NĂNG
MẮC CĂN BỆNH TIM
Giáo viên hướng dẫn: HỒ NHẬT QUANG
Sinh viên thực hiện: TRẦN MINH LUÂN
Lớp: HỆ THỐNG THÔNG TIN 6
HÀ NỘI - 10/2011
Khai phá dữ liệu là một ngành khoa học thực nghiệm Nó được thiết kế sao cho bạn
có thể nhanh chống thử nghiệm những cách thức hiện tại trên cơ sở dữ liệu mới một cách
Trang 2linh hoạt.Nó cung cấp nhiều sự hỗ trợ cho toàn bộ quá trình xử lý số liệu thực nghiệm, bao gồm chuẩn bị dữ liệu đầu vào, việc ước lượng học những sơ đồ thống kê, và hình dung dữ liệu ra và kết quả của việc học
Weka được phát triển bởi đại học Waikato bang New Zealand, và có tên là Waikato Environment for Knowledge Analysis Hệ thống được viết bởi java và phân phối dưới thuật ngữ GNU Nó cung cấp một giao diện tương tự cho nhiều giải thuật học khác nhau với nhiều phương thức chho quá trình xử lý để ước lượng kết quả bằng sơ đồ cho bất kì một dữ liệu nào
Workbenh bao gồm những phương thức chuẩn cho các vấn đề của khai phá dữ liệu như: phân lớp,hồi quy, phân nhóm, phân cụm, luật kết hợp, và các thuộc tính kết hợp.Cụ thể đề tài này em tìm hiểu về bài toán phân lớp trong weka và áp dụng trong bài toán khả năng mắc căn bệnh tim
Cơ sở dữ liệu này chứa 13 thuộc tính (đã được chiết xuất từ a larger set of 75) một tập hợp lớn hơn 75)
Attribute Information: Thuộc tính Thông tin:
- -
1 - 1 age tuổi
2 - 2 sex giới tính
3 - 3 chest pain type (4 values) đau ngực (4 giá trị)
Đau thắt ngực điển hình
Đau thắt ngực không điển hình
Đau không phải đau thắt ngực
Không có triệu chứng bệnh
4 - 4 resting blood pressure huyết áp
Trang 35 - 5 serum cholestoral in mg/dl cholestoral huyết thanh trong mg / dl
6 - 6 fasting blood sugar > 120 mg/dl độ đường trong máu lúc đói> 120 mg / dl
7 - 7 resting electrocardiographic results (values 0,1,2) nghỉ ngơi kết quả điện tâm đồ (các giá trị 0,1,2)
8 - 8 maximum heart rate achieved nhịp tim đập tối đa
9 - 9 exercise induced angina thực đau thắt ngực gây ra
10 - 10 oldpeak = ST depression induced by exercise relative to rest oldpeak độ lõm của sóng điện tim
11 - 11 the slope of the peak exercise ST segment độ dốc của đoạn cao nhất của sóng S 12 - 12 number of major vessels (0-3) colored by flourosopy số mạch chính được định màu (0-3) màu bởi flourosopy
13 - 13 Độ nhấp nháy cơ tim
thal: 3 = normal; 6 = fixed defect; 7 = reversable defect 3 = bình thường, 6 = cố định khuyết tật, 7 = hồi phục khiếm khuyết
Attributes types
Các thuộc tính các loại:
@relation heart
@attribute Age integer
@attribute Sex integer
@attribute ChestPainType integer
@attribute RestBloodPressure integer
@attribute SerumCholestoral integer
@attribute FastingBloodSugar integer
@attribute ResElectrocardiographic integer
@attribute MaxHeartRate integer
@attribute ExerciseInduced integer
@attribute Oldpeak real
@attribute Slope integer
@attribute MajorVessels integer
@attribute Thal integer
@attribute Class {1, 2}
1 Tiền xử lý dữ liệu :
Trang 4- Sau khi đã tạo xong file heart.arff thì tiến hành đọc dữ liệu vào weka:
Trang 5- Ta thấy xuất hiện dữ liệu trên cửa số Preprocess của WEKA như sau:
Trang 6Chọn AddValus trong filter:
Trang 7Nhập thêm giá trị cho cột class:
- Bước đầu tiên ta sử dụng tất cả dữ liệu để trainning cho cây:
Trang 8+ Nhấn vào tab Classify chọn thuật toán sử dụng bằng cách nhấn vào nút Choose; khi cây thư mục hiện thư mục Trees/J48:
Để tiến hành trainning trên toàn bộ dữ liệu ta chọn vào tùy chọn Use tranning set rồi nhấn Start.
Ta thu được kết quả hiển thị ở khung Classifier Output như sau:
Trang 9== Run information ===
Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2
Relation: heart-weka.filters.unsupervised.attribute.NumericToNominal-Rfirst-last-weka.filters.unsupervised.attribute.AddValues-C14-Lco,khong
Instances: 270
Attributes: 14
Age
Sex
ChestPainType
RestBloodPressure
SerumCholestoral
FastingBloodSugar
ResElectrocardiographic
MaxHeartRate
ExerciseInduced
Oldpeak
Slope
MajorVessels
Thal
Class
Test mode: evaluate on training data
=== Classifier model (full training set) ===
J48 pruned tree
-Thal = 3
| MajorVessels = 0: 1 (107.0/12.0)
| MajorVessels = 1
| | Sex = 0: 1 (11.0)
| | Sex = 1
| | | ChestPainType = 1: 1 (3.0/1.0)
| | | ChestPainType = 2: 1 (1.0)
| | | ChestPainType = 3: 1 (2.0)
| | | ChestPainType = 4: 2 (9.0)
| MajorVessels = 2
| | ExerciseInduced = 0: 1 (10.0/3.0)
| | ExerciseInduced = 1: 2 (3.0)
| MajorVessels = 3: 2 (6.0/1.0)
Thal = 6
| MajorVessels = 0: 1 (7.0/1.0)
Trang 10| MajorVessels = 1: 2 (4.0)
| MajorVessels = 2: 2 (2.0)
| MajorVessels = 3: 2 (1.0)
Thal = 7
| ChestPainType = 1: 1 (6.0/2.0)
| ChestPainType = 2
| | ResElectrocardiographic = 0: 1 (5.0/2.0)
| | ResElectrocardiographic = 1: 2 (0.0)
| | ResElectrocardiographic = 2: 2 (2.0)
| ChestPainType = 3
| | Slope = 1: 1 (7.0/1.0)
| | Slope = 2: 2 (13.0/4.0)
| | Slope = 3: 1 (1.0)
| ChestPainType = 4: 2 (70.0/7.0)
Size of the tree : 30
Time taken to build model: 0.06 seconds
=== Evaluation on training set ===
=== Summary ===
Correctly Classified Instances 236 87.4074 %
Incorrectly Classified Instances 34 12.5926 %
Kappa statistic 0.7429
Mean absolute error 0.1021
Root mean squared error 0.226
Relative absolute error 41.0457 %
Root relative squared error 64.3055 %
Coverage of cases (0.95 level) 100 %
Mean rel region size (0.95 level) 46.6667 %
Total Number of Instances 270
=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0.92 0.183 0.863 0.92 0.89 0.91 1
0.817 0.08 0.891 0.817 0.852 0.91 2
0 0 0 0 0 ? co
0 0 0 0 0 ? khong
Weighted Avg 0.874 0.137 0.875 0.874 0.873 0.91
=== Confusion Matrix ===
a b c d < classified as
138 12 0 0 | a = 1
Trang 1122 98 0 0 | b = 2
0 0 0 0 | c = co
0 0 0 0 | d = khong
Kết quả cây dưới dạng hình ảnh:
3. Tiến hành chạy thử nhiều lần cây trên số lượng dữ liệu tranning khác nhau:
Lần thứ hai: Lấy 95% dữ liệu để xây dựng cây, 5% để test:
Trang 12=== Run information ===
Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2 Relation: heart
Instances: 270
Attributes: 14
Age
Sex
ChestPainType
RestBloodPressure
SerumCholestoral
FastingBloodSugar
ResElectrocardiographic
MaxHeartRate
ExerciseInduced
Oldpeak
Slope
MajorVessels
Thal
Class
Test mode: split 95.0% train, remainder test
=== Classifier model (full training set) ===
J48 pruned tree
-Thal <= 3
| ChestPainType <= 3: 1 (101.0/10.0)
| ChestPainType > 3
| | MajorVessels <= 0
| | | Age <= 54: 1 (17.0)
| | | Age > 54
| | | | ExerciseInduced <= 0
| | | | | Oldpeak <= 2
| | | | | | Age <= 59: 1 (2.0)
| | | | | | Age > 59: 2 (4.0/1.0)
| | | | | Oldpeak > 2: 1 (3.0)
| | | | ExerciseInduced > 0
| | | | | Slope <= 1: 1 (2.0)
| | | | | Slope > 1: 2 (3.0)
| | MajorVessels > 0
| | | Sex <= 0
| | | | Oldpeak <= 9: 1 (3.0)
Trang 13| | | | Oldpeak > 9: 2 (3.0)
| | | Sex > 0: 2 (14.0)
Thal > 3
| MajorVessels <= 0
| | ExerciseInduced <= 0
| | | FastingBloodSugar <= 0
| | | | Thal <= 6: 1 (4.0)
| | | | Thal > 6
| | | | | Age <= 52: 2 (9.0/2.0)
| | | | | Age > 52: 1 (11.0/2.0)
| | | FastingBloodSugar > 0: 1 (5.0)
| | ExerciseInduced > 0
| | | Sex <= 0: 2 (3.0)
| | | Sex > 0
| | | | Oldpeak <= 15
| | | | | ResElectrocardiographic <= 1: 1 (3.0)
| | | | | ResElectrocardiographic > 1
| | | | | | Age <= 51: 2 (3.0)
| | | | | | Age > 51: 1 (3.0/1.0)
| | | | Oldpeak > 15: 2 (12.0)
| MajorVessels > 0: 2 (65.0/6.0)
Size of the tree : 39
Time taken to build model: 0.03 seconds
=== Evaluation on test split ===
=== Summary ===
Correctly Classified Instances 10 76.9231 % Incorrectly Classified Instances 3 23.0769 % Kappa statistic 0.5301
Mean absolute error 0.2827
Root mean squared error 0.4593
Relative absolute error 57.0293 %
Root relative squared error 92.0741 %
Coverage of cases (0.95 level) 84.6154 %
Mean rel region size (0.95 level) 76.9231 %
Total Number of Instances 13
Trang 14=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure ROC Area Class 0.857 0.333 0.75 0.857 0.8 0.762 1
0.667 0.143 0.8 0.667 0.727 0.762 2
Weighted Avg 0.769 0.245 0.773 0.769 0.766 0.762
=== Confusion Matrix ===
a b < classified as
6 1 | a = 1
2 4 | b = 2
Lần thứ ba: Lấy 90% dữ liệu để xây dựng cây, 10% để test:
Trang 15Lần thứ tư: Lấy 85% dữ liệu để xây dựng cây, 15% để test:
Lần thứ năm: Lấy 80% dữ liệu để xây dựng cây, 20% để test:
Trang 16Lần thứ sáu: Lấy 75% dữ liệu để xây dựng cây, 25% để test:
Lần thứ bảy: Lấy 70% dữ liệu để xây dựng cây, 30% để test:
Trang 17Lần thứ tám: Lấy 65% dữ liệu để xây dựng cây, 35% để test:
Lần thứ chín: Lấy 60% dữ liệu để xây dựng cây, 40% để test:
Trang 18Lần thứ mười: Lấy 55% dữ liệu để xây dựng cây, 45% để test:
Sau khi thực hiện chạy 10 lần J48 để xây dựng cây với các tham số đầu vào khác nhau
ta thấy ứng với lần chạy thứ 7 với các tham số lựa chọn là : bộ dữ liệu dùng khởi tạo cây
70 %, bộ dữ liệu test là 30% đạt được tỉ lệ phân lớp chính xác là 85% Nên ta chọn cây quyết định sinh ra tại lần chạy thứ 7 để sử dụng cho các mẫu thử bất kỳ sau này
Cây quyết định tại lần chạy thứ 7: