2.4.1 Tại sao dùng Python
Trong luận văn này, Tôi sử dụng ngôn ngữ Python. Có nhiều lý do. Đầu tiên và vô cùng quan trọng, Python là một ngôn ngữ rất dễ học cho người mới bắt đầu. Python có cú pháp, cấu trúc cực kì đơn giản và dễ đọc. Một học sinh phổ thông có tư duy logic khá cũng có thể tự học được Python. Thứ hai, Python là ngôn ngữ ngày càng phổ dụng (rất nhiều sản phẩm được phát triển ở Google sử dụng Python); nó có thể xây dựng bất kì ứng dụng nào khi ngôn ngữ khác nào làm được. Thứ ba, Python có rất nhiều thư viện cho Máy học (scikit-learn, pandas, theano, tensorflow). Python là sự lựa chọn hàng đầu cho người mới học có thể dễ dàng hơn trong việc phát triển ứng dụng cho Máy học, khoa học dữ liệu (data science), và nhiều lĩnh vực khác trong khoa học máy tính.
2.4.2 Thư viện trong Python [11,12,13,14]
Python là ngôn ngữ thông dịch (interpreted language). Mỗi câu lệnh được dịch trực tiếp, thay vì dịch cả chương trình. Trong Python, chúng ta không cần khai báo kiểu cho biến, tham số, hàm và các phương thức. Điều này làm cho Python ngắn gọn và linh hoạt, và không tốn thời gian kiểm tra kiểu trong thời gian biên dịch. Python sẽ kiểm tra kiểu giá trị tại thời gian chạy.
Không giống với C++ và Java, Python không yêu cầu dấu kết thúc mỗi câu lệnh ở cuối câu lệnh. Tuy nhiên, nó cũng phân biệt chữ cái hoa, thường khi đặt tên biến. Python được lưu trữ trong tệp có phần mở rộng “.py”.
47
Python được xem là ngôn ngữ dễ học, dễ đọc và dễ bảo trì. Là ngôn ngữ hỗ trợ phương thức lập trình có cấu trúc, lập trình hướng đối tượng, và có bộ thu gom rác tự động. Python cũng dễ dàng tích hợp với nhiều ngôn ngữ khác (C, C++, Java).
Vì Python là ngôn ngữ chưa thực sự phổ dụng ở Việt Nam nên Tôi lược dịch ra đây những kiến thức cơ bản và quan trọng nhằm giúp người đọc có thể hiểu được ở phần cài đặt (Chương 3).
2.4.2.1. Pandas
Cùng với Numpy, Pandas là một trong những thư viện được dùng rộng rãi trong chương trình Python. Pandas cung cấp nhiều đối tượng và phương thức cho các cấu trúc dữ liệu. Pandas là thư viện không thể thiếu cho chúng ta trong suốt quá trình xử lý dữ liệu (data munging): Từ chuyển đổi hay ánh xạ dữ liệu thô sang dạng dữ liệu mà chúng ta mong muốn, nhằm có thể phân tích dễ dàng hơn.
Chúng ta sẽ sử dụng hai cấu trúc dữ liệu hiệu quả được dùng trong Python:
Series và DataFrame; cả hai cấu trúc này được xây trên thư viện Numpy.
2.4.2.2. Nympy
Numpy (viết tắt của Nummerical Python) là một thư viện không thể thiếu khi chúng ta xây dựng các ứng dụng Máy học trên Python. Numpy cung cấp các đối tượng và phương thức để làm việc với mảng nhiều chiều và các phép toán đại số tuyến tính. Trong numpy, chiều của mảng gọi là axes; trong khi số chiều gọi là rank.
Thư viện chính trong numpy là các đối tượng mảng (array). Mảng (array) tương tự như list ở Python với điều kiện là mọi phần tử trong array phải có cùng kiểu dữ liệu. Array có thể thao tác với số lượng lớn dữ liệu số, thường là float hay int, và hiệu quả hơn trên danh sách rất nhiều. Lớp thường dùng trong numpy là ndarray (n- dimentional array).
Khai báo khi dùng thư viện nump. Có nhiều cách để khai báo Numpy: Sử dụng tất cả các đối tượng và hàm của numpy:
import numpy
Chúng ta gọi trực tiếp các hàm qua cú pháp: numpy.array([1,2,3]) Có thể dùng tất cả các đối tượng trong numpy
48
from numpy import *
Chúng ta gọi trực tiếp các hàm qua cú pháp array([1,2,3])
Để ngắn gọn, nhiều người cũng dùng tên giả cho numpy. Đây là cách thường dùng:
import numpy as np
Chúng ta gọi trực tiếp các hàm qua cú pháp: np.array([1,2,3])
2.4.2.3 Scikit – learn [15,16] Scikit – learn là gì
Scikit – learn là một thư viện Máy học miễn phí cho cộng đồng lập trình Python. Scikit – learn cung cấp rất nhiều các thuật toán Máy học: Phân lớp (classification), hồi qui (regression) và phân cụm (clustering) bao gồm support vector machines, random forests, gradient boosting, k-means và DBSCAN, và nó được hỗ trợ bởi rất nhiều các thư viện như NumPy and SciPy.
Scikit – learn được viết bởi phần lớn Python, ban đầu được phát triển bởi David Cournapeau trong một dự án mùa hè 2007. Sau đó Matthieu Brucher tham gia vào dự án và phát triển nó như một phần trong đồ án của mình. Năm 2010 INRIA cũng tham gia và phát ảnh phiên bản đầu tiên (v0.1 beta) tháng 1 năm 2010.
Hiện nay có hơn 30 cá nhân, tổ chức đóng góp để phát triển thư viện này, đặc biệt có kinh phí từ INRIA và Google.
Python với Máy học
Nếu người lập trình Python muốn tìm một thư viện phong phú, dễ dàng để để xây dựng chương trình Máy học, thì thư viện đầu tiên cần nghĩ tới là Scikit – learn.
Scikit – learn càng ngày càng được coi là một công cụ hiệu quả trong khai phá dữ liệu, Máy học và trí tuệ nhân tạo, do có 4 đặc điểm sau:
- Dễ dùng và dễ tương tác bởi nhiều người - Có khả năng sử dụng lại trong nhiều hoàn cảnh
- Được xây dựng trên các thư viện mạnh: NumPy, SciPy, Pandas, IPython, Sympy, và matplotlib
49
2.5. TỔNG KẾT CHƯƠNG 2
Trong phần này, Tôi đề cập tới hai mô hình quan trọng trong Máy học: Support Vector Machine và Logistic Regression.
Support vector machine là một khái niệm trong thống kê và khoa học máy tính cho một tập hợp các phương pháp học có giám sát liên quan đến nhau để phân loại và phân tích hồi quy. SVM dạng chuẩn nhận dữ liệu vào và phân loại chúng vào hai lớp khác nhau. Do đó SVM là một thuật toán phân loại nhị phân. Với một bộ các ví dụ luyện tập thuộc hai thể loại cho trước, thuật toán luyện tập SVM xây dựng một mô hình SVM để phân loại các ví dụ khác vào hai thể loại đó. Một mô hình SVM là một cách biểu diễn các điểm trong không gian và lựa chọn ranh giới giữa hai thể loại sao cho khoảng cách từ các ví dụ luyện tập tới ranh giới là xa nhất có thể. Các ví dụ mới cũng được biểu diễn trong cùng một không gian và được thuật toán dự đoán thuộc một trong hai thể loại tùy vào ví dụ đó nằm ở phía nào của ranh giới. Mô hình SVM xây dựng một siêu phẳng hoặc một tập hợp các siêu phẳng trong một không gian nhiều chiều hoặc vô hạn chiều, có thể được sử dụng cho phân loại, hồi quy, hoặc các nhiệm vụ khác. Một cách trực giác, để phân loại tốt nhất thì các siêu phẳng nằm ở càng xa các điểm dữ liệu của tất cả các lớp (gọi là hàm lề) càng tốt, vì nói chung lề càng lớn thì sai số tổng quát hóa của thuật toán phân loại càng bé.
Tôi cũng đề cập tới cách thức xây dựng siêu phẳng tuyến tính và sử dụng lề cứng (hard – margin), lề mềm (soft – margin); cách tìm các support vectors; xác định các hàm nhân (kernels). Để hiểu rõ tính đúng đắn của thuật toán cần hiểu được những khái niệm trong bài toán tối ưu: Điều kiện Karush–Kuhn–Tucker (KKT conditions) [5], phương pháp nhân tử Lagrange (Lagrange multiplier) [6], quy hoạch toàn phương (quadratic programming) [7]. Những kiến thức liên quan cụ thể tới SVM đã được chứng minh trong [3] và [2] (Chương 9).
Mô hình hồi quy Logistic dùng hàm biến đổi logarit cho biến đầu ra để biến mô hình từ quan hệ phi tuyến tính sang tuyến tính. Nói một cách khác, nó biểu diễn quan hệ hồi quy tuyến tính dưới dạng hàm logarit, nên đôi khi nó cũng được gọi là Logit Regression.
50
Mô hình Logistic có một giả định rằng biến phụ thuộc (dự đoán) có giá trị rời rạc. Nếu biến dự đoán chỉ lấy hai giá trị rời rạc, đó là mô hình Binary Logistic Regression. Nếu biến dự đoán lấy nhiều hơn hai giá trị, đó là mô hình Multinomial Logistic Regression.
Luận văn này chỉ tập trung vào Binary Logistic Regression, nó rất hay được sử dụng trong thực tế, ví dụ khi bài toán liên quan tới dự báo: Có/không, thành công/thất bại, sống/chết, qua/trượt, bị bệnh/không bị, chấp nhận/từ chối, nam/nữ, v.v...
Binary Logistic Regression được xem như là một trong những thuật toán quan trọng bậc nhất trong Máy học.
51
CHƯƠNG 3
ÁP DỤNG THUẬT TOÁN SUPPORT VECTOR MACHINE VÀ LOGISTIC REGRESSION ĐỂ DỰ ĐOÁN BỆNH THẬN
3.1. DỮ LIỆU BỆNH NHÂN MẮC BỆNH THẬN 3.1.1. Vấn đề chẩn đoán bệnh thận và dữ liệu 3.1.1. Vấn đề chẩn đoán bệnh thận và dữ liệu
Thận là cơ quan quan trọng giữ chức năng chính là lọc máu đào thải chất độc cho cơ thể. Tuy nhiên khi thận bị suy yếu thì chức năng này bị suy giảm dần gây ảnh hưởng đến toàn bộ hoạt động trong cơ thể.
Hình 3. 1. Cấu trúc Thận
Khi bệnh phát triển thành mãn tính rất khó chữa trị, chất độc sẽ ngày càng tích tụ nhiều trong cơ thể người làm rối loạn chức năng hoạt động của các cơ quan khác rất dễ khiến bệnh nhân tử vong nhanh chóng. Ước tính, Việt Nam hiện có khoảng 8 triệu người mắc bệnh suy thận. Do đó, việc tìm ra một giải pháp giúp ngăn ngừa cũng như điều trị suy thận đang là vấn đề thu hút sự quan tâm của giới chuyên gia cũng như bệnh nhân. Ngoài ra bệnh thận là bệnh làm cho tổn thất vô cùng lớn không chỉ về sức khỏe mà còn cả về kinh tế. Tại Bệnh viện đa khoa tỉnh Điện Biên số lượng
52
bệnh nhân bị các bệnh về thận ngày càng tăng, riêng bệnh nhân suy thận mạn tăng đột biến từ năm 2012 bệnh viện chỉ điều trị 7 bệnh nhân đến năm 2016 số bệnh nhân điều trị đã nên đến 60 bệnh nhân số lượt chạy thận năm 2012 là 4.477 năm 2016 là 8.711 lượt chạy chưa kể các trường hợp tử vong do thể trạng suy kiệt và các biến chứng kèm theo. Xuất phát từ những lý do đó việc dự báo và chẩn đoán sớm được bệnh Thận là việc rất quan trọng trong việc xây dựng mô hình dự báo cho khám và điều trị nhằm giản thiểu tối đa số lượng bệnh nhân Thận không chỉ đối với các Bệnh nhân tới khám và điều trị tại Bệnh viện đa khoa tỉnh Điện Biên, với tỉnh Điện Biên mà nó còn có giá trị với cả nền y tế nước nhà.
3.1.2. Bệnh học bệnh thận [32,33]
3.1.2.1. Suy thận cấp
Suy thận cấp là một hội chứng biểu hiện bằng sự suy giảm nhanh chóng độ lọc cầu thận trong vài giờ, hay vài ngày gây hậu quả là sự ứ lại các chất thải của nitrogen, urê, creatinine trong máu; rối loạn thể tích dịch ngoại bào; rối loạn điện giải kiềm toan và cân bằng nội môi.Suy thận cấp có mã bệnh theo ICD-10 của WHO là N17.
3.1.2.2. Bệnh thận mạn tính
Suy Thận mạn là tình trạng chức năng thận suy giảm mạn tính kéo dài hàng tháng cho đến hàng năm và không hồi phục. Tổn thương kéo dài trên 3 tháng, xác định bởi các bất thường cấu trúc và chức năng thận, có hay không có giảm GFR, biểu hiện bởi các bất thường về bệnh học hay các dấu hiệu của tổn thương thận, bao gồm các bất thường trong xét nghiệm máu, nước tiểu, hay kết quả chẩn đoán hình ảnh.Bệnh thận mạn tính có mã bệnh theo ICD-10 của WHO là N18
3.1.2.3. Hội chứng thận hư
Hội chứng thận hư (HCTH) là biểu hiện lâm sàng của bệnh cầu thận, do nhiều nguyên nhân, làm thay đổi tính thấm của màng đáy cầu thận đối với chất đạm, đặc trưng bằng tiểu đạm, tiểu lipid, giảm albumin máu, tang lipid máu, phù và những rối loạn chuyển hóa khác. Hội chứng thận hư có mã bệnh theo ICD-10 của WHO là N04.
53
3.1.3. Vấn đề chuẩn đoán bệnh Thận của các bác sĩ qua triệu chứng cận lâm sàng [34]
* Bạch cầu (White blood cell-WBC)
Các bạch cầu lưu hành bao gồm Bạch cầu đoạn trung tính, Bạch cầu lympho, Bạch cầu mônô, Bạch cầu đoạn ưa acid và Bạch cầu đoạn ưa bazơ. Tất cả các tế bào máu (bao gồm bạch cầu, hồng cầu, tiểu cầu) đều có nguồn gốc từ một tế bào gốc chung. Bạch cầu được sinh ra trong tủy xương và bị phá hủy ở lách, các bạch cầu thực hiện các chức năng chính của mình tại các mô trong cơ thể. Ở người chức năng chính của bạch cầu là giúp cơ thể chống đỡ lại các tác nhân ngoại lai.
Giá trị bình thường của Bạch cầu:
1 tuổi: 5.000 -16.000/mm3 hay 5,0 -16.0 x 109/L. 4 tuổi: 5.000 - I5.000/mm3 hay 5,0 - 15.0 x 109/L.
4 đến 8 tuổi: 5.000 - 14.000/mm3 hav 5.0 - 14.0 x 109/L. 8 đến 16 tuổi: 4.500 - 13.000/mm3 hay 4.5 - 13.0 x 109/L.
Người lớn (> 16 tuổi): 4.500 - 10.500/mm3 hay 4.5 -10,5 x 109 /L. Giá trị bình thường của các thành phần tế bào bạch cầu
Công thức bạch cầu Phần trăm Con số tuyệt đối
Bạch cầu trung tính (Neutrophils) 40-60% hay 3000-7000/mm3 Bạch cầu ưa acid (Eosinophils) 1-8% hay < 500/mm3 Bạch cầu ưa bazơ (Bascophils) < 1% hay < 100/mm3 Bạch cầu lympho (Lymphocytes) 20-40% hay 1.000-4.000/mm3
Bạch cầu mônô 2-10% hay < 850/mm3
Bạch cầu có kết quả > 10 * 103/µL có thể dự đoán bệnh nhân có ảnh hưởng đến chức năng thận.
* Bạch cầu Lympho(Lymphocytes LYM)
Giá trị bình thường của xét nghiệm Bạch cầu Lympho
Công thức bạch cầu Phần trăm Con số tuyệt đối )
54
Bạch cầu Lympho có kết quả < 20% có thể dự đoán bệnh nhân có bị một số bệnh lý về thận như: Suy thận, kích thích vỏ thượng thận.
* Bạch cầu đoạn trung tính (Neutrophylia-NEU)
Giá trị bình thường của xét nghiệm Bạch cầu trung tính
Công thức bạch cầu Phần trăm Con số tuyệt đối
Bạch cầu trung tính (Neutrophils) 40-60% hay 3000-7000/mm3
Bạch cầu đoạn trung tính có kết quả < 40% có thể dự đoán bệnh nhân có ảnh hưởng đến chức năng thận.
* Hồng cầu (Red blood cell count [RBC count] - RBC)
Hồng cầu là các tế bào không nhân có dạng giống như một đĩa hai mặt lõm, được sinh ra trong tủy xương và bị phá hủy trong lách. Các hồng cầu có đời sống trung bình là 80-120 ngày. Vai trò chính của hồng cầu là vận chuyển oxy tới các mô nhờ hemoglobin chứa trong hồng cầu.
Giá trị bình thường của xét nghiệm hồng cầu:
Nam: 4,7 – 6,1 *106/mm3 hay 4,7 – 6,1 * 1012 /L Nữ: 4,2 – 5,4 *106/mm3 hay 4,2 – 5,4 * 1012 /L
Hồng cầu giảm có thể dự đoán bệnh nhân có bị một số bệnh lý về thận như: Giảm sinh trong bệnh thận.
* Hemoglobin (Hemoglobine [HGB] - Huyết sắc tố)
Hemoglobin (Hb) có TLPT 64000 dalton, được hình thành từ protein (các globin) và sắc tố(hem).
Globin bao gồm 4 chuỗi polypeptid kết hợp thành 2 cặp globin giống nhau. Có 4 loại globulin là alpha, beta, gamma và delta. Mỗi phân tử globin gắn với nhân hem. Vai trò chính của Hb là để gắn thuận nghịch với oxy và bảo đảm vận chuyển oxy từ phổi tới các mô.
Giá trị bình thường của xét nghiệm Hemoglobin
Nữ: 12 – 16 g/ 100mL hay 7,4 – 9,9 mmol/L. Nam: 13 – 18 g/ 100mL hay 8,1 – 9,9 mmol/L.
55
Hemoglobin giảm nồng độ có kết quả < 12g/100ml có thể dự đoán bệnh nhân có bị một số bệnh lý về thận như: Hòa loãng máu suy thận.
* Hematocrit (Hct – thể tích khối hồng cầu)
Hematocrit (HCT) được định nghĩa như là tỷ lệ tương quan của các hồng cầu so với huyết tương trong một mẫu máu. Sau khi lấy mẫu máu, bệnh phẩm sẽ được ly tâm. Hematocnt là một thông số hữuích chỉ khi tình trạng thể tích dịch của Bệnh nhân bình thường. Khi thể tích dịch trong cơ thể bình thường và tổng số lượng hồng cầu và hematocrit bình thường, giá trị của hematocrit vào khoảng 3 lần giá trị nồng độ hemoglobin.
Giá trị bình thường của xét nghiệm Hematocrit
Nữ: 37 - 48% hay 0,37 – 0,48 theo đơn vị SI. Nam: 42 - 52% hay 0,42 – 0,52 theo đơn vị SI.
Hematocrit giảm có thể dự đoán bệnh nhân có bị một số bệnh lý về thận như: Bệnh thận.
* Tiểu cầu (Thrombocyte Count)
Các tiểu cầu được hình thành trong tủy xương từ quá trình phân đoạn thành các mảnh nhỏ của bào tương của các mẫu tiểu cầu (megacaryocyte). Các tiểu cầu lưu hành trong máu dưới dạng hình đĩa không nhân đường kính 1-3μ. Đời sống của tiểu