[Course][ML] Logistic Regression

- 8 mins

Classification

Classification hay tiếng việt còn gọi là phân loại, phân lớp. Là bài toán thường gặp trong cuộc sống và được nghiên cứu nhiều trong ML. Một số ví dụ về việc phân loại mà chúng ta thường gặp trong cuộc sống như: phân loại email là spam hay không spam, phân loại một khối u là lành tính hay ác tính, phân loại xem một hành vi trên mạng xã hội có phải là lừa đảo hay không… các ví dụ trên là kết quả mà chúng ta thường nhìn thấy hàng ngày. Vậy thực tế thì chương trình máy tính làm việc như thế nào để đưa ra những kết quả đó.

Trong bài toán phân loại, chương trình máy tính sẽ phải đưa ra nhãn của một điểm dữ liệu, các nhãn này thường được định nghĩa từ trước. Ví dụ ta có thể gán nhãn cho các email không phải spam là 0, các email spam là 1. Hoặc u lành tính là 0, u ác tính là 1… Cũng giống như bài toán Linear regression, ta cũng phải xây dựng một hàm $h_{\theta}(x)$ để mapping từ tập input $X$ và output $y$.

Đi vào bài toán cụ thể: “Phân loại khối u là lành tính hay ác tính, dựa trên kích thước của khối u.” Ở đây, ta có hai nhãn cần phải phân loại là: lành tính(0) và ác tính(1).

Như vậy, ta có thể biếu diễn trên hệ trục toạ độ như hình dưới đây.

logistic regression

Trục hoành biểu diễn kích thước của khối u, trục tung biểu diễn các lớp được phân loại. Trong trường hợp này có 2 nhãn là ác tính có giá trị 1, và u lành có giá trị là 0. Nếu ta áp dụng phương pháp linear regression vào bài toán này, tức là ta sẽ có hàm hypothesis có dạng $h_{\theta}(x)=\Theta^{T}X$. Vẽ đồ thì của hàm $h_{\theta}(x)$ trên hệ trục toạ độ.

logistic regression

Với đồ thì như như thế này thì ta có thể dự đoán kết quả, nếu $h_{\theta}(x) \geq 0.5$ thì $y = 1$, nếu $h_{\theta}(x) < 0.5$ thì $y = 0$.

logistic regression

Tuy nhiên, có một vài vấn đề với vấn đề này. Giả sử như kích thước của khối u có một điểm ngoại lệ như hình trên, khi đó việc dự đoán theo mô hình này sẽ bị sai. Hơn nữa, với việc phân loại, mà cụ thể là trường hợp binary classification(tức là đầu ra chỉ có hai nhãn 0 và 1) như này thì yêu cầu: $0 \leq h_{\theta}(x) \leq 1$. Với bài toán như này thì chúng ta có cách giải quyết với logistic regression

Logistic regression

Trong tên của thuật toán có từ regression, nhưng thực ra đây là thuật toán dùng để phần loại. Mô hình của bài toán này là hàm sigmoid(sigmoid function) hay còn gọi là logistic function.

Khi đó đồ thì hàm $h_{\theta}(x)$ sẽ trở thành như sau:

logistic regression

hàm $h_{\theta}(x)$ luôn nằm trong khoảng $[0,1]$, nghĩa là $h_{\theta}(x)$ luôn mang lại một xác suất để output là 1. Ví dụ: $h_{\theta}(x) = 0.7$ khi đó xác suất để điểm dữ liệu đó có nhãn 1 là 70%, và xác suất điểm dữ liệu đó có nhãn 0 là 30%.

Bởi vì, đầu ra là hai lớp riêng biệt có nhãn là 0 và 1, nên ta giả sử:

Theo như hàm sigmoid ở trên:

$\Rightarrow g(z) \geq 0.5$ khi $z > 0$, và $g(z) < 0.5$ khi $z < 0$. Nghĩa là, $h_{\theta}(x) = g(\theta^{T}x) \geq 0.5$ khi $\theta^{T}x \geq 0$, và $h_{\theta}(x) = g(\theta^{T}x) < 0.5$ khi $\theta^{T}x < 0$

