Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 88 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
88
Dung lượng
1,76 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUY NHƠN LÊ THỊ DƯ KẾT HỢP PCA VÀ KMEANS VỚI HỒI QUY LOGISTIC TRONG ỨNG DỤNG TIÊN LƯỢNG BỆNH TIỂU ĐƯỜNG Chuyên ngành : Khoa học máy tính Mã số: 8.48.01.01 NGƯỜI HƯỚNG DẪN: TS LÊ XUÂN VINH LỜI CẢM ƠN Trước tiên, xin gửi lời biết ơn sâu sắc đến thầy TS Lê Xuân Vinh dành nhiều thời gian tâm huyết hướng dẫn thực luận văn tốt nghiệp Sự tận tình hướng dẫn thầy nguồn động viên lớn suốt thời gian tìm hiểu, nghiên cứu hồn thành luận văn Tơi xin bày tỏ lịng biết ơn đến quý thầy cô khoa công nghệ thông tin trường Đại học Quy Nhơn giảng dạy chia sẻ kinh nghiệm học tập, nghiên cứu đến với tập thể lớp thân Trong suốt trình học tập nghiên cứu, góp ý, chia sẻ, động viên tất thành viên tập thể lớp giúp tơi hồn thành tốt khóa học, xin cảm ơn tất anh chị bạn Tôi xin gửi lời biết ơn đến hội đồng sư phạm trường THPT Số Tuy Phước tạo điều kiện thuận lợi cho tơi có thời gian học tập bồi dưỡng nâng cao kiến thức chuyên mơn Cuối cùng, tơi gửi lịng biết ơn tới thành viên gia đình tạo điều kiện tốt để lựa chọn phát triển đường học tập Một lần nữa, tơi xin chân thành cảm ơn! Quy Nhơn, ngày tháng Học viên Lê Thị Dư năm 2020 MỤC LỤC LỜI CẢM ƠN DANH MỤC HÌNH VẼ VÀ CÁC BẢNG MỞ ĐẦU 1 Lý chọn đề tài Đối tượng phạm vi nghiên cứu 3 Phương pháp nghiên cứu Mục tiêu nội dung luận văn Ý nghĩa khoa học thực tiễn Bố cục luận văn: Chương 1: MỘT SỐ KIẾN THỨC LÝ THUYẾT CƠ SỞ 1.1 Giới hiệu Machine learning 1.1.1 Khái niệm Machine learning 1.1.2 Phân loại kỹ thuật học máy: 1.1.3 Các ứng dụng Machine learning 1.1.4Các bước thực học máy 1.2 Bài toán phân lớp liệu 10 1.2.1 Phân lớp liệu 10 1.2.2 Một số ứng dụng phân lớp tiêu biểu: 11 1.2.3 Tiến trình phân lớp liệu 12 1.3 Giới thiệu toán phân lớp cho bệnh tiểu đường 14 1.3.1 Giới thiệu bệnh tiểu đường 14 1.3.2 Những kết nghiên cứu phân lớp cho liệu bệnh tiểu đường 15 1.3.3 Phương pháp luận nghiên cứu: 16 1.3.4 Công cụ hỗ trợ khai phá liệu 16 1.3.5 Giới thiệu liệu tiểu đường 17 KẾT LUẬN CHƯƠNG 18 Chương 2: THUẬT TOÁN HỒI QUY LOGISTIC, PCA, K-MEANS 19 2.1 Thuật toán hồi quy Logistic( Logistic Regression) 19 2.1.1 Định nghĩa 19 2.1.2 Ứng dụng thuật toán hồi quy Logistic 20 2.1.3 Hàm Sigmoid sử dụng hồi quy Logistic 21 2.1.4 Xây dựng thuật toán hồi quy Logistic nhị phân 22 2.1.5 Ví dụ ứng dụng thuật tốn hồi quy logistic 26 2.2 Thuật toán Principal Component Analysis (PCA) 29 2.2.1 Vai trò thuật toán PCA toán phân lớp 29 2.2.2 Bài toán giảm chiều liệu 30 2.2.3 Cơ sở toán học PCA 30 2.2.4 Các bước thực phương pháp PCA 31 2.2.5 Ví dụ áp dụng thuật tốn mơ ứng dụng 32 2.3 Thuật toán phân cụm liệu K-Means 38 2.3.1 Phân cụm liệu 38 2.3.2 Ứng dụng phân cụm: 40 2.3.3 Thuật toán phân cụm K-Means 40 2.3.4 Các bước thực thuật toán K-Means 42 2.3.5 Ví dụ minh họa triển khai thuật toán K-Means 42 KẾT LUẬN CHƯƠNG 45 Chương 3: SỰ KẾT HỢP BA THUẬT TOÁN PCA, K-MEANS VÀ HỒI QUY LOGISTIC ỨNG DỤNG TIÊN LƯỢNG BỆNH TIỂU ĐƯỜNG 46 3.1 Chuẩn bị liệu tiểu đường 46 3.2 Tiền xử lí liệu 47 3.3 Ứng dụng thuật toán hồi quy Logistic Regression Classifier phần mềm python để dự đoán bệnh tiểu đường cho bệnh nhân 48 3.4 Kết hợp thuật toán PCA hồi quy logistic vào ứng dụng tiên lượng bệnh tiểu đường 51 3.4.1 Thuật toán PCA 51 3.4.2 Kết hợp hai thuật toán PCA-Logistic 57 3.5 K_Means hồi quy Logistic 59 3.5.1 Phát loại bỏ liệu ngoại lai(outliers) bỡi thuật toán phân cụm K-Means 59 3.5.2 Thực thuật toán hồi quy Logistic tập liệu K-Means 63 3.6 Cải thiện thuật toán hồi quy Logistic kết hợp PCA K-Means 64 KẾT LUẬN CHƯƠNG 67 KẾT LUẬN 69 DANH MỤC TÀI LIỆU THAM KHẢO 71 PHỤ LỤC QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN THẠC SĨ (bản sao) DANH MỤC CÁC BẢNG Bảng 3.1: Thống kê độ xác kết thuật tốn 67 DANH MỤC CÁC HÌNH Hình 2.1: Phân ảnh phân loại đối tượng thành hai nhóm 20 Hình 2.2: Đồ thị hàm sigmoid biểu diễn python 22 Hình 2.3: Hình ảnh ví dụ phân cụm liệu thuật tốn K- Means 39 Hình 3.1: Hình ảnh mơ tả trực quan biểu diễn giá trị ma trận nhầm lẫn 50 Hình 3.2: Đồ thi phân tích thàn phần PCA 57 Hình 3.3 Mơ tả outlier liệu chiều 59 Hình 3.4: Đồ thị cluster 62 Hình 3.5: Đồ thị biểu diễn liệu thuật toán PCA 65 Hình 3.6: Đồ thị cluster để xác định ngưỡng outliers 66 Hình 3.7: Hình vẽ kết loại bỏ outliers dùng K-Means 66 Pl-1 MỞ ĐẦU Lý chọn đề tài Tiểu đường bệnh biểu tăng đường máu mãn tính thiếu insulin, bệnh khơng truyền nhiễm có ảnh hưởng nghiêm trọng sống người Nó xem bệnh hàng đầu có khả gây chết cho người Nhiều quốc gia phải đối mặt với phát triển nhanh chóng trẻ hóa bệnh tiểu đường Khi mắc bệnh tiểu đường làm cho số đường huyết cao mức bình thường Nguyên nhân tiết insulin bị khiếm khuyết ảnh hưởng sinh học bị suy yếu hai Bệnh tiểu đường dẫn đến tổn thương mãn tính rối loạn chức mô khác nhau, đặc biệt mắt, thận, tim, mạch máu dây thần kinh tim mạch, hạ đường huyết, nhiễm trùng dẫn đến hoại tử tử vong Theo tổ chức Y tế giới (WHO) gọi bệnh tiểu đường "Cơn sóng thần tàn phá sức khỏe toàn cầu" tỷ lệ mắc bệnh biến chứng bệnh ngày tăng cao Nếu khơng có biện pháp ngăn chặn hiệu dự báo đến năm 2040, tồn giới có 642 triệu người mắc bệnh tiểu đường, có triệu người mắc bệnh nước ta [7] Ngoài ra, 46.5% người mắc bệnh tiểu đường chưa chẩn đốn Điều nói lên 10 người trưởng thành tương lai có người mắc bệnh tiểu đường Vậy, bệnh tiểu đường ngày trẻ hóa tình trạng báo động nên cần phải ý nhiều đến Nguyên nhân kết hầu hết người bệnh khơng nhận tình trạng sức khỏe họ thời điểm sớm Trong buổi gặp trao đổi thông tin với báo chí Hội trại dinh dưỡng đái tháo đường tên gọi “Chung tay kiểm soát đẩy lùi bệnh đái tháo đường” lần III - năm 2018 (Diabetes Camp - 2018) diễn vào chiều 23/10, PGS.TS Tạ Văn Bình - Nguyên giám đốc Bệnh viện Nội tiết Trung ương, nguyên Viện trưởng Viện Đái tháo đường Rối loạn chuyển hóa (Đại học Y Hà Nội), Chủ Pl-2 tịch Hội người giáo dục bệnh đái tháo đường Việt Nam nhấn mạnh: “Đái tháo đường thực bệnh có nhiều biến chứng nguy hiểm, việc tầm soát, phát sớm bệnh đái tháo đường giúp cho trình điều trị đạt hiệu cao nhất, kiểm soát, ngăn ngừa biến chứng nguy hiểm” [8] Người mắc bệnh tiểu đường có sống khỏe mạnh hạnh phúc họ kiểm sốt bệnh cách thông qua dùng thuốc kết hợp với chế độ ăn uống lành mạnh giám sát bác sỹ Vì vậy, phát sớm đóng vai trị quan trọng chẩn đốn bệnh tiểu đường giảm đáng kể bệnh biến chứng tiểu đường mang lại Trong khoa học y tế, chẩn đốn tình trạng sức khỏe nhiệm vụ khó khăn Đặc biệt, chẩn đốn bệnh tiểu đường thách thức quan trọng nước phát triển phát triển Thực tế cho thấy, lịch sử khám bệnh bệnh nhân kết xét nghiệm cần thiết để chẩn đoán bệnh cụ thể chẩn đoán dựa kinh nghiệm bác sĩ Tuy nhiên, chẩn đoán bệnh bác sĩ kinh nghiệm chẩn đốn có kết khơng xác tình trạng sức khỏe bệnh nhân Do đó, làm để chẩn đốn phân tích bệnh tiểu đường nhanh chóng xác chủ đề đáng để nghiên cứu Chẩn đốn sớm hơn, kiểm sốt dễ dàng nhiều Để có kết chẩn đốn mong muốn, ngồi việc dựa vào kinh nghiệm cao bác sỹ cần phải sử dụng công nghệ thông tin tiên tiến ứng dụng khai thác liệu lĩnh vực phù hợp cho việc Khai thác liệu cung cấp khả trích xuất khám phá mẫu chưa biết, ẩn từ kho lưu trữ liệu lớn Những mẫu hỗ trợ y tế chẩn đoán định Với phát triển phương pháp Machine Learning, khả vận dụng phương pháp để tìm giải pháp cho vấn đề khả thi, khai thác liệu hỗ trợ dự đoán tiên lượng bệnh nhân bị tiểu đường Hơn nữa, Pl-3 dự đoán bệnh sớm, điều trị cho tích cực cho bệnh nhân trước trở nên nguy kịch Khai thác liệu có khả trích xuất kiến thức ẩn từ lượng lớn liệu liên quan đến bệnh tiểu đường Gần đây, có nhiều nhà nghiên cứu giới phát triển mơ hình dự đốn khác cách sử dụng khai thác liệu để dự đoán chẩn đoán cho bệnh nhân tiểu đường Tuy nhiên, hầu hết nghiên cứu họ gặp trở ngại bước tiền xử lí liệu bị giới hạn số liệu có sẵn cho dự đốn kết phân loại cuối Để khắc phục hạn chế này, đề xuất nghiên cứu với đề tài: “Kết hợp PCA K-Means với hồi quy Logistic ứng dụng tiên lượng bệnh tiểu đường” Đối tượng phạm vi nghiên cứu 2.1 Đối tượng nghiên cứu lý thuyết: Tìm hiểu nội dung thuật tốn PCA, K-Means hồi quy Logistic từ xây dựng mơ hình kết hợp ba thuật tốn để tiên lượng kết dự đoán bệnh tiểu đường cho bệnh nhân 2.2 Đối tượng nghiên cứu thực tiễn: Các số sinh hóa xét nghiệm bệnh nhân khám bệnh tiểu đường 2.3 Phạm vi nghiên cứu: Dữ liệu bệnh nhân Bệnh viện đa khoa tỉnh Bình Định từ tháng năm 2019 đến tháng năm 2020 Phương pháp nghiên cứu 3.1 Phương pháp nghiên cứu tài liệu, tổng hợp hệ thống hóa: Tìm kiếm, thu thập tài liệu từ cơng trình nghiên cứu khoa học công bố báo đăng hội nghị, tạp chí thơng tin từ website ứng dụng thuật toán học máy tốn phân lớp liệu Phân tích, tổng hợp rút trích nội dung cần thiết để giải yêu cầu 3.2 Phương pháp thực nghiệm khoa học: Pl-4 Sử dụng liệu thu thập từ Bệnh Viện Đa Khoa Tỉnh Bình Định số sinh hóa xét nghiệm bệnh nhân tiểu đường cho trình thử nghiệm, đánh giá Thực việc thử nghiệm, đánh giá thuật toán đề xuất luận văn nhằm đánh giá tính hiệu độ xác q trình dự đoán đề xuất so với kết thực nghiệm cơng trình nghiên cứu có trước Mục tiêu nội dung luận văn Mục tiêu nghiên cứu chúng tơi phân tích mơ hình, chứng tỏ kết dự báo xác kết hợp thuật toán phân cụm K-Means hồi quy Logistic Vai trị phân tích thành phần (PCA) nhằm giảm chiều kích thước tập liệu bảo tồn thơng tin Sau thuật tốn KMeans sử dụng để loại bỏ liệu ngoại lai Sau sử dụng hồi quy Logistic để xây dựng mơ hình phân lớp dự báo Sự kết hợp thuật tốn cải thiện hiệu mơ hình phân lớp Ý nghĩa khoa học thực tiễn 5.1 Ý nghĩa khoa học: Với kết hợp ứng dụng ngành khoa học máy tính y khoa, đề tài đóng góp phương pháp thực nghiệm hỗ trợ ngành y học việc chẩn đoán bệnh cho bệnh nhân Kết thu thực đề tài hỗ trợ cho cán y tế chẩn đoán bệnh tiểu đường cho bệnh nhân 5.2 Ý nghĩa thực tiễn: Chẩn đoán phát bệnh q trình, địi hỏi cán y tế phải có trình độ chun mơn cao cần phải có đầy đủ trang thiết bị y tế hỗ trợ chẩn đốn xác tình trạng bệnh bệnh nhân Việc phát sớm xác bệnh đưa hướng điều trị đúng, khắc phục biến chứng bệnh gây cho bệnh nhân Điều góp phần giảm thiệt hại tinh thần kinh tế cho người bệnh, góp phần thúc đẩy kinh tế Pl-68 vào triển khai mơ hình liệu thực tế áp dụng thực tiễn Chúng phân tích đánh giá đầu mơ hình số liệu cụ thể thể qua bảng nêu Trường hợp 1: Nếu sử dụng thuật toán hồi quy Logistic tập liệu chuẩn hóa, kết đạt mơ hình tốt Tuy nhiên, tập liệu tương đối nhỏ có thuộc tính ảnh hưởng nên kết đạt khả quan Nếu ứng dụng trường hợp vào tập liệu lớn hơn, chúng tơi ngại liệu outliers số chiều liệu tác động nhiều đến kết dự đốn Từ kết chẩn đốn chúng tơi xác Trường hợp 2: Chúng định thử nghiệm kết hợp thuật tốn PCA vào mơ hình dự đốn hồi quy Logistic mặc kết thấp Tuy nhiên, ưu điểm thuật toán PCA giảm chiều liệu cách nén tập liệu lại Điều này, xét mặt tối ưu thời gian, chúng tơi có nhiều hy vọng giảm lượng thời gian đáng kể thực mơ hình chúng tơi giảm lượng lớn liệu làm ảnh hưởng đến kết dự đoán Trường hợp 3: Một kết mang lại thuật tốn thật lý tưởng Độ xác dự đoán gần với kết thực tế sau thực loại bỏ liệu outliers Tuy nhiên, thực thuật toán tập liệu lớn tốn thời gian Trường hợp 4: Chúng tin thử nghiệm thuật toán kết hợp nêu cải tiến kết dự đoán hồi quy Logistic hiệu thời gian thực độ xác mơ hình Pl-69 KẾT LUẬN Qua thời gian học tập, nghiên cứu hồn thành luận văn, chúng tơi đạt kết sau: Thứ nhất, nắm số kiến thức học máy, hiểu quy trình học máy để ứng dụng vào thực tiễn Thứ hai, biết cài đặt chương trình annaconda, sử dụng phần mềm sublime Text triển khai thuật tốn thực nghiệm Thứ ba, phần trình bày luận văn nêu với mục đích xây dựng mơ hình hiệu để dự đoán bệnh tiểu đường cho bệnh nhân Sau nghiên cứu chúng tơi đề xuất mơ hình mới, bao gồm kết hợp PCA để giảm kích thước liệu, phân cụm K-Means để phát loại bỏ liệu ngoại lai, cuối dùng hồi quy Logistic để phân loại Thông qua kết thực nghiệm chúng tơi mơ hình cải tiến thuật toán phân loại hồi quy Logistic để dự đốn bệnh tiểu đường thực thơng qua việc kết hợp hai thuật tốn PCA K-Means (từ 0.92% lên 0.96%) Kết sử dụng thuật toán cải tiến hồi quy Logistic cách kết hợp PCA K-Means cho độ xác cao Qua cho thấy q trình cải tiến thuật tốn hồi quy Logistic xây dựng thành công Điều giúp cho bạn đọc có lựa chọn tập liệu Cuối cùng, tính đạt đề tài nghiên cứu PCA góp phần nâng cao khả phân cụm liệu cho K-Means làm cho kết phân cụm liệu đạt tốt Kết tốt cho liệu đầu vào cho thuật toán kết hợp sau Điểm hạn chế đề tài chúng tơi là: tập liệu thu thập cịn Vì thế, chúng tơi chưa đánh giá hết hiệu suất mơ hình cải tiến Hy vọng bạn đọc ứng dụng mơ hình đề xuất Pl-70 tập liệu lớn nhằm đưa nhược điểm hướng khắc phục để đề tài phát triển đưa vào ứng dụng rộng rãi Pl-71 DANH MỤC TÀI LIỆU THAM KHẢO [1] TS Lê Thị Kim Nga - Đại học Quy Nhơn - Giáo trình xử lý ảnh, 2019 [2] TS Lê Xuân Vinh - Đại học Quy Nhơn - Giáo trình Machine Learning, 2019 [3] A Iyer, S Jeyalatha, R Sumbaly, Diagnosis of diabetes using classification mining techniques, Int J Data Min Knowl Manag Process (IJDKP), (1) (2015) [4] J Han, M Kamber, J Pei, Data mining concepts and techniques, (3rd), Morgan Kaufmann Publishers, USA (2012) [5] B.M Patil, R.C Joshi, Toshniwal Durga, Hybrid prediction model for Type-2 diabetic patients, Expert Syst Appl, 37 (2010), pp 8102-8108 [6] J Novakovic, S Rankov, Classification performance using principal component analysis and different value of the ratio R, Int J Comput Commun Control, Vol VI (2) (2011), pp 317-327, ISSN 1841-9836, E-ISSN 1841-9844 [7]http://daithaoduong.kcb.vn/tinh-hinh-dai-thao-duong/ [8]http://dantri.com.vn/suc-khoe/du-bao-se-co-tren-600-trieu-nguoi-macbenh-tieu-duong-vao-nam-2030-20181024102930774.htm [9]https://www.diabetesdaily.com/learn-about-diabetes/what-isdiabetes/how-many-people-have-diabetes/ Pl-72 PHỤ LỤC Chương trình phân tích thành phần PCA import numpy as np import pandas as pd from sklearn.decomposition import PCA import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler df = pd.read_csv(filepath_or_buffer='D:\python2\dulieu.csv', header=None, sep=',') print("\nTAB_PID") print(df) df = df.drop(df.index[[0]], axis=0) df.dropna(how="all", inplace=True) ar_x = df.iloc[:,0:3].values ar_y = df.iloc[:,3].values ar_x_std = StandardScaler().fit_transform(ar_x) df_std = pd.DataFrame(ar_x_std, columns=['Tuoi', 'GioiTinh', 'Glucose']) df_std['ChanDoan'] = ar_y print("\ndf_std") print(df_std) df_std.to_csv(r'D:\python2\dulieu_chuanhoa.csv') cov_mat= np.cov(ar_x_std, rowvar=False) print("\ncov_mat") print(cov_mat) cov_mat = np.cov(ar_x_std.T) eig_vals, eig_vecs = np.linalg.eig(cov_mat) Pl-73 print("\neigen vectors, eigen values") print('vectors \n%s' %eig_vecs) print('values \n%s' %eig_vals) eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in range(len(eig_vals))] eig_pairs.sort() eig_pairs.reverse() print("\neigen pairs") print(eig_pairs) for i in eig_pairs: print(i[0]) tot = sum(eig_vals) print("\nev_total: ",tot) var_exp = [(i / tot)*100 for i in sorted(eig_vals, reverse=True)] print(var_exp) cum_var_exp = np.cumsum(var_exp) print(cum_var_exp) print("2 dimensions: ",var_exp[0:2]) print("2 dimentions: ",sum(var_exp[0:2])) print("\nselected eigen pairs") print(eig_pairs[0][1]) print(eig_pairs[1][1]) print("\nmat_w") mat_w = np.hstack((eig_pairs[0][1].reshape(3,1), eig_pairs[1][1].reshape(3,1))) print(mat_w) mat_y = ar_x_std.dot(mat_w) Pl-74 df_principle = pd.DataFrame(data = mat_y , columns = ['pc1', 'pc2']) print("\ndf_principle") print(df_principle) df_final = pd.concat([df_principle, pd.DataFrame(ar_y,columns = ['ChanDoan'])], axis = 1) print("\ndf_final") print(df_final) df_final.to_csv(r'D:\python2\dulieu_chuanhoa_pca.csv') max = 1000 plt.subplot(2,2,1) plt.title('PCA [0:1]') for i in df_final.index: if i < max: if df_final.iloc[i,2] == '0': plt.scatter(df_final.iloc[i,0], df_final.iloc[i,1], s = 20, c = 'g') elif df_final.iloc[i,2] == '1': plt.scatter(df_final.iloc[i,0], df_final.iloc[i,1], s = 20, c = 'b') plt.subplot(2,2,2) plt.title('PCA [0:2]') for i in df_final.index: if i < max: if df_final.iloc[i,2] == '0': plt.scatter(df_final.iloc[i,0], df_final.iloc[i,2], s = 20, c = 'g') elif df_final.iloc[i,2] == '1': plt.scatter(df_final.iloc[i,0], df_final.iloc[i,2], s = 20, c = 'b') plt.subplot(2,2,3) plt.title('PCA [1:2]') Pl-75 for i in df_final.index: if i < max: if df_final.iloc[i,2] == '0': plt.scatter(df_final.iloc[i,1], df_final.iloc[i,2], s = 20, c = 'g') elif df_final.iloc[i,2] == '1': plt.scatter(df_final.iloc[i,1], df_final.iloc[i,2], s = 20, c = 'b') plt.show() Chương trình phân cụm loại bỏ outliers K-Means import pandas as pd import numpy as np import seaborn as sns import scipy as ss from sklearn.cluster import KMeans import matplotlib.pyplot as plt from sklearn.metrics import accuracy_score df_pid = pd.read_csv('D:\python2\dulieu_chuanhoa.csv') print("\nTAB_PID") print(df_pid) df_X = df_pid.drop(['ChanDoan'], axis=1 df_X = df_X.iloc[:, 1:] df_y = df_pid['ChanDoan'] print("\nbảng tách Y") print(df_X) kmeans = KMeans(n_clusters=2) kmeans.fit(df_X) df_pid_clustered = kmeans.predict(df_X) df_pid_transformed = kmeans.transform(df_X) Pl-76 df_proc = pd.DataFrame() df_proc['ChanDoan_true'] = df_y ChanDoan_true = ChanDoan_false = for i in df_proc.index: if df_proc.iloc[i,0] == df_proc.iloc[i,1]: ChanDoan_true = ChanDoan_true + else: ChanDoan_false = ChanDoan_false + kmeans_acc_per = ChanDoan_true / (ChanDoan_true + ChanDoan_false) df_pid_clustered_2 = [] for x in df_pid_clustered: if x == 1: df_pid_clustered_2.append(0) elif x == 0: df_pid_clustered_2.append(1) df_pid_clustered_2 = np.array(df_pid_clustered_2) kmeansclustercenters = kmeans.cluster_centers_ print("\nKmeans_Cluster_Centers:") print(kmeansclustercenters) if kmeans_acc_per < 0.5: df_pid_clustered = df_pid_clustered_2 kmeans_acc_per = - kmeans_acc_per kmeansclustercenters = np.flip(kmeansclustercenters, 0) df_pid_transformed = np.flip(df_pid_transformed, 1) print("\nKmeans_Cluster_Centers:") Pl-77 print(kmeansclustercenters) print("\nKmeans_Accuracy_Percent:") print(kmeans_acc_per) print("\nKmeans_Transformed:") print(df_pid_transformed) df_proc['cluster'] = df_pid_clustered d00 = [] d11 = [] for i in df_X.index: if df_proc.iloc[i,0] == 0: d00.append(df_pid_transformed[i][0]) d11.append(-1) else: d11.append(df_pid_transformed[i][1]) d00.append(-1) df_proc['d00'] = d00 df_proc['d11'] = d11 d00 = [x for x in d00 if x >= 0] d11 = [x for x in d11 if x >= 0] d00.sort() plt.subplot(2,1,1) plt.title('Cluster 1') plt.plot(d00) d11.sort() plt.subplot(2,1,2) plt.title('Cluster 2') plt.plot(d11) Pl-78 plt.show() d0_thr = 2.1 d1_thr = 1.35 inv = np.zeros((len(df_X),1)) for i in df_X.index: if df_proc.iloc[i,0] == 0: if df_proc.iloc[i,2] > d0_thr: inv[i] = for i in df_X.index: if df_proc.iloc[i,0] == 1: if df_proc.iloc[i,3] > d1_thr: inv[i] = df_proc['inv'] = inv print("\nProcessing_Table_with_Invalid_Tags:") print(df_proc.head(10)) print("\nPID_Before:") print(df_X.shape) df_X_kmeans = df_X df_y_kmeans = df_y count = len(df_X) count_dropped = plot_proc = df_proc inv_index = for i in df_proc.index: if df_proc.iloc[i,inv_index] == 1: count_dropped = count_dropped + df_X_kmeans = df_X_kmeans.drop([i], axis=0) Pl-79 df_y_kmeans = df_y_kmeans.drop([i], axis=0) plot_proc = plot_proc.drop([i], axis=0) print("\nPID_After:") print(df_X_kmeans.shape) print('\nDropped:', count_dropped, "/", count, '(', 100 * count_dropped / count, "%)") df_final = df_X_kmeans df_final = pd.concat([df_final, df_y_kmeans], axis = 1) df_final.index = range(len(df_final)) df_final.to_csv(r'D:\python2\dulieu_chuanhoa_kmeans.csv') plot_X = df_X plot_X = pd.concat([plot_X, pd.DataFrame(data = df_pid_clustered, columns = ['cluster'])], axis = 1) plot_X_kmeans = df_X_kmeans plot_X_kmeans = pd.concat([plot_X_kmeans, pd.DataFrame(data = plot_proc['cluster'], columns = ['cluster'])], axis = 1) plot_X_kmeans.index = range(len(plot_X_kmeans)) print(plot_X_kmeans) count_dim = [0,1] max = 1000 for i in count_dim: for j in range(i + 1, len(count_dim) + 1): plt.suptitle('Kmeans [' + str(i) + ':' + str(j) + ']', fontsize = 20) plt.subplot(1,2,1) plt.xlim(-3,3) plt.ylim(-2,4) for k in plot_X.index: Pl-80 if k < max: if int(plot_X.iloc[k,3]) == 0: plt.scatter(plot_X.iloc[k,i], plot_X.iloc[k,j], s=20, c='green') else: plt.scatter(plot_X.iloc[k,i], plot_X.iloc[k,j], s=20, c='blue') plt.scatter(kmeansclustercenters[:, i], kmeansclustercenters[:, j], s=100, c=['#004c00','#00004c']) plt.subplot(1,2,2) plt.xlim(-3,3) plt.ylim(-2,4) for l in plot_X_kmeans.index: if l < max: if int(plot_X_kmeans.iloc[l,3]) == 0: plt.scatter(plot_X_kmeans.iloc[l,i], plot_X_kmeans.iloc[l,j], s=20, c='green') else: plt.scatter(plot_X_kmeans.iloc[l,i], plot_X_kmeans.iloc[l,j], s=20, c='blue') plt.scatter(kmeansclustercenters[:, i], kmeansclustercenters[:, j], s=100, c=['#004c00','#00004c']) plt.show() Chương trình hồi quy Logistic kết hợp PCA K-Means import pandas as pd import numpy as np import seaborn as sns from sklearn.cluster import KMeans from sklearn.linear_model import LogisticRegression Pl-81 import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score from sklearn.metrics import classification_report from sklearn import metrics col_names = ['Tuoi', 'GioiTinh', 'Glucose','chandoan'] df_pid = pd.read_csv('D:\python2\dulieu_chuanhoa_PCA_kmeans.csv') df_pid.head() print("\npid") print(df_pid) df_X = df_pid.drop(['ChanDoan'], axis=1) df_X = df_X.iloc[:, 1:] df_y = df_pid['ChanDoan'] print("\n tách Y") print(df_X) train_X, test_X, train_y, test_y = train_test_split(df_X, df_y, test_size=0.2) logreg = LogisticRegression() logreg.fit(train_X, train_y) y_pred=logreg.predict(test_X) cnf_matrix = metrics.confusion_matrix(test_y, y_pred) cnf_matrix print("\nARRAY") print(cnf_matrix) print(classification_report(test_y, y_pred)) class_names=[0,1] # name of classes fig, ax = plt.subplots() Pl-82 tick_marks = np.arange(len(class_names)) plt.xticks(tick_marks, class_names) plt.yticks(tick_marks, class_names) sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g') ax.xaxis.set_label_position("top") plt.tight_layout() plt.title('Confusion matrix', y=1.1) plt.ylabel('Actual label') plt.xlabel('Predicted label') plt.show print("Accuracy:",metrics.accuracy_score(test_y, y_pred)) print("Precision:",metrics.precision_score(test_y, y_pred)) print("Recall:",metrics.recall_score(test_y, y_pred)) y_pred_proba = logreg.predict_proba(test_X)[::,1] fpr, tpr, _ = metrics.roc_curve(test_y, y_pred_proba) auc = metrics.roc_auc_score(test_y, y_pred_proba) plt.plot(fpr,tpr,label="data 1, auc="+str(auc)) plt.legend(loc=4) plt.show() ... 3.3 Ứng dụng thuật toán hồi quy Logistic Regression Classifier phần mềm python để dự đoán bệnh tiểu đường cho bệnh nhân 48 3.4 Kết hợp thuật toán PCA hồi quy logistic vào ứng dụng tiên lượng bệnh. .. toán K-Means 42 KẾT LUẬN CHƯƠNG 45 Chương 3: SỰ KẾT HỢP BA THUẬT TOÁN PCA, K-MEANS VÀ HỒI QUY LOGISTIC ỨNG DỤNG TIÊN LƯỢNG BỆNH TIỂU ĐƯỜNG 46 3.1 Chuẩn bị liệu tiểu đường 46... 2.1.2 Ứng dụng thuật toán hồi quy Logistic 20 2.1.3 Hàm Sigmoid sử dụng hồi quy Logistic 21 2.1.4 Xây dựng thuật toán hồi quy Logistic nhị phân 22 2.1.5 Ví dụ ứng dụng thuật tốn hồi quy