(Luận văn) 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

88 3 0
(Luận văn) 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

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC QUY NHƠN LÊ THỊ DƯ lu an KẾT HỢP PCA VÀ KMEANS VỚI HỒI QUY LOGISTIC va n TRONG ỨNG DỤNG TIÊN LƯỢNG BỆNH TIỂU ĐƯỜNG p ie gh tn to w Chuyên ngành : Khoa học máy tính d oa nl Mã số: 8.48.01.01 u nf va an lu ll NGƯỜI HƯỚNG DẪN: TS LÊ XUÂN VINH oi m z at nh z m co l gm @ an Lu n va ac th si 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 tơi Trong suốt q trình học tập lu nghiên cứu, góp ý, chia sẻ, động viên tất thành viên tập thể an n va lớp giúp tơi hồn thành tốt khóa học, tơi xin cảm ơn tất anh chị tn to bạn gh Tôi xin gửi lời biết ơn đến hội đồng sư phạm trường THPT Số Tuy p ie 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 w cao kiến thức chuyên mơn oa nl Cuối cùng, tơi gửi lịng biết ơn tới thành viên gia đình tạo d điều kiện tốt để lựa chọn phát triển đường học tập lu Quy Nhơn, ngày tháng năm 2020 Học viên ll u nf va an Một lần nữa, xin chân thành cảm ơn! m oi Lê Thị Dư z at nh z m co l gm @ an Lu n va ac th si 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 lu Mục tiêu nội dung luận văn an va Ý nghĩa khoa học thực tiễn n Bố cục luận văn: 1.1 Giới hiệu Machine learning p ie gh tn to Chương 1: MỘT SỐ KIẾN THỨC LÝ THUYẾT CƠ SỞ 1.1.1 Khái niệm Machine learning nl w 1.1.2 Phân loại kỹ thuật học máy: d oa 1.1.3 Các ứng dụng Machine learning an lu 1.1.4Các bước thực học máy va 1.2 Bài toán phân lớp liệu 10 u nf 1.2.1 Phân lớp liệu 10 ll 1.2.2 Một số ứng dụng phân lớp tiêu biểu: 11 m oi 1.2.3 Tiến trình phân lớp liệu 12 z at nh 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 z 15 l gm @ 1.3.2 Những kết nghiên cứu phân lớp cho liệu bệnh tiểu đường m co 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 an Lu 1.3.5 Giới thiệu liệu tiểu đường 17 n va ac th si 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 toán hồi quy logistic 26 2.2 Thuật toán Principal Component Analysis (PCA) 29 lu an 2.2.1 Vai trò thuật toán PCA toán phân lớp 29 va 2.2.2 Bài toán giảm chiều liệu 30 n 2.2.3 Cơ sở toán học PCA 30 to gh tn 2.2.4 Các bước thực phương pháp PCA 31 p ie 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 nl w 2.3.1 Phân cụm liệu 38 d oa 2.3.2 Ứng dụng phân cụm: 40 an lu 2.3.3 Thuật toán phân cụm K-Means 40 va 2.3.4 Các bước thực thuật toán K-Means 42 u nf 2.3.5 Ví dụ minh họa triển khai thuật toán K-Means 42 ll KẾT LUẬN CHƯƠNG 45 m oi Chương 3: SỰ KẾT HỢP BA THUẬT TOÁN PCA, K-MEANS VÀ HỒI QUY z at nh LOGISTIC ỨNG DỤNG TIÊN LƯỢNG BỆNH TIỂU ĐƯỜNG 46 z 3.1 Chuẩn bị liệu tiểu đường 46 @ 3.2 Tiền xử lí liệu 47 gm l 3.3 Ứng dụng thuật toán hồi quy Logistic Regression Classifier phần m co 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 an Lu bệnh tiểu đường 51 n va ac th si 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 lu KẾT LUẬN CHƯƠNG 67 an n va KẾT LUẬN 69 tn to DANH MỤC TÀI LIỆU THAM KHẢO 71 PHỤ LỤC gh p ie QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN THẠC SĨ (bản sao) d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si DANH MỤC CÁC BẢNG Bảng 3.1: Thống kê độ xác kết thuật toá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 lu 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 an Hình 3.2: Đồ thi phân tích thàn phần PCA 57 va n Hình 3.3 Mơ tả outlier liệu chiều 59 tn to Hình 3.4: Đồ thị cluster 62 ie gh Hình 3.5: Đồ thị biểu diễn liệu thuật toán PCA 65 p 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 d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si 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 lu nhân tiết insulin bị khiếm khuyết ảnh hưởng sinh học bị suy yếu an n va hai Bệnh tiểu đường dẫn đến tổn thương mãn tính rối loạn 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 p ie gh tn to chức mô khác nhau, đặc biệt mắt, thận, tim, mạch máu dây 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 oa nl w ngày tăng cao Nếu biện pháp ngăn chặn hiệu dự báo đến d năm 2040, tồn giới có 642 triệu người mắc bệnh tiểu đường, an lu có triệu người mắc bệnh nước ta [7] Ngoài ra, 46.5% người u nf va mắc bệnh tiểu đường chưa chẩn đoán Điều nói lên 10 người ll trưởng thành tương lai có người mắc bệnh tiểu đường Vậy, bệnh oi m tiểu đường ngày trẻ hóa tình trạng báo động nên cần phải ý z at nh 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 z gm @ 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 l m co 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 an Lu trưởng Viện Đái tháo đường Rối loạn chuyển hóa (Đại học Y Hà Nội), Chủ n va ac th si 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ể lu bệnh biến chứng tiểu đường mang lại an Trong khoa học y tế, chẩn đốn tình trạng sức khỏe nhiệm vụ va n khó khăn Đặc biệt, chẩn đoán bệnh tiểu đường thách thức gh tn to quan trọng nước phát triển phát triển Thực tế cho thấy, ie lịch sử khám bệnh bệnh nhân kết xét nghiệm cần thiết để chẩn p đoán bệnh cụ thể chẩn đoán dựa kinh nghiệm bác sĩ Tuy nhiên, nl w chẩn đoán bệnh bác sĩ kinh nghiệm chẩn đốn có kết d oa khơng xác tình trạng sức khỏe bệnh nhân Do đó, làm an lu để chẩn đốn phân tích bệnh tiểu đường nhanh chóng xác u nf va chủ đề đáng để nghiên cứu Chẩn đoá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 ll oi m vào kinh nghiệm cao bác sỹ cịn cần phải sử dụng cơng nghệ thông z at nh 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á z mẫu chưa biết, ẩn từ kho lưu trữ liệu lớn Những mẫu hỗ trợ l gm @ y tế chẩn đoán định m co 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, an Lu 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, n va ac th si Pl-3 dự đố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ự đoá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ự đoán kết phân loại cuối Để khắc phục hạn chế này, đề lu xuất nghiên cứu với đề tài: “Kết hợp PCA K-Means với hồi quy Logistic an ứng dụng tiên lượng bệnh tiểu đường” va n Đối tượng phạm vi nghiên cứu to Tìm hiểu nội dung thuật toán PCA, K-Means hồi quy Logistic từ ie gh tn 2.1 Đối tượng nghiên cứu lý thuyết: p 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 nl w tiểu đường cho bệnh nhân d oa 2.2 Đối tượng nghiên cứu thực tiễn: an lu Các số sinh hóa xét nghiệm bệnh nhân khám bệnh tiểu đường u nf va 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 ll oi m 2019 đến tháng năm 2020 z at nh 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: z Tìm kiếm, thu thập tài liệu từ cơng trình nghiên cứu khoa học @ l gm công bố báo đăng hội nghị, tạp chí thông tin từ m co website ứng dụng thuật toán học máy toá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 an Lu 3.2 Phương pháp thực nghiệm khoa học: n va ac th si 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 lu dự báo xác kết hợp thuật toán phân cụm K-Means an hồi quy Logistic Vai trị phân tích thành phần (PCA) nhằm giảm chiều va n kích thước tập liệu bảo tồn thơng tin Sau thuật tốn K- gh tn to Means sử dụng để loại bỏ liệu ngoại lai Sau sử dụng hồi quy ie Logistic để xây dựng mơ hình phân lớp dự báo Sự kết hợp thuật tốn p cải thiện hiệu mơ hình phân lớp nl w Ý nghĩa khoa học thực tiễn d oa 5.1 Ý nghĩa khoa học: an lu Với kết hợp ứng dụng ngành khoa học máy tính y khoa, đề u nf va 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ợ ll z at nh 5.2 Ý nghĩa thực tiễn: oi m cho cán y tế chẩn đoán bệnh tiểu đường cho bệnh nhân Chẩn đoán phát bệnh q trình, địi hỏi cán y tế z phải có trình độ chun mơn cao cần phải có đầy đủ trang thiết bị y tế @ l gm hỗ trợ chẩn đốn xác tình trạng bệnh bệnh nhân Việc phát m co 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 an Lu thiệt hại tinh thần kinh tế cho người bệnh, góp phần thúc đẩy kinh tế n va ac th si 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 chúng tơi 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 lu tác động nhiều đến kết dự đốn Từ kết chẩn đốn chúng an tơi xác va n Trường hợp 2: Chúng tơi định thử nghiệm kết hợp thuật toán PCA gh tn to vào mơ hình dự đốn hồi quy Logistic mặc kết thấp Tuy ie nhiên, ưu điểm thuật toán PCA giảm chiều liệu cách nén tập 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 nl w giảm lượng thời gian đáng kể thực mơ hình chúng tơi d oa giảm lượng lớn liệu làm ảnh hưởng đến kết dự đốn chúng an lu tơi u nf va 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ỏ ll oi m liệu outliers Tuy nhiên, thực thuật toán tập liệu lớn z at nh tốn thời gian Trường hợp 4: Chúng tin thử nghiệm thuật toán kết hợp z nêu cải tiến kết dự đoán hồi quy Logistic hiệu @ m co l gm thời gian thực độ xác mơ hình an Lu n va ac th si 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 chúng tơi nêu với mục đích xây lu dựng mơ hình hiệu để dự đoán bệnh tiểu đường cho bệnh nhân Sau an n va nghiên cứu đề xuất mơ hình mới, bao gồm kết hợp PCA 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 mơ hình cải p ie gh tn to để giảm kích thước liệu, phân cụm K-Means để phát loại bỏ tiến thuật toán phân loại hồi quy Logistic để dự đốn bệnh tiểu đường oa nl w thực thơng qua việc kết hợp hai thuật tốn PCA K-Means (từ d 0.92% lên 0.96%) lu an Kết sử dụng thuật toán cải tiến hồi quy Logistic cách kết hợp u nf va PCA K-Means cho độ xác cao Qua cho thấy q trình cải tiến thuật ll tốn hồi quy Logistic xây dựng thành công Điều giúp oi m cho bạn đọc có lựa chọn tập liệu z at nh Cuối cùng, tính đạt đề tài nghiên cứu chúng tơi PCA góp phần nâng cao khả phân cụm liệu cho K-Means làm cho kết z thuật tốn kết hợp sau l gm @ phân cụm liệu đạt tốt Kết tốt cho liệu đầu vào cho m co Điểm hạn chế đề 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ơ an Lu hình cải tiến Hy vọng bạn đọc ứng dụng mơ hình đề xuất n va ac th si 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 lu an n va p ie gh tn to d oa nl w ll u nf va an lu oi m z at nh z m co l gm @ an Lu n va ac th si 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, lu (3rd), Morgan Kaufmann Publishers, USA (2012) an n va [5] B.M Patil, R.C Joshi, Toshniwal Durga, Hybrid prediction model for tn to Type-2 diabetic patients, Expert Syst Appl, 37 (2010), pp 8102-8108 gh [6] J Novakovic, S Rankov, Classification performance using principal p ie component analysis and different value of the ratio R, Int J Comput Commun w Control, Vol VI (2) (2011), pp 317-327, ISSN 1841-9836, E-ISSN 1841-9844 oa nl [7]http://daithaoduong.kcb.vn/tinh-hinh-dai-thao-duong/ d [8]http://dantri.com.vn/suc-khoe/du-bao-se-co-tren-600-trieu-nguoi-mac- lu va an benh-tieu-duong-vao-nam-2030-20181024102930774.htm u nf [9]https://www.diabetesdaily.com/learn-about-diabetes/what-is- ll diabetes/how-many-people-have-diabetes/ oi m z at nh z m co l gm @ an Lu n va ac th si 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', lu header=None, sep=',') an va print("\nTAB_PID") n print(df) to df.dropna(how="all", inplace=True) p ie gh tn df = df.drop(df.index[[0]], axis=0) w ar_x = df.iloc[:,0:3].values oa nl ar_y = df.iloc[:,3].values d ar_x_std = StandardScaler().fit_transform(ar_x) lu u nf va 'Glucose']) an df_std = pd.DataFrame(ar_x_std, columns=['Tuoi', 'GioiTinh', ll df_std['ChanDoan'] = ar_y oi z at nh print(df_std) m print("\ndf_std") df_std.to_csv(r'D:\python2\dulieu_chuanhoa.csv') z print("\ncov_mat") cov_mat = np.cov(ar_x_std.T) an Lu eig_vals, eig_vecs = np.linalg.eig(cov_mat) m co print(cov_mat) l gm @ cov_mat= np.cov(ar_x_std, rowvar=False) n va ac th si 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") lu print(eig_pairs) an for i in eig_pairs: va n print(i[0]) to print("\nev_total: ",tot) p ie gh tn tot = sum(eig_vals) var_exp = [(i / tot)*100 for i in sorted(eig_vals, reverse=True)] oa nl w print(var_exp) cum_var_exp = np.cumsum(var_exp) d an lu print(cum_var_exp) u nf va print("2 dimensions: ",var_exp[0:2]) print("2 dimentions: ",sum(var_exp[0:2])) ll oi m print("\nselected eigen pairs") print(eig_pairs[1][1]) z gm @ print("\nmat_w") z at nh print(eig_pairs[0][1]) mat_w = np.hstack((eig_pairs[0][1].reshape(3,1), an Lu mat_y = ar_x_std.dot(mat_w) m co print(mat_w) l eig_pairs[1][1].reshape(3,1))) n va ac th si 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') lu max = 1000 an plt.subplot(2,2,1) va n plt.title('PCA [0:1]') to if i < max: p ie gh tn for i in df_final.index: if df_final.iloc[i,2] == '0': oa nl w plt.scatter(df_final.iloc[i,0], df_final.iloc[i,1], s = 20, c = 'g') elif df_final.iloc[i,2] == '1': d plt.subplot(2,2,2) u nf va an lu plt.scatter(df_final.iloc[i,0], df_final.iloc[i,1], s = 20, c = 'b') plt.title('PCA [0:2]') ll oi m for i in df_final.index: if df_final.iloc[i,2] == '0': z at nh if i < max: z elif df_final.iloc[i,2] == '1': l gm @ plt.scatter(df_final.iloc[i,0], df_final.iloc[i,2], s = 20, c = 'g') plt.subplot(2,2,3) an Lu plt.title('PCA [1:2]') m co plt.scatter(df_final.iloc[i,0], df_final.iloc[i,2], s = 20, c = 'b') n va ac th si 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 lu import pandas as pd an import numpy as np va n import seaborn as sns to from sklearn.cluster import KMeans p ie gh tn import scipy as ss import matplotlib.pyplot as plt oa nl w from sklearn.metrics import accuracy_score df_pid = pd.read_csv('D:\python2\dulieu_chuanhoa.csv') d u nf va print(df_pid) an lu print("\nTAB_PID") df_X = df_pid.drop(['ChanDoan'], axis=1 ll print("\nbảng tách Y") z at nh df_y = df_pid['ChanDoan'] oi m df_X = df_X.iloc[:, 1:] z kmeans = KMeans(n_clusters=2) df_pid_clustered = kmeans.predict(df_X) an Lu df_pid_transformed = kmeans.transform(df_X) m co l kmeans.fit(df_X) gm @ print(df_X) n va ac th si 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: lu ChanDoan_false = ChanDoan_false + an kmeans_acc_per = ChanDoan_true / (ChanDoan_true + va n ChanDoan_false) to for x in df_pid_clustered: p ie gh tn df_pid_clustered_2 = [] if x == 1: oa nl w df_pid_clustered_2.append(0) elif x == 0: d an lu df_pid_clustered_2.append(1) u nf va df_pid_clustered_2 = np.array(df_pid_clustered_2) kmeansclustercenters = kmeans.cluster_centers_ ll oi m print("\nKmeans_Cluster_Centers:") if kmeans_acc_per < 0.5: z at nh print(kmeansclustercenters) z kmeans_acc_per = - kmeans_acc_per kmeansclustercenters = m co l np.flip(kmeansclustercenters, 0) gm @ df_pid_clustered = df_pid_clustered_2 df_pid_transformed = np.flip(df_pid_transformed, 1) an Lu print("\nKmeans_Cluster_Centers:") n va ac th si 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 = [] lu for i in df_X.index: an if df_proc.iloc[i,0] == 0: va n d00.append(df_pid_transformed[i][0]) to else: p ie gh tn d11.append(-1) d11.append(df_pid_transformed[i][1]) oa nl w d00.append(-1) df_proc['d00'] = d00 d an lu df_proc['d11'] = d11 u nf va d00 = [x for x in d00 if x >= 0] d11 = [x for x in d11 if x >= 0] ll m co an Lu plt.plot(d11) l plt.title('Cluster 2') gm plt.subplot(2,1,2) @ d11.sort() z plt.plot(d00) z at nh plt.title('Cluster 1') oi plt.subplot(2,1,1) m d00.sort() n va ac th si 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] = lu for i in df_X.index: an if df_proc.iloc[i,0] == 1: va n if df_proc.iloc[i,3] > d1_thr: to df_proc['inv'] = inv p ie gh tn inv[i] = print("\nProcessing_Table_with_Invalid_Tags:") oa nl w print(df_proc.head(10)) print("\nPID_Before:") d an lu print(df_X.shape) u nf va df_X_kmeans = df_X df_y_kmeans = df_y ll z at nh plot_proc = df_proc oi count_dropped = m count = len(df_X) m co l count_dropped = count_dropped + gm if df_proc.iloc[i,inv_index] == 1: @ for i in df_proc.index: z inv_index = an Lu df_X_kmeans = df_X_kmeans.drop([i], axis=0) n va ac th si 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) lu df_final.index = range(len(df_final)) an df_final.to_csv(r'D:\python2\dulieu_chuanhoa_kmeans.csv') va n plot_X = df_X to gh tn plot_X = pd.concat([plot_X, pd.DataFrame(data = df_pid_clustered, p ie columns = ['cluster'])], axis = 1) plot_X_kmeans = df_X_kmeans oa nl w plot_X_kmeans = pd.concat([plot_X_kmeans, pd.DataFrame(data = plot_proc['cluster'], columns = ['cluster'])], axis = 1) d an lu plot_X_kmeans.index = range(len(plot_X_kmeans)) count_dim = [0,1] ll u nf va print(plot_X_kmeans) oi z at nh for i in count_dim: m max = 1000 for j in range(i + 1, len(count_dim) + 1): z plt.subplot(1,2,1) an Lu for k in plot_X.index: m co plt.ylim(-2,4) l plt.xlim(-3,3) gm @ plt.suptitle('Kmeans [' + str(i) + ':' + str(j) + ']', fontsize = 20) n va ac th si 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) lu plt.xlim(-3,3) an plt.ylim(-2,4) va n for l in plot_X_kmeans.index: to gh tn if l < max: p ie if int(plot_X_kmeans.iloc[l,3]) == 0: plt.scatter(plot_X_kmeans.iloc[l,i], plot_X_kmeans.iloc[l,j], oa nl w s=20, c='green') else: d u nf va s=20, c='blue') an lu plt.scatter(plot_X_kmeans.iloc[l,i], plot_X_kmeans.iloc[l,j], plt.scatter(kmeansclustercenters[:, i], kmeansclustercenters[:, j], ll z at nh plt.show() oi m s=100, c=['#004c00','#00004c']) Chương trình hồi quy Logistic kết hợp PCA K-Means m co l from sklearn.cluster import KMeans gm import seaborn as sns @ import numpy as np z import pandas as pd an Lu from sklearn.linear_model import LogisticRegression n va ac th si 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() lu print("\npid") an print(df_pid) va n df_X = df_pid.drop(['ChanDoan'], axis=1) to df_y = df_pid['ChanDoan'] p ie gh tn df_X = df_X.iloc[:, 1:] print("\n tách Y") oa nl w print(df_X) train_X, test_X, train_y, test_y = train_test_split(df_X, df_y, d an lu test_size=0.2) u nf va logreg = LogisticRegression() logreg.fit(train_X, train_y) ll oi m y_pred=logreg.predict(test_X) cnf_matrix z at nh cnf_matrix = metrics.confusion_matrix(test_y, y_pred) class_names=[0,1] # name of classes an Lu fig, ax = plt.subplots() m co print(classification_report(test_y, y_pred)) l gm @ print(cnf_matrix) z print("\nARRAY") n va ac th si 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) lu plt.ylabel('Actual label') an plt.xlabel('Predicted label') va n plt.show to print("Precision:",metrics.precision_score(test_y, y_pred)) p ie gh tn print("Accuracy:",metrics.accuracy_score(test_y, y_pred)) print("Recall:",metrics.recall_score(test_y, y_pred)) oa nl w y_pred_proba = logreg.predict_proba(test_X)[::,1] fpr, tpr, _ = metrics.roc_curve(test_y, y_pred_proba) d an lu auc = metrics.roc_auc_score(test_y, y_pred_proba) plt.legend(loc=4) ll u nf va plt.plot(fpr,tpr,label="data 1, auc="+str(auc)) oi m plt.show() z at nh z m co l gm @ an Lu n va ac th si

Ngày đăng: 18/07/2023, 14:42

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan