Xét biến phụ thuộc nhị phân Y và k biến độc lập X1, X2,..., Xk, trong đó Y chỉ nhận giá trị 0 và 1, còn Xj(j1, )k ảnh hưởng đến giá trị của Y.
Gọi X = (X1, X2,..., Xk),(j1, )k
Gọi p (X) = p (Y = 1| X) là xác suất có điều kiện của Y = 1 khi X xảyra.
Giả sử p( X ) và X có mối liên hệ tuyến tính với nhau. Ta có mô hình hồi quy Logistic đa biến sau.
0 1 ( ) ln 1 ( ) k j j j p X X p X (2.1.41) Hay 0 1 ( ) 1 ( ) k j j j X p X e p X (2.1.42)
2.2.4. Những lưu ý khi sử dụng mô hình Hồi quy Logistic
- Sai lệch xác định mô hình
- Mức độ phù hợp (Goodness-of-fit) - Đa cộng tuyến (Multicollinearity)
- Ảnh hưởng của đối tượng nghiên cứu (Influential observations) - Vấn đề với biến số định danh, thứ tự
- Hàm logistic là phù hợp với biến thiên xác suất của các biến số độc lập - Không bỏ mất biến số quan trọng khỏi mô hình
44
- Không thêm vào mô hình biến số không liên quan - Không có sai số đo lường trong các biến số độc lập - Các đối tượng nghiên cứu là độc lập với nhau
- Các biến số độc lập không có tương quan tuyến tính với nhau
2.3. OVERFITTING
Một thách thức trong các chương trình Máy học thường gặp phải đấy là vấn đề overfitting. Thách thức này xảy ra khi chúng ta xây dựng một mô hình “phức tạp hơn mức cần thiết”!
Hình 2.3. 1: Mô hình màu xanh nước biển (green) và xanh lá cây (green) cùng có sai số bằng 0 trên tập dữ liệu đã cho.
Tuy nhiên, mô hình màu xanh lá cây có khả năng dự báo với dữ liệu mới chính xác hơn mô hình màu xanh nước biển. Mô hình màu xanh nước biển phức tạp hơn mức cần thiết
Vấn đề Overfitting (phương sai quá lớn) xảy ra khi:
- Mô hình thực thi rất tốt (hàm chi phí rất nhỏ) trên tập huấn luyện, nhưng thực thi rất kém (hàm chi phí lớn) trên tập dữ liệu mới.
Vậy làm thế nào để vượt qua vấn đề overfitting? Một vài phương pháp có thể áp dụng:
45
- Đồ thị hóa dữ liệu và mô hình: Cách này không phù hợp với bài toán nhiều đặc trưng
- Cross – Validation: Dùng kĩ thuật lấy lại mẫu để ước lượng độ chính xác của mô hình. Kĩ thuật thường được dùng nhất là k-fold cross validation: Nó cho phép huấn luyện và kiểm tra mô hình k-lần trên các tập con dữ liệu khác nhau để rồi ước lượng độ chính xác của mô hình trên tập dữ liệu kiểm tra. Đây là kĩ thuật thường được áp dụng, bằng cách:
+ Tách dữ liệu thành 2 tập: Tập huấn luyện và tập kiểm tra; + Tính chi phí cho 2 tập dữ liệu trên;
+ So sánh sự khác nhau trên 2 tập để đưa ra nhận xét về mô hình (overfitting). - Giảm số đặc trưng, bằng cách:
+ Lựa chọn các đặc trưng để giữ lại, một số đặc trưng bị loại bỏ (bằng thủ công hay bằng thuật toán);
+ Tuy nhiên, việc lựa chọn đặc trưng nào để loại bỏ đôi khi không dễ dàng, và trong nhiều trường hợp thì đặc trưng quan trọng có thể bị mất.
- Dùng kĩ thuật Regularization:
+ Giữ tất cả các đặc trưng, nhưng giảm sự tác động của các tham số đi cùng (theta);
+ Kĩ thuật này rất tốt với mô hình có nhiều đặc trưng, và mỗi đặc trưng đều có ảnh hưởng tới kết quả đầu ra (y).
46
Như chúng ta thấy minh họa trên Hình 2.3.2, chúng ta muốn xây dựng một mô hình nhằm phân tách hai lớp đối tượng (x – màu đỏ và o – màu xanh). Với mô hình bên phải, nó đã thực hiện rất tốt với tập huấn luyện (chi phí rất nhỏ), nhưng nó lại yếu kém với việc dự đoán cho dữ liệu mới. Mô hình có quá phức tạp (quá nhiều thành phần: Đặc trưng và kết hợp của chúng với nhau). Kĩ thuật Regularization sẽ tìm cách giảm sự tác động của các tham số gây ra nguyên nhân đó.
2.4. PYTHON TRONG MÁY HỌC 2.4.1 Tại sao dùng Python 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