Từ đó ta có thể rút ra kết luận:

$\Rightarrow$ đường tạo bởi $\theta^{T}x$ sẽ chia thành hai vùng có $y = 0$ và $y = 1$. Đường này người ta gọi là decision boundary. Ví dụ:

$\Rightarrow y = 1$ nếu $5 + (-1)x_{1} + 0x_{}2 \geq 0 \Leftrightarrow 5 - x_{1} \geq 0 \Leftrightarrow x_{1} \leq 5$

Trong trường hợp này, đường decision boundary là đường thẳng $x_{1} = 5$ và tất cả mọi điểm nằm bên trái đường thằng này đều có nhãn là $y = 1$, và mọi điểm nằm bên phải đường thằng này đều có nhãn là $y = 0$.

Dĩ nhiên là $\Theta^{T}X$ không nhất thiết phải là hàm tuyến tính, nó có thể là hàm số biểu diễn đường tròn hoặc một hình nào đó tuỳ thuộc vào tập dữ liệu đầu vào.

Cost Function

Trong bài toán logistic regression, chúng ta không thể sử dụng hàm mất mát của linear regression được, vì nó không phải là một hàm lồi, mà là một hàm có nhiều cung với nhiều điểm local optimum. Hàm mất mát của logistic regression có dạng sau:

Khi $y = 1$ thì hàm $J(\theta)$ sẽ được biểu diễn như hình dưới đây.

logistic regression

Khi $y = 0$ thì hàm $J(\theta)$ sẽ được biểu diễn như hình dưới đây.

logistic regression

Ta có thể dễ dàng nhận ra:

Gradient Descent

Ta có thể gộp hai điều kiện của hàm cost function lại thành như sau:

Thật vậy, do $y$ chỉ có 2 giá trị là 0 và 1. Nếu $y = 0$, thì $-y\log(h_{\theta}(x)) = 0$, còn nếu $y = 1$, thì $(1 - y)\log(1 - h_{\theta}(x)) = 0$, vì vậy mà nó không ảnh hưởng gì đến kêt qủa của hàm $Cost(h_{\theta}(x), y)$

Hàm mất mát có thể được viết đầy đủ như sau:

Có thể biểu diễn bằng vector như sau:

Đến đây chúng ta cần phải tối ưu hàm $J(\theta)$, và có một tin tốt là ta có thể sử dụng phương pháp Gradient Descent. Đạo hàm của hàm $J(\theta)$ tại một điểm dữ liệu được tính như sau:

Với $z = \theta^{T}x$ và $h = h_{\theta}(x)$.

Đạo hàm của hàm $\frac{\partial J_{\theta}}{\partial h}$:

Đạo hàm của hàm $\frac{\partial h}{\partial z}$:

Đạo hàm của hàm $\frac{\partial z}{\partial \theta_{j}}$:

$\Rightarrow$ gộp các biểu thức trên lại ta được:

Vậy khi đó đạo hàm của $J(\theta)$ trên toàn bộ tập dữ liệu sẽ là:

Với $h_{\theta}(X) = \frac{1}{1 + e^{-\Theta^TX}}$

Vậy theo phương pháp Gradient descent, tham số sau mỗi vòng lặp được cập nhật theo công thức sau:

Với $\alpha$ là learning rate.

Multiclass Classification: One-vs-all

Trên đây là cách xử lý với binary classification, vậy với bài toán cần phân loại $n$ nhãn khác nhau thì ta phải xử lý chúng như thế nào? Khi đó chúng ta sẽ chia bài toán ra thành $n + 1$ bài toán phân lớp binary classification, và trong mỗi bài toán ta sẽ tính được xác xuất $y$ thuộc nhãn nào.

$\Rightarrow$ Để phân loại n nhãn thì chúng ta cần train n lần

ToanNV

ToanNV

Developer, living in Tokyo, get married.

ToanNV © 2019
rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora