[ML] Bài 4.1: Phân loại với hồi quy Logistic

Hồi quy logistic (Logistic Regression – LR) là một trong những công cụ phân tích quan trọng và được sử dụng phổ biến trong nhiều ứng dụng, ví dụ Spam detection – dự đoán mail gửi đến hòm thư của bạn có phải thư rác hay không, Credit card fraud – dự đoán giao dịch ngân hàng có phải gian luận hay không, Sentiment Classification – phân loại biểu cảm của đoạn văn bản.

Thuật toán hồi quy logistic là thuật toán học máy có giám sát, và mặc dù có tên là hồi quy nhưng đây là thuật toán phân loại, được sử dụng để phân loại một quan sát thành một trong hai lớp (như “cảm xúc tích cực” và “cảm xúc tiêu cực” trong bài toán Sentiment Classification) hoặc vào một trong nhiều lớp.

Thuật toán hồi quy logistic cũng có mối quan hệ rất chặt chẽ với mạng nơ-ron. Một mạng nơron có thể được xem như một loạt các bộ phân loại hồi quy logistic được xếp chồng lên nhau khác. Do tính ứng dụng cao, cơ sở lý thuyết và một số ví dụ của thuật toán logistic sẽ được nghiên cứu và trình bày chi tiết trong nội dung tài liệu này.

Các bài trong cùng chủ đề:

1. Bài 1: Học AI bắt đầu từ đâu?

2. Bài 2: Giới thiệu về Học máy

3. Bài 3: Mô hình hồi quy tuyến tính

4. Bài 4.1: Phân loại với hồi quy Logistic

1. Phân biệt hồi quy logistic và Naïve bayes

Hãy xem xét ví dụ sau. Giả sử chúng ta có hai lớp động vật, chó (y=0) và mèo (y=1), x là vectơ đặc trưng của động vật. Đưa vào một tập huấn luyện, một thuật toán như hồi quy logistic cố gắng tìm một đường thẳng – nghĩa là ranh giới quyết định – phân tách chó và mèo. Sau đó, để phân loại một động vật mới là chó hay mèo, thuật toán kiểm tra mẫu mới nằm vào phía nào của đường ranh giới quyết định, từ đó đưa ra dự đoán về nhãn cho mẫu mới. Những thuật toán như vậy được gọi là mô hình phân biệt (Discriminative).

Để so sánh, thuật toán Naïve Bayes tiếp cận một cách hoàn toàn khác. Đầu tiên, nhìn vào những con chó, chúng ta có thể xây dựng một mô hình về những con chó trông như thế nào. Sau đó, nhìn vào những con mèo, chúng ta có thể xây dựng một mô hình riêng biệt về những con mèo trông như thế nào. Cuối cùng, để phân loại một con vật mới, chúng ta có thể ghép con vật mới với mô hình con chó và ghép nó với mô hình con mèo, để xem con vật mới trông giống con chó hơn hay giống con mèo hơn mà chúng ta đã thấy trong tập huấn luyện. Tôi gọi những thuật toán học tập dạng này là mô hình khái quát (Generative).

Một ví dụ khác, Naïve Bayes gán một lớp c cho một tài liệu d không phải bằng cách tính toán trực tiếp  mà bằng cách tính toán một khả năng xảy ra và xác suất tiền nghiệm. Mô hình Naïve Bayes diễn đạt cách tạo các tính năng của một tài liệu nếu chúng ta biết nó thuộc loại c.

                                                      (1)

Ngược lại, các mô hình phân biệt giống như hồi quy logistic cố gắng trực tiếp tính toán . Thuật toán sẽ học cách gán trọng số cao cho tài liệu các tính năng trực tiếp cải thiện khả năng phân biệt giữa các lớp có thể có, ngay cả khi nó không thể tạo ra một ví dụ về một trong các lớp.

2. Phân biệt hồi quy logistic và hồi quy tuyến tính

Về điểm giống nhau, mô hình hồi quy logistic và hồi quy tuyến tính đều là mô hình học máy có giám sát (supervised machine learning) yêu cầu một kho tài liệu đào tạo gồm m cặp tính năng và nhãn (x(i), y(i )). Chúng cũng đều là các mô hình phân biệt (Discriminative).

Tuy nhiên điểm khác nhau căn bản giữa hai mô hình là đầu ra của mô hình hồi quy tuyến tính là dữ liệu liên tục khác với mô hình hồi quy logistic với đầu ra là dữ liệu rời rạc. Do đó để phân biệt hai lớp, chúng ta cũng có thể sử dụng thuật toán hồi quy tuyến tính nếu coi nhãn 0 và 1 là các số. Tuy nhiên cách sử dụng hồi quy tuyến tính cho phân loại đưa đến kết quả không tốt trong nhiều trường hợp (ví dụ quan hệ giữa biến phụ thuộc và biến độc lập là phi tuyến). Ngoài ra, hồi quy tuyến tính có thể đưa ra kết quả không mong muốn trong bài toán phân loại nhị phân với kết quả đầu ra lớn hơn 1 hoặc nhỏ hơn 0 như minh họa hình 1.

Hình 1. So sánh giữa hồi quy tuyến tính và hồi quy logistic (Nguồn: javatpoint.com, 2022).

3. Cơ sở lý thuyết của Hồi quy Logistic

3.1. Mô hình thuật toán

Mục tiêu của hồi quy logistic là đào tạo một bộ phân loại có thể đưa ra quyết định nhị phân về lớp của một quan sát đầu vào mới. Hồi quy logistic giải quyết công việc này bằng cách học từ một tập huấn luyện một vectơ của trọng số (weights) và một thuật ngữ độ lệch (bias term). Trong đó:

  • Mỗi thamsố  là một số thực và được liên kết với một của các tính năng đầu vào . Nó thể hiện mức độ quan trọng của tính năng đầu vào đó là đối với quyết định phân loại.
  • Bias term hay còn được gọi là intercept, là một số thực khác được thêm vào các đầu vào có tham số.

Để đưa ra quyết định về một mẫu mới, bộ phân loại đầu tiên nhân mỗi  với tham số của nó , tổng weights các tính năng sau đó được cộng thêm bias term b.

\( z = \sum_{i=0}^{n}w_i * x_i + b \)                                                                                                             (2)

Vì là phân loại nhị phân như đã nói ở trên đầu ra sẽ là y=1 hoặc y=0, do đó ta cần tìm giá trị xác xuất giữa 0 và 1. Nhưng trên thực tế, vì weights có giá trị thực, đầu ra thậm chí có thể là số âm, vì vậy  có thể nằm trong khoảng từ −∞ đến ∞. Để có thể lấy được giá trí xác xuất giữa 0 và 1, ta cần chuyển qua một hàm kích hoạt (activation function).

Hồi quy logistic, tóm lại, được xây dựng với mô hình như sau:

\( \hat{y}=h(x)=\sigma\left(\sum_{i=0}^n w_i \cdot x_i+b\right) \)                                                                 (3)

, trong đó  tương tự hồi quy tuyến tính. Công thức cũng có thể được viết gọn dưới dạng vectơ như sau.

 \(  \hat{y}=h(x)=\sigma\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right) \)                                            (4)

, trong đó

  • x là biểu diễn đặc trưng của đầu vào. Đối với mỗi quan sát đầu vào x(isẽ là một vectơ đặc trưng [x1 , x2 , …, xn].
  • σ là hàm kích hoạt, tính toán giá trị dự đoán y thông qua P(y|x). Trong phần tiếp theo, các hàm kích hoạt sigmoid và softmax sẽ được giới thiệu.

Thuật toán hồi quy logistic được thực hiện trong 2 pha là:

  • Pha đào tạo: học được các hệ số wb
  • Pha thử nghiệm: Với một ví dụ kiểm tra x*, tính \(P(y|x^*) \) và trả về xác suất cao hơn nhãn y = 1 hoặc y = 0.

3.2. Hàm Sigmoid

Hàm sigmoid (hay hàm logit) có dạng như sau:

 \( \sigma(z)=\frac{1}{1+e^{-z}}=\frac{1}{1+\exp (-z)}  \)                                                                               (5)

Hình 2. Đồ thị hàm sigmoid

Hàm sigmoid có hai tính chất quan trọng có ảnh hưởng tới việc chọn hàm này trong hồi quy logistic. Thứ nhất, như đồ thị trong hình 2 cho thấy, giá trị hàm sigmoid  tiến tới 1 khi z tiến tới  và  tiến tới 0 khi z tiến tới . Như vậy bằng cách sử dụng hàm sigmoid, giá trị hàm đích  luôn nằm trong khoảng [0,1]. Thứ hai, ngoài việc hàm sigmoid luôn có giá trị nằm trong khoảng [0,1], hàm này là hàm khả vi với công thức tính đạo hàm  tương đối đơn giản:

\( \sigma(z)^{\prime}=\sigma(z)(1-\sigma(z))     \)                                                                                        (6)

Đạo hàm  được dùng để tính gradient trong quá trình huấn luyện và ước lượng tham số của mô hình.

Do giá trị  luôn nằm trong khoảng [0,1], hồi quy logistic sử dụng giá trị này như xác suất đầu ra y=1 hoặc y=0 khi biết giá trị đầu vào x và tham số w, basis b.

\( P(y=1 \mid x)=\sigma\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)=\frac{1}{1+\exp \left(-\left(\boldsymbol{w}^T \cdot x+b\right)\right)} \)                                                                                                   (7)

\( P(y=0 \mid x)=1-\sigma\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)=1-\frac{1}{1+\exp \left(-\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)\right)}=\frac{\exp \left(-\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)\right)}{\left.1+\exp \left(-\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)\right)}\)          (8)

Hàm sigmoid có tính chất sau: \( 1-\sigma(z) = \sigma(-z) \)

Do đó cũng có thể tính trực tiếp

\( P(y=0 \mid x)=\sigma\left(-\left(\boldsymbol{w}^T \cdot \boldsymbol{x}+b\right)\right) \)                         (9)

3.3.  Bộ phân lớp

Sau khi có xác suất P(y|x), giá trị đầu ra dự đoán được xác định bằng cách so sánh \(\widehat{y}\) với một ngưỡng, chẳng hạn 0.5 (Công thức 9). Nếu \(\widehat{y}>0.5\) tương đương với xác suất P(y=1|x) lớn hơn 50% thì nhãn đầu ra nhận giá trị 1. Nếu ngược lại, nhãn phân loại đầu ra nhận giá trị 0.

