1. Trang chủ
  2. » Luận Văn - Báo Cáo

tiểu luận chuyên đề tốt nghiệp trí tuệ nhân tạo 3 đề tài ứng dụng machine learning khai phá bộ dữ liệu bệnh tim mạch

41 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng dụng Machine Learning Khai phá Bộ Dữ liệu Bệnh Tim Mạch
Tác giả Trần Thiện Nhã, Võ Quốc Dương
Người hướng dẫn ThS. Đặng Như Phú
Trường học Trường Đại học Nguyễn Tất Thành
Chuyên ngành Trí tuệ nhân tạo
Thể loại Tiểu luận chuyên đề tốt nghiệp
Năm xuất bản 2023
Thành phố TP. HCM
Định dạng
Số trang 41
Dung lượng 1,35 MB

Cấu trúc

  • CHƯƠNG I: TỔNG QUAN ĐỀ TÀI (9)
    • 1. Lí do chọn đề tài (9)
    • 2. Mục tiêu nghiên cứu (9)
    • 3. Đối tượng nghiên cứu (9)
  • CHƯƠNG II: CƠ SỞ LÝ THUYẾT (10)
    • 1. Thuật toán Naive Bayes (10)
    • 2. Thuật toán KNN (11)
    • 3. Thuật toán Decision Tree (13)
    • 4. Thuật toán Logistic Regression (13)
    • 5. Machine Learning (13)
  • CHƯƠNG III XÂY DỰNG MÔ HÌNH (15)
  • CHƯƠNG IV: THỰC NGHIỆM VÀ ĐÁNH GIÁ (17)
    • 1. Phân tích dữ liệu (27)
    • 2. Trực quan hóa dữ liệu (29)
    • 3. Kết quả phân tích dự đoán của cá thuật toán khác nhau (34)
    • 1. Logistic Regression (34)
    • 2. DecisionTree (35)
    • 3. Bayes (36)
    • 4. KNN (36)
    • CHƯƠNG 5 KẾT LUẬN (40)
  • Tài liệu tham khảo (41)
    • age 0 (0)
    • sex 0 (0)
    • cp 0 (0)
    • trestbps 9 (0)
    • chol 0 (0)
    • fbs 3 (0)
    • restecg 0 (0)
    • thalach 8 (0)
    • exang 8 (0)
    • oldpeak 9 (0)
    • slope 28 (0)
    • ca 71 (0)
    • thal 61 (0)

Nội dung

Nhiệm vụ/nội dung mô tả chi tiết nội dung, yêu cầu, phương pháp… : - Phân tích yêu cầu bài toán- Xác định đầu vào và đầu ra- Xác định các tập mờ, hàm liên thuộc- Xác định các luật - Phân

CƠ SỞ LÝ THUYẾT

Thuật toán Naive Bayes

- Bộ phân lớp Bayesian (Bayesian classifer) là bộ phân lớp được xây dựng dựa trên phương pháp phân tích xác suất có điều kiện theo định lí Bayes (Bayes’ theorem). Đây là bộ phân lớp thực hiện việc dự đoán xác suất một đối tượng dữ liệu sẽ thuộc về một lớp cụ thể nào đó Bộ phân lớp cơ bản (đơn giản) nhất của giải pháp này được gọi là bộ phân lớp Bayesian ngây thơ (naive Bayesian classifier) Giải pháp này là khá đơn giản, dễ hiểu, dễ hiện thực và hoạt động hiệu quả khi áp dụng vào thực tế, thậm chí là với các tập dữ liệu lớn.

Bộ phân lớp cơ bản nhất của giải pháp này được gọi là bộ phân lớp Bayesian ngây thơ (Naive Bayesian classifer) Đây là giải pháp khá đơn giản, dễ hiểu, dễ thực hiện và hoạt động hiệu quả khi áp dụng vào thực tế, thậm chí là với các tập dữ liệu lớn.

Bộ phân lớp Naive Bayes ngây thơ được xây dựng dựa trên một giả thiết rằng sự tác động của các thuộc tính lên việc xác định giá trị nhãn của một lớp cho trước là độc lập lẫn nhau (class-conditional independence) – gọi là độc lập theo điều kiện lớp Nghĩa là các thuộc tính đầu vào là độc lập (không tương quan hay phụ thuộc) với nhau trong việc liên hệ với nhãn (đầu ra) của đối tượng.

