Predictio n– dự đoán

Một phần của tài liệu Nghiên cứu các giải thuật máy học và áp dụng vào bài toán dự đoán bệnh thận tại bệnh viện đa khoa tỉnh điện biên dùng ngôn ngữ python (Trang 48)

Giả sử chúng ta muốn dự đoán (prediction) cho một quan sát mới x sau khi chúng ta có 𝛼𝑖 được giải nhờ gói CVXOPT [4], và 𝑏∗ được tính từ (2.1.36). Lúc này, hàm phân lớp một điểm x sẽ dựa trên hàm dấu:

𝑓(𝑥) = 𝑠𝑔𝑛{∑ 𝛼𝑖𝑦𝑖𝑘(𝑥𝑖, 𝑥) + 𝑏∗ 𝑚 𝑖=1 } Có nghĩa là: {𝑦 = +1 𝑛ế𝑢 𝑓(𝑥) > 0, 𝑦 = −1 𝑛ế𝑢 𝑓(𝑥) < 0. 2.1.5 Tổng kết về SVM

SVM là một thuật toán có giám sát (supervised) trong Máy học. Ý tưởng của thuật toán là coi mỗi quan sát là một điểm trong không gian n – chiều (n là số đặc trưng trong tập dữ liệu) cần được phân lớp, khi đó thuật toán sẽ tìm cách xây dựng một siêu phẳng (hyperplan nhiều chiều) sao cho khoảng cách giữa siêu phẳng đó tới điểm dữ liệu gần nhất của một phân lớp là lớn nhất (maximum-margin).

Có 2 dạng bài cho phương pháp SVM:

Dạng thứ nhất là phân tách tuyến tính (linearly separable). Khi đó tồn tại một siêu phẳng để phân tách tuyến tính các lớp trong tập dữ liệu.

Dạng thứ hai là phân tách phi tuyến. Khi không tồn tại một siêu phẳng để phân tách các lớp trong tập dữ liệu. Chúng ta cần phải ánh xạ tập dữ liệu trong không gian ban đầu vào không gian mới nhiều chiều hơn, nhằm tìm được một siêu phẳng tuyến tính phân tách trong không gian mới. Việc chuyển đổi không gian này cần hàm hạt nhân K(x, z).

39

Có 2 dạng siêu phẳng:

Lề cứng (hard – margin): Khi dữ liệu các lớp được phân tách rõ ràng; tức là không có điểm dữ liệu ngoại lệ (no outliers).

Lề mềm (soft – margin): Chọn một siêu phẳng phân tách các ví dụ luyện tập tốt nhất có thể, chấp nhận có điểm dữ liệu ngoại lệ (with outliers).

Ưu điểm của SVM:

Thể hiện được nhiều ưu điểm trong số đó có việc tính toán hiệu quả trên các tập dữ liệu lớn.

Xử lý trên không gian số chiều cao: SVM là một công cụ tính toán hiệu quả trong không gian chiều cao. SVM có thể hiệu quả khi số chiều lớn hơn số lượng quan sát.

Tiết kiệm bộ nhớ: Do chỉ có một tập hợp con của các điểm được sử dụng trong quá trình huấn luyện và ra quyết định thực tế cho các điểm dữ liệu mới nên chỉ có những điểm cần thiết mới được lưu trữ trong bộ nhớ khi ra quyết định.

Tính linh hoạt: Phân lớp thường là phi tuyến tính. Khả năng áp dụng kernel mới cho phép linh động giữa các phương pháp tuyến tính và phi tuyến tính từ đó khiến cho hiệu suất phân loại lớn hơn.

Nhược điểm của SVM:

Bài toán số chiều cao: Trong trường hợp số lượng thuộc tính (n) của tập dữ liệu lớn hơn rất nhiều so với số lượng dữ liệu (m) thì SVM cho kết quả khá tồi.

Chưa thể hiện rõ tính xác suất: Việc phân lớp của SVM chỉ là việc cố gắng tách các đối tượng vào hai lớp được phân tách bởi siêu phẳng SVM. Điều này chưa giải thích được xác suất xuất hiện của một thành viên trong một nhóm là như thế nào. Tuy nhiên hiệu quả của việc phân lớp có thể được xác định dựa vào khái niệm margin từ điểm dữ liệu mới đến siêu phẳng phân lớp mà chúng ta đã bàn luận ở trên.

Nếu việc chọn các kernel không phù hợp, thì hiệu quả của thuật toán sẽ giảm rất nhiều. Cái này đòi hỏi kiến thức của chuyên gia.

40

2.2. MÔ HÌNH HỒI QUY LOGISTIC REGRESSION

Trong các mô hình hồi quy, hồi quy tuyến tính được xem là đơn giản nhất nhưng có nhiều ứng dụng nhất. Mô hình này có thể xây dựng được cho hầu hết các mối quan hệ trong những lĩnh vực khác nhau của cuộc sống, đặc biệt trong dự báo. Mô hình hồi quy này cũng được xem là nền tảng, là cơ sở cho các mô hình hồi quy khác. Có rất nhiều mô hình hồi quy phi tuyến được chuyển đổi về dạng tuyến tính để xử lý bởi vì xét các vấn đề liên quan cho hồi quy tuyến tính thì đơn giản hơn nhiều so với hồi quy phi tuyến. Hồi quy logistic được xây dựng trên nền tảng các mô hình hồi quy phổ biến, đặc biệt là hồi quy tuyến tính.

Chúng ta sử dụng mô hình Linear Regression với giả định rằng biến phụ thuộc (đầu ra - dự đoán) phụ thuộc tuyến tính với một hay nhiều biến độc lập (đầu vào). Tuy nhiên có rất nhiều bài toán thực tế sẽ không đảm bảo việc giả định như vậy. Những bài toán mà mối quan hệ giữa biến phụ thuộc và các biến độc lập là phi tuyến tính (non-linear). Đây là lúc chúng ta cần nghĩ tới mô hình hồi quy Logistic.

Mô hình hồi quy Logistic sẽ 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.

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.

Trong luận văn này, Tôi chỉ tập trung vào Binary Logistic Regression vì 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 là một trong những thuật toán quan trọng bậc nhất trong Máy học.

41

2.2.1. Hàm Logistic

Trong luận văn này chúng ta bàn về bài toán phân lớp (Classification). Bài toán phân lớp là một trường hợp đặc biệt của bài toán hồi qui (Regression), với điều kiện biến dự đoán y chỉ nhận hai giá trị, 0 và 1 (chúng ta quan tâm tới bài toán binary logistic regression) (đọc thêm [5]). Có 2 nhận xét để tiếp cận bài toán này.

Thứ nhất: Dùng các hàm hồi qui tuyến tính (Linear Regression) để dự đoán biến (adsbygoogle = window.adsbygoogle || []).push({});

y, khi biết x. Ở đây chúng ta bỏ qua điều kiện giá trị của y là rời rạc (0 hoặc 1). Ở Linear Regression chúng ta chọn hàm dự đoán: ℎ𝜃(𝑥) = 𝜃𝑇𝑥.

Thứ hai: Vì giá trị 𝑦 ∈ {0, 1}, nên chúng ta giới hạn y trong đoạn [0, 1]. Do vậy, chúng ta chọn ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑥), trong đó 𝑔(𝑧) = 1

1+𝑒−𝑧, với 𝑧 ∈ 𝑅. Tóm lại, chúng ta có hàm dự đoán với đầu vào x như sau:

ℎ𝜃(𝑥) = 1

1+𝑒−𝜃𝑇𝑥 (2.1.37) Đồ thị của hàm logistic có dạng như Hình 2.2.1:

Hình 2.2. 1: Đồ thị hàm Sigmoid

Chúng ta nhận thấy rằng giá trị hàm tiến dần tới 1 khi giá trị của biến tiến tới giá trị lớn dương; ngược lại, giá trị của hàm tiến dần tới 0 khi giá trị của biến tiến tới

42

giá trị nhỏ âm. Hàm sigmoid rất hữu dụng trong nhiều bài toán vì nó có thể cho đầu vào là một giá trị thực bất kì, và đầu ra là một giá trị năm trọng đoạn [0,1].

𝑔(𝑧) = 1 1+𝑒−𝑧 (2.1.38) Một tính chất thú vị của hàm là: 𝑔(𝑧) + 𝑔(−𝑧) = 1 1 + 𝑒−𝑧 + 1 1 + 𝑒𝑧 = 𝑒 𝑧 1 + 𝑒𝑧+ 1 1 + 𝑒𝑧 = 1

Chính vì vậy, nó cũng được dùng như một hàm xác suất. Logistic Regression là một thuật toán dùng để ước lượng xác suất p với sự kiện phân lớp 𝑦 ∈ {0,1}, với dữ liệu đã có x, được viết:

𝑝(𝑌 = 𝑦|𝑥) = 1 1 + 𝑒−𝑧.

2.2.2. Hồi quy Logistic đơn biến

Mô hình này nghiên cứu mối quan hệ giữa biến phụ thuộc (Y) với một biến độc lập (X). Trong đó, Y là biến nhị phân nhận giá trị 0 hoặc 1, X là biến định lượng hoặc định tính. Ở đây ta sẽ không phân tích mối quan hệ giữa giá trị của biến Y với X mà chúng ta quan tâm đến việc phân tích mối quan hệ giữa xác suất kết quả thành công (Y = 1) với biến X ảnh hưởng đến kết quả này.

Hàm Logistic sẽ tìm mối quan hệ giữa odds của sự thành công (Y = 1) với các giá trị của biến độc lập. Mối quan hệ này thông thường là quan hệ tuyến tính.

Gọi p (X) = p (Y = 1| X) là xác suất có điều kiện Y = 1 khi Xxảy ra.

Giả sử p (X) có mối quan hệ với biến X, nhưng ta không thể tìm trực tiếp mối quan hệ này vì p (X) chỉ nhận giá trị thuộc [0; 1] trong khi X nhận giá trị bất kỳ. Ta

thấy   ( ) ln ( ( )) ln 1 ( ) p X odds p X p X      

  có mối quan hệ với p(X) và có giá trị bất kì, vì thế ta có thể thay đổi mối quan hệ giữa p(X)X bằng mối quan hệ giữa

( ) ln 1 ( ) p X p X     

  và X . Giả sử mối quan hệ này như sau:

0 1 ( ) ln 1 ( ) p X X p X            (2.1.39)

43 Hay 0 1 ( ) 1 ( ) X p X e p X     (2.1.40)

Công thức (2.1.39) và (2.1.40)cho ta hai hình thức của mô hình hồi quy Logistic đơn biến.

Trong đó: lnodds p X( ( )) hay ln ( ) 1 ( )

p X p X

 

  

  được gọi là logit[p(X)].

β0β1 là hai hệ số hồi quy, với β0là điểm chắn và β1 là độ dốc. (adsbygoogle = window.adsbygoogle || []).push({});

2.2.3. Hồi quy Logistic đa biến

Xét biến phụ thuộc nhị phân Yk biến độc lập X1, X2,..., Xk, trong đó Y chỉ nhận giá trị 0 và 1, còn Xj(j1, )k ảnh hưởng đến giá trị của Y.

Gọi X = (X1, X2,..., Xk),(j1, )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); (adsbygoogle = window.adsbygoogle || []).push({});

+ 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:

SeriesDataFrame; 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

Một phần của tài liệu Nghiên cứu các giải thuật máy học và áp dụng vào bài toán dự đoán bệnh thận tại bệnh viện đa khoa tỉnh điện biên dùng ngôn ngữ python (Trang 48)