\( decision (\boldsymbol{x})=\left\{\begin{array}{c}1 \text { nếu } P(y=1 \mid x)>0.5 \\ 0, \text { nếu ngược lại }\end{array}\right.\)                                                                                                                                              (10)

Trong một số trường hợp ta có thể tăng hoặc giảm ngưỡng này. Ví dụ trong bài toán phát hiện thư rác, nếu coi thư rác có nhãn là 1 và thư thương có nhãn là 0 thì yêu cầu quan trọng là không phân loại nhầm thư thường thành thư rác. Khi đó ta có thể đặt ngưỡng cao hơn, chẳng hạn băng 0.8, tức là nếu mô hình xác định xác suất thư rác lơn hơn 80% thì thư mới được xếp vào loại thư rác.

3.4. Huấn luyện mô hình

Trong quá trình huấn luyện cần xác định các tham số w cho phép tối ưu một hàm mục tiêu nào đó. Trong phương pháp hồi quy tuyến tính thì ta có thể chọn làm mục tiêu là hàm tổng bình phương lỗi, sau đó tìm được tham số cho phép cực tiểu hóa hàm này bằng phương pháp phân tích hoặc phương pháp gradient giảm dần. Tuy nhiên, hàm logistic phức tạp hơn và không thể tìm được lời giải bằng phương pháp tương tự như trong hồi quy tuyến tính. Với hồi quy logistic, việc ước lượng tham số khi huấn luyện mô hình được thực hiện bằng tính toán độ phù hợp cực đại (maximum likelihood).

Độ phù hợp (likelihood) \( L(\boldsymbol{w}) \) của tham số w được định nghĩa là xác suất điều kiện của các giá trị đầu ra y khi biết giá trị đầu vào X và tham số w.

\( L(\boldsymbol{w})=P(\mathbf{y} \mid \mathbf{x}, \boldsymbol{w})\)                                                       (11)

Khi xây dựng mô hình, ta cần xác định tham số w sao cho giá trị đầu ra dự đoán gần với giá trị đầu ra thực trên dữ liệu huấn luyện, hay xác suất giá trị nhãn đầu ra khi biết đầu vào x và tham số w càng lớn càng tốt, tức là độ phù hợp xác định theo công thức trên càng lớn càng tốt. Nguyên tắc xác định tham số cho độ phù hợp lớn nhất được gọi là nguyên lý độ phù hợp cực đại.

Để xác định tham số w, ta sẽ triển khai công thức tính  \( L(\boldsymbol{w}) \). Trước hết, hai công thức

\(P(y=1 \mid \boldsymbol{x}, \boldsymbol{w})=\sigma(z)\)                                                                      (12)

\(P(y=0 \mid \boldsymbol{x}, \boldsymbol{w})=1-\sigma(z)\)                                                                   (13)

có thể viết gọn thành

\(P(y \mid \boldsymbol{x}, \boldsymbol{w})=(\sigma(z))^y \cdot(1-\sigma(z))^{1-y}=h(x)^y \cdot(1-h(x))^{1-y}\)                                                                                                                                                                          (14)

Tiếp theo, do có thể coi các ví dụ huấn luyện là độc lập xác suất với nhau, ta có:

\(\begin{aligned} L(\boldsymbol{w}) & =P(y \mid \boldsymbol{x}, \boldsymbol{w}) \\ & =\prod_{i=1}^m P\left(y_i \mid x_i, w_i\right) \text { <bằng tích xác suất của từng ví dụ huấn luyện> }\\ & =\prod_{i=1}^m h\left(x_i\right)^{y_i} \cdot\left(1-h\left(x_i\right)\right)^{1-y_i}\end{aligned}\)                                                                                     (15)

Ngoài ra để tiện cho việc tính toán, thay vì cực đại hóa \( L(\boldsymbol{w}) \) ta có thể cực đại hóa \( log L(\boldsymbol{w}) \) do hàm logarit là hàm đơn điệu tiến:

\(l(\boldsymbol{w})=\log L(\boldsymbol{w})=\sum_{i=1}^m\left[y_i \log h\left(x_i\right)+\left(1-y_i\right) \log \left(1-h\left(x_i\right)\right)\right]\)                                                                                                                               (16)

Để cực đại hóa làm \(l(\boldsymbol{w})\), ta có thể dùng phương pháp gradient tăng dần (gradient ascent) với công thức cập nhật tham số như sau:

 \(w_j \leftarrow w_j+\alpha \frac{\partial}{\partial w_j} l(\boldsymbol{w})\)                                                 (17)

, trong đó \(\alpha\) là learing rate – một thông số cần được điều chỉnh. Nếu chọn learning rate quá thấp, chương trình phải thực hiện các bước nhỏ dẫn đến lâu đạt được mức minimun. Nếu quá lớn, có thể chương trình sẽ vượt qua mức minimun.

Trong trường hợp dữ liệu huấn luyện gồm nhiều ví dụ, công thức trên cho phép xây dựng quy tắc tăng gradient ngẫu nhiên (stochastic gradient ascent) như sau:

 \(w_j \leftarrow w_j+\alpha\left(y_i-h\left(\mathbf{x}_i\right)\right) x_{i j}   \)                                              (18)

Trong thuật toán stochastic gradient ascent, tại 1 thời điểm ta tính đạo hàm của hàm mất mát dựa trên chỉ một điểm dữ liệu, ví dụ  \(x_i \) rồi cập nhật tham số w dựa trên đạo hàm này. Việc này được thực hiện với từng điểm trên toàn bộ dữ liệu, sau đó lặp lại quá trình trên. Thuật toán rất đơn giản này trên thực tế lại làm việc rất hiệu quả. Thuật toán được viết lại bằng ngôn ngữ Python như đoạn code dưới đây.

Bài viết đã tương đối dài, do đó tôi sẽ để phần 2 – HỒI QUY LOGISTIC CHO PHÂN LOẠI ĐA LỚP trong bài viết sau.

@Hong-Quan Do

Rate this post
Comments: 41

Trả lời