Giả thiết này được đưa ra nhằm làm đơn giản hóa các ràng buộc của bài toán, từ đó giảm thiểu mức độ phức tạp, giúp việc giải thích nguyên tắc hoạt động của bộ phân lớp được rõ ràng hơn Trong thực tế, các thuộc tính đầu vào có thể có mối quan hệ ràng buộc lẫn nhau nên ta cần phải khảo sát và phân tích các mối quan hệ này trong quá trình khai phá dữ liệu hay phân lớp dữ liệu nói riêng.

Theo định lý Bayes thì P (H|X) được tính như sau (Nguồn: tác giả Trần Minh Quang):

Trong đó các thành phần của biểu thức được định nghĩa:

● P (H|X) là xác suất hậu nghiệm của H dựa trên điều kiện X.

● P (X|H) là xác suất hậu nghiệm của X dựa trên điều kiện H (biết trước sự xuất hiện của H trong tập dữ liệu).

● P (H) là xác suất tiền nghiệm của H, dựa vào sự xuất hiện của các lớp/nhãn.

P(X) là xác suất tiền nghiệm của X trong D => X được xác định bởi các giá trị của các thuộc tính và được biết trước như là dữ liệu đầu vào để bộ phân lớp xác định tên lớp phù hợp cho nó Nên X được gọi là đối tượng dự đoán và P(X) là xác suất tiền nghiệm của đối tượng dự đoán.

Thuật toán KNN

Thuật toán KNN là một trong những phương pháp học có giám sát “Supervised Learning” tức dựa trên biến mục tiêu đã đc xác định trước đó, thuật toán sẽ xem xét dữ liệu đã chứa biến mục tiêu (đã phân loại) để học và tìm ra những biến có thể tác động đến biến mục tiêu

KNN dựa trên giải định là những thứ tương tự hay có tính chất gần giống nhau sẽ nằm ở vị trí gần nhau, với giả định như vậy, KNN được xây dựng trên các công thức toán phục vụ để tính khoảng cách giữa 2 điểm dữ liệu để xem xét mức độ giống nhau của chúng. KNN còn gọi là "Lazy learning method” vì tính đơn giãn của nó, có nghĩa là quátrình training không quá phức tạp để hoàn thiện mô hình Điều này làm cho việc xây dựng mô hình nhanh hơn nhưng giai đoạn thử nghiệm chậm hơn và tốn kém hơn về mặt thời gian và bộ nhớ dữ liệu, đặc biệt khi bộ dữ liệu lớn và phức tạp với nhiều biến khác nhau.

Trong trường hợp xấu nhất, KNN cần thêm thời gian để quét tất cả các điểm dữ liệu và việc này sẽ cần nhiều không gian bộ nhớ hơn để lưu trữ bộ dữ liệu Ngoài ra KNN không cần dựa trên các tham số khác nhau để tiến hành phân loại bộ dữ liệu, không đưa ra bắt kì kết luận cụ thể nào giữa biến đầu vào và biến mục tiêu, mà chỉ dựa trên khoảng cách giữa data point cần phân loại với data point đã phân loại trước đó Đây là một đặc điểm cực kì hữu ích gì hầu hết dữ liệu trên thế giới không thực sự tuân thủ theo bất kỳ giả định lý thuyết nào.

Các bước thực hiện thuật toán có thể đơn giản như sau :

• Chuẩn bị dữ liệu(dữ liệu đã được làm sạch, chuyển đổi,sẵn sàng đưa vào phân tích), chia tập dữ liệu ra làm 2: training và test

• Chọn một số K bất kỳ, K là một số nguyên, tức là số điểm dữ liệu đã phân loại có khoảng cách gần nhất với điểm dữ liệu chưa phân loại

• Tính toán khoảng cách giữa điểm dữ liệu chưa phân loại với các điểm dữ liệu đã phân loại

• Với kết quả có được sắp xếp theo thứ tự với giá trị khoảng cách từ bé nhất đến lớn nhất

• Chọn ra các điểm dữ liệu có giá trị khoảng cách bén nhất với điểm dữ liệu cần phân loại dựa trên K cho trước, Nếu K = 2 thì chọn ra 2 điểm dữ liệu gần nhất,…

• Tiếp theo xem xét giá trị của biến mục tiêu của các điểm dữ liệu gần nhất, chọn ra giá trị xuất hiện nhiều nhất và gán cho điểm dữ liệu chưa phân loại (Ví dụ : K = 3, trong đó có 2 điểm dữ liệu được phân loại A, điểm còn lại là B thì điểm dữ liệu chưa phân loại lúc này sẽ được phân loại là A

• Kiểm chứng là độ hiệu quả của model trên test data set và sử dụng các phương pháp đánh giá khác nhau

• Thay đổi giá trị K khác nhau và thực hiện lại quy trình để tìm K tối ưu nhất cho tập dữ liệu.

Thuật toán Decision Tree

Cây quyết định là một công cụ hỗ trợ quyết định sử dụng đồ thị giống như cây hoặc mô hình quyết định và hậu quả có thể của chúng bao gồm kết quả sự kiện và tiện ích của cơ hội Đó là một trong những cách để hiển thị một thuật toán Cây quyết định thường được sử dụng trong nghiên cứu hoạt động, đặc biệt trong phân tích quyết định để giúp và xác định một chiến lược rất có thể sẽ đạt được mục tiêu Nó cũng là một công cụ phổ biến trong học máy Một cây quyết định có thể dễ dàng được chuyển đổi thành một tập hợp các quy tắc bằng cách ánh xạ từ nút gốc sang các nút lá từng cái một Cuối cùng bằng cách tuân theo các quy tắc này, có thể đưa ra kết luận thích hợp.

Thuật toán Logistic Regression

Logistic Regression là một khái niệm thống kê được sử dụng để xác định trọng lượng của mối quan hệ giữa một biến phụ thuộc (thường được biểu thị bằng y) và một loạt các biến thay đổi khác (được gọi là các biến độc lập) Hai loại hồi quy cơ bản là hồi quy tuyến tính và hồi quy tuyến tính nhiều Ngoài ra, có một số phương pháp hồi quy phi tuyến tính được sử dụng để phân tích dữ liệu phức tạp hơn.

Machine Learning

- Học máy (Machine Learning): là một lĩnh vực của trí tuệ nhân tạo (AI) tập trung vào việc phát triển các phương pháp và thuật toán để cho máy tính có khả năng học hỏi từ dữ liệu và cải thiện hiệu suất của chúng trong việc thực hiện các nhiệm vụ cụ thể mà không cần lập trình cứng Mục tiêu của học máy là xây dựng các mô hình dự đoán hoặc phân loại thông qua việc phân tích dữ liệu và khám phá mẫu ẩn trong dữ liệu.

- Học máy: liên quan đến việc xác định cách máy tính có thể học từ dữ liệu và tự động cải thiện hiệu suất thông qua việc điều chỉnh các tham số của mô hình Quá trình này thường được thực hiện thông qua việc đào tạo mô hình trên tập dữ liệu huấn luyện và sau đó kiểm tra hiệu suất của mô hình trên tập dữ liệu kiểm tra.

- Học máy giám sát (Supervised Learning): Trong học máy giám sát, mô hình được đào tạo bằng cách cung cấp cho nó cặp dữ liệu đầu vào và đầu ra tương ứng Mục tiêu là để học cách ánh xạ từ dữ liệu đầu vào sang dữ liệu đầu ra.

- Học máy không giám sát (Unsupervised Learning): Trong học máy không giám sát, mô hình được đào tạo trên dữ liệu không có đầu ra tương ứng Mục tiêu là khám phá cấu trúc hoặc mẫu trong dữ liệu, chẳng hạn như phân cụm dữ liệu.

- Học máy bán giám sát (Semi-Supervised Learning): Kết hợp cả hai loại trên, trong học máy bán giám sát, một phần dữ liệu huấn luyện có đầu ra được sử dụng cùng với một phần dữ liệu không có đầu ra để huấn luyện mô hình.

- Học máy tăng cường (Reinforcement Learning): Trong học máy tăng cường, mô hình tương tác với một môi trường và học từ các phản hồi hoặc hậu quả của các hành động mà nó thực hiện.

XÂY DỰNG MÔ HÌNH

1 Quy trình xây dựng mô hình

Testing dữ liệu Training dữ liệu

2 Tổng quan các bước của mô hình

Data sources : Thu thập dữ liệu từ các nguồn khác nhau bên ngoài.

Làm sạch dữ liệu : Do dữ liệu đầu vào là từ nhiều nguồn dữ liệu (data sources) khác nhau,nên các dữ liệu này thường là không cùng định dạng hoặc định dạng chưa phù hợp để áp dụng các thuật toán machine learning, có thể chứa nhiều nhiễu (noise), hoặc bị thiếu giá trị dữ liệu của một số trường dữ liệu nào đó,… DO đó, chúng cần phải được làm sạch trong quá trình tiền xử lý dữ liệu (data preprocessing) nhằm có được dữ liệu “sạch” theo đó các thuật toán machine learning có thể được áp dụng lên các dữ liệu này để phân tích, khai phá.

Chọn lọc dữ liệu : Ta cần khảo sát để chọn lựa các dữ liệu phù hợp nhằm đem lại tính hiệu quả (effectiveness) cũng như tính hiệu suất (efficiency) tốt hơn cho các quá trình/thuật toán khám phá dữ liệu Các phương pháp loại bỏ các đối tượng dữ liệu nhiễu, loại bỏ các thuộc tính dư thừa (ví dụ loại bỏ các thuộc tính đầu vào có tương quan với nhau cao vì chúng thể hiện cùng xu hướng với mẫu tri thức (dữ liệu đầu ra) cần khám phá), loại bỏ các thuộc tính không đem lại giá trị cho quá trình khám phá

Tách dữ liệu : Sau khi đã chọn lọc ra được bộ dữ liệu sạch thì chúng em tiến hành chia bộ dữ liệu thành 2 phần, 80% để train còn 20% là để test,sử dụng 2 thuật toán machine learning là : KNN và Naive Bayes để đưa ra kết quả.

Kết luận : Từ đó đưa ra độ chính xác của bộ dữ liệu (Yes or No).

Phân loạiNo: Không bệnh

THỰC NGHIỆM VÀ ĐÁNH GIÁ

Phân tích dữ liệu

28 Đếm số lượng giá trị 0 trong từng cột cụ thể (age, sex, cp, trestbps, chol, fbs, restecg, thalach, exang, oldpeak, slope, ca, thal) của DataFrame data Mỗi cột được kiểm tra để xem có bao nhiêu giá trị 0 xuất hiện. missing_value (data[['age','sex','cp','trestbps','chol','fbs','restecg','thalach','exang','oldpeak','sl ope','ca','thal']]==0).sum() missing_value

Kết quả : age 0 sex 321 cp 503 trestbps 0 chol 0 fbs 890 restecg 507 thalach 0 exang 694 oldpeak 335 slope 78 ca 593 thal 7 d type: int64

Tạo bảng tóm tắt thống kê cơ bản của dữ liệu về từng cột trong dataframe như giá trị trung bình, độ lệch chuẩn, giá trị tối thiểu, giá trị tối đa và các phân vị data.describe()

Tính ma trận tương quan giữa các cột trong DataFrame data Ma trận tương quan giúp bạn hiểu mức độ tương quan (sự liên quan) giữa các cặp cột dữ liệu Giá trị tương quan nằm trong khoảng từ -1 đến 1, với:

Giá trị 1: Tương quan hoàn toàn dương (hai biến tăng cùng nhau).

Giá trị -1: Tương quan hoàn toàn âm (biến một tăng khi biến kia giảm).Giá trị gần 0: Không có tương quan hoặc tương quan yếu giữa hai biến.data.corr()

Trực quan hóa dữ liệu

plt.figure(figsize=( , ))20 10 sbn.heatmap(data.corr(), annot = True, cmap = 'terrain')

Chia bộ dữ liệu để thực hiện quá trình train(75%), test(25%) x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25,random_stat e ,stratify= y)

Tạo model để quá trình train được đảm báo và cho kết quả chính xác hơn model = Sequential() model.add(Conv1D(filters= 32, kernel_size= 2, activation = 'relu', input_shape = (14,1))) model.add(BatchNormalization())

#model.add(MaxPool1D()) - Pooling is bad for these kinds of data model.add(Dropout(0.2)) model.add(Conv1D(filters= 64, kernel_size= 2 , activation= 'relu')) model.add(BatchNormalization())

#model.add(MaxPool1D(1,1)) model.add(Dropout(0.5)) model.add(Conv1D(filters8, kernel_size= 2 , activation= 'relu')) model.add(BatchNormalization())

#model.add(MaxPool1D(1,1)) model.add(Dropout(0.5)) model.add(Conv1D(filters= 256, kernel_size= 2 , activation= 'relu')) model.add(BatchNormalization())

#model.add(MaxPool1D(1,1)) model.add(Dropout(0.5)) model.add(Flatten()) model.add(Dense(256,activation = 'relu')) model.add(Dropout(0.5)) model.add(Dense(1,activation = 'sigmoid')) model.summary()

Layer (type) Output Shape Param #

================================================================= conv1d_8 (Conv1D) (None, 13, 32) 96 batch_normalization_8 (Batc (None, 13, 32) 128 hNormalization) dropout_10 (Dropout) (None, 13, 32) 0

32 conv1d_9 (Conv1D) (None, 12, 64) 4160 batch_normalization_9 (Batc (None, 12, 64) 256 hNormalization) dropout_11 (Dropout) (None, 12, 64) 0 conv1d_10 (Conv1D) (None, 11, 128) 16512 batch_normalization_10 (Bat (None, 11, 128) 512 chNormalization) dropout_12 (Dropout) (None, 11, 128) 0 conv1d_11 (Conv1D) (None, 10, 256) 65792 batch_normalization_11 (Bat (None, 10, 256) 1024 chNormalization) dropout_13 (Dropout) (None, 10, 256) 0 flatten_2 (Flatten) (None, 2560) 0 dense_4 (Dense) (None, 256) 655616 dropout_14 (Dropout) (None, 256) 0 dense_5 (Dense) (None, 1) 257

Thực hiện train model history = model.fit(x_cnn_train, y_cnn_train, epochs= epochs, validation_data=(x_cnn_test, y_cnn_test), verbose= )1

26/26 [==============================] - 6s 42ms/step - loss: 0.9559 - accuracy: 0.7069 - val_loss: 0.6382 - val_accuracy: 0.5267

26/26 [==============================] - 1s 28ms/step - loss: 0.8084 - accuracy: 0.7808 - val_loss: 0.6732 - val_accuracy: 0.4809

26/26 [==============================] - 1s 29ms/step - loss: 0.7028 - accuracy: 0.7931 - val_loss: 0.5896 - val_accuracy: 0.5916

26/26 [==============================] - 1s 28ms/step - loss: 0.5625 - accuracy: 0.8067 - val_loss: 0.6362 - val_accuracy: 0.5802

26/26 [==============================] - 1s 29ms/step - loss: 0.5914 - accuracy: 0.8079 - val_loss: 0.4193 - val_accuracy: 0.8511

26/26 [==============================] - 1s 28ms/step - loss: 0.5768 - accuracy: 0.8067 - val_loss: 0.4484 - val_accuracy: 0.7634

26/26 [==============================] - 1s 27ms/step - loss: 0.4848 - accuracy: 0.8399 - val_loss: 0.4790 - val_accuracy: 0.7252

26/26 [==============================] - 1s 27ms/step - loss: 0.4468 - accuracy: 0.8214 - val_loss: 0.3927 - val_accuracy: 0.8130

26/26 [==============================] - 1s 28ms/step - loss: 0.4189 - accuracy: 0.8362 - val_loss: 0.3518 - val_accuracy: 0.8626

26/26 [==============================] - 1s 28ms/step - loss: 0.3588 - accuracy: 0.8621 - val_loss: 0.3801 - val_accuracy: 0.8359

26/26 [==============================] - 1s 32ms/step - loss: 0.4570 - accuracy: 0.8399 - val_loss: 0.3582 - val_accuracy: 0.8473

26/26 [==============================] - 1s 41ms/step - loss: 0.3810 - accuracy: 0.8559 - val_loss: 0.3272 - val_accuracy: 0.8664

26/26 [==============================] - 1s 48ms/step - loss: 0.3105 - accuracy: 0.8793 - val_loss: 0.3179 - val_accuracy: 0.8740

26/26 [==============================] - 1s 44ms/step - loss: 0.3276 - accuracy: 0.8867 - val_loss: 0.2988 - val_accuracy: 0.8779

26/26 [==============================] - 1s 44ms/step - loss: 0.2987 - accuracy: 0.8658 - val_loss: 0.2892 - val_accuracy: 0.8626

26/26 [==============================] - 1s 29ms/step - loss: 0.3026 - accuracy: 0.8805 - val_loss: 0.2690 - val_accuracy: 0.8779

26/26 [==============================] - 1s 28ms/step - loss: 0.2804 - accuracy: 0.8879 - val_loss: 0.2687 - val_accuracy: 0.8855

26/26 [==============================] - 1s 27ms/step - loss: 0.3045 - accuracy: 0.8744 - val_loss: 0.2393 - val_accuracy: 0.9008

- accuracy: 0.8941 - val_loss: 0.2409 - val_accuracy: 0.9008

Dự đoán đầu ra (predictions) dựa trên mô hình neural network đã được huấn luyện (mlp) và dữ liệu kiểm tra (x_test) Đây là bước sau khi bạn đã huấn luyện mô hình và muốn sử dụng nó để dự đoán kết quả trên tập kiểm tra.

Ta có độ chính xác tương đối mlp.score(x_test, y_test)

Logistic Regression

Phân tích dụ đoán from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report classifier = LogisticRegression(random_state = 0, penalty = 'l2') classifier.fit(X_train, y_train)

# Predicting Test Set y_pred = classifier.predict(X_test) from sklearn.metrics import confusion_matrix, accuracy_score,f1_score, precision_score, recall_score acc = accuracy_score(y_test, y_pred) prec = precision_score(y_test, y_pred) rec = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) cnf_matrix = confusion_matrix(y_test, y_pred) results = pd.DataFrame([['Logistic Regression', acc, prec, rec, f1]], columns = ['Model', 'Accuracy', 'Precision','Recall', 'F1 Score']) print(classification_report(y_test, y_pred)) cm_LR = confusion_matrix(y_test,y_pred) plt.subplot(4,3,1) plt.title("Logistic Regression Confusion Matrix") sns.heatmap(cm_LR,annot=True,cmap="Blues",fmt="d",cbarse, annot_kws={"size": 24})

Kết quả : accuracy : 0.8587786259541985 precision recall f1-score support

1 0.83 0.92 0.87 136 accuracy 0.86 262 macro avg 0.86 0.86 0.86 262 weighted avg 0.86 0.86 0.86 262

DecisionTree

- Tương tự ta có kết quả phân tích from sklearn.tree import DecisionTreeClassifier classifier = DecisionTreeClassifier(criterion='gini') classifier.fit(X_train, y_train)

# Predicting Test Set y_pred = classifier.predict(X_test) acc = accuracy_score(y_test, y_pred) prec = precision_score(y_test, y_pred) rec = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) model_results = pd.DataFrame([['Decision Tree', acc, prec, rec, f1]], columns = ['Model', 'Accuracy', 'Precision', 'Recall', 'F1 Score']) results = results.append(model_results, ignore_index = True) print(results) cm_DT = confusion_matrix(y_test,y_pred) plt.subplot(4,3,1) plt.title("DecisionTreeClassifier") sns.heatmap(cm_DT,annot=True,cmap="Blues",fmt="d",cbarse, annot_kws={"size": 24})

Model Accuracy Precision Recall F1 Score

Bayes

from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(X_train, y_train)

# Predicting Test Set y_pred = classifier.predict(X_test) acc = accuracy_score(y_test, y_pred) prec = precision_score(y_test, y_pred) rec = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) model_results = pd.DataFrame([['Naive Bayes', acc, prec, rec, f1]], columns = ['Model', 'Accuracy', 'Precision', 'Recall', 'F1 Score']) results = results.append(model_results, ignore_index = True) print(classification_report(y_test, y_pred)) cm_LR = confusion_matrix(y_test,y_pred) plt.subplot(4,3,1) plt.title("Naive Bayes Confusion Matrix") sns.heatmap(cm_LR,annot=True,cmap="Blues",fmt="d",cbarse, annot_kws={"size": 24})

Kết quả : accuracy : 0.8282442748091603 precision recall f1-score support

1 0.79 0.90 0.85 136 accuracy 0.83 262 macro avg 0.84 0.83 0.83 262 weighted avg 0.83 0.83 0.83 262

KNN

from sklearn import metrics from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors=5, weights='uniform',algorithm='auto', leaf_size0, p=2, metric='minkowski') classifier.fit(X_train, y_train)

# Predicting Test Set y_pred = classifier.predict(X_test) acc = accuracy_score(y_test, y_pred) prec = precision_score(y_test, y_pred) rec = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) model_results = pd.DataFrame([['K- Nearest Classifier', acc, prec, rec, f1]], columns = ['Model', 'Accuracy', 'Precision', 'Recall', 'F1 Score']) results = results.append(model_results, ignore_index = True) print(classification_report(y_test, y_pred)) print(metrics.confusion_matrix(y_test, y_pred)) cm_LR = confusion_matrix(y_test,y_pred) plt.subplot(4,3,1) plt.title("K- Nearest Neighbour Confusion Matrix") sns.heatmap(cm_LR,annot=True,cmap="Blues",fmt="d",cbarse, annot_kws={"size": 24})

Kết quả : accuracy : 0.8625954198473282 precision recall f1-score support

1 0.89 0.84 0.86 136 accuracy 0.86 262 macro avg 0.86 0.86 0.86 262 weighted avg 0.86 0.86 0.86 262

Bảng so sánh kết quả

# Calculate evaluation metrics acc = accuracy_score(y_test, y_pred) prec = precision_score(y_test, y_pred) rec = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred)

# Create a DataFrame for the model's results model_results = pd.DataFrame([['K- Nearest Classifier', acc, prec, rec, f1]], columns=['Model', 'Accuracy', 'Precision', 'Recall', 'F1 Score'])

# Append the model's results to the existing 'results' DataFrame results = results.append(model_results, ignore_index=True)

# Find the model with the highest F1 Score best_model = results.loc[results['F1 Score'].idxmax()]

# Display the comparison and the best model's results print("Comparison of Model Results:") print(results) print("\nModel with the Highest F1 Score:") print(best_model)

Model Accuracy Precision Recall F1 Score

Model with the Highest F1 Score:

Biểu đồ biểu diễn kết quả các thuật toán: Ảnh minh họa

KẾT LUẬN

Mô hình phát hiện bệnh tim mạch đã được phát triển bằng cách sử dụng bốn kỹ thuật mô hình phân loại Dự án này dự đoán những người mắc bệnh tim mạch bằng cách rút ra lịch sử y tế bệnh nhân dẫn đến bệnh tim gây tử vong từ bộ dữ liệu bao gồm tiền sử bệnh nhân của bệnh nhân như đau ngực, đường, huyết áp, v.v Hệ thống phát hiện bệnh tim này hỗ trợ bệnh nhân dựa trên thông tin lâm sàng của họ về họ được chẩn đoán mắc bệnh tim trước đĩ Các thuật tốn được sử dụng trong việc xây dựng mơ hình là Nạve-Bayes, KNN, Logistic Gegression và Decision Tree Độ chính xác của mô hình của chúng tôi là 86.25% Sử dụng nhiều dữ liệu đào tạo hơn đảm bảo cơ hội cao hơn của mô hình để dự đoán chính xác liệu người nhất định có bệnh tim hay không Bằng cách sử dụng những điều này, các kỹ thuật hỗ trợ máy tính, chúng tôi có thể dự đoán bệnh nhân nhanh chóng và tốt hơn và chi phí có thể giảm rất nhiều Có một số Khoa học và Kỹ thuật Vật liệu,giúp bệnh nhân cũng như các bác sĩ Do đó, kết luận, dự án này giúp chúng tôi dự đoán các bệnh nhân được chẩn đoán mắc bệnh tim bằng cách làm sạch bộ dữ liệu và áp dụng thuật toán KNN có được độ chính xác 86.25% trên mô hình của chúng tôi, tốt hơn các mô hình được áp dụng bằng Nạve-Bayes cĩ độ chính xác 82.82%, Logistic Gegression cĩ độ chính xác là 98.85%, Decision Tree có độ chính xác là 85.87% Mặc dù trong kết quả dự đoán độ chính xác của thuật toán Logistic Gegression khá cao nhưng không khả qua bằng thuật toán KNN Ngoài ra, kết luận rằng độ chính xác của KNN cao nhất so với 2 thuật toán còn lại và cho ra độ chính xác thực tế với bộ dữ liệu mà chúng em sử dụng, tức là độ chính xác 86.25%

- Xây dựng và đưa ra kết quả tối ưu cho người bệnh qua kết quả chẩn đoán

- Tìm hiểu thêm các thuật toán khác (tăng độ chính xác và hiệu quả của mô hình)

- Tạo giao diện người dùng

Link Code : https://drive.google.com/drive/folders/1EZKt5Xs9lbsgK7lnbMtoSnKsKReP36Xk?usp=sharing

Ngày đăng: 04/09/2024, 17:49