So sánh thuật toán phân loại và hồi quy năm 2024
Trong lớp các mô hình học có giám sát (supervised learning) thì có hai bài toán chính là bài toán dự báo (đối với biến mục tiêu liên tục) và bài toán phân loại (đối với biến mục tiêu là rời rạc). Chúng ta đã được tìm hiểu về bài toán dự báo và mô hình hồi qui tuyến tính ở bài trước. Trong bài này chúng ta sẽ tiếp tục tìm hiểu về bài toán phân loại và mô hình hồi qui logistic. Bài toán phân loại là lớp bài toán được ứng dụng phổ biến nhất trong machine learning. Có rất nhiều các tác vụ mà chúng ta có thể kể đến liên quan tới lớp bài toán phân loại:
Bên trên là một vài ứng dụng nhỏ để bạn đọc hình dung rõ hơn về tính hữu ích và sự phổ biến của các bài toán phân loại trong học có giám sát? Có thể thấy rằng bài toán phân loại hiện tại đang giải quyết rất nhiều vấn đề mà con người đang phải đối mặt. Đồng thời với vai trò to lớn của mình, nó đã và đang mang lại nhiều thay đổi cho nhân loại. Với sự bùng nổ về thuật toán, năng lực tính toán và sự dồi dào của dữ liệu. Ngày càng có nhiều ứng dụng của mô hình phân loại đạt độ chính xác ở mức con người hay thậm chí là vượt trội và thay thế con người trong nhiều tác vụ khác nhau. Trong chương này chúng ta sẽ cùng tìm hiểu một mô hình phân loại khá phổ biến trong machine learning. Đó là mô hình hồi qui Logistic trong phân loại nhị phân của học có giám sát. Thế nào là phân loại nhị phân? Phân loại nhị phân là bài toán phân loại có biến mục tiêu gồm hai nhãn \(\{0, 1\}\). Trong đó nhãn 1 là tích cực (postive) và nhãn 0 là tiêu cực (negative). Nhãn tích cực ở đây hàm chứa ý nghĩa xảy ra sự kiện và tiêu cực là sự vắng mặt của sự kiện. Mục tiêu của phân loại nhị phân là dự báo xác suất xảy ra hoặc vắng mặt của sự kiện lần lượt tương ứng với nhãn 1 và 0. Tổng của hai xác suất này bằng 1: \[P(y=1|\mathbf{x}, \mathbf{w}) + P(y=0|\mathbf{x}, \mathbf{w})=1\] Trong công thức trên thì \(P(y=1|\mathbf{x})\) là xác suất có điều kiện, nó thể hiện xác suất của tích cực tại một quan sát \(\mathbf{x}\) ứng với một mô hình cụ thể có trọng số \(\mathbf{w}\). Giá trị của xác suất này nằm trong khoảng \([0, 1]\). Chính vì thế trong hồi qui tuyến tính chúng ta sẽ đề xuất một hàm giả thuyết \(0 \leq h_{\mathbf{w}}(\mathbf{x}) \leq 1\) để dự báo xác suất. Hàm này là hàm Sigmoid hoặc hàm Logistic mà chúng ta sẽ tìm hiểu ở mục sau. Tại sao không phân loại dựa trên hồi qui tuyến tính ? Chúng ta thường thắc mắc rằng xác suất là một biến liên tục, như vậy mô hình hồi qui tuyến tính hoàn toàn có thể được sử dụng để dự báo xác suất. Nhưng tại sao không sử dụng mô hình hồi qui tuyến tính trong bài toán phân loại? Có nhiều nguyên nhân khiến cho mô hình hồi qui tuyến tính không hoạt động tốt trên các tác vụ phân loại trong học có giám sát. Đó là:
Thật vậy: Giả sử chúng ta cần xây dựng một mô hình dự báo nợ xấu cho biến \(\mathbf{y}\) (nhãn 0 là bình thường, nhãn 1 là nợ xấu). Các giá trị đầu vào bao gồm hai biến \(\mathbf{x}_1\) là giá trị khoản vay, và \(\mathbf{x}_2\) là tiền lương như sau: \(\mathbf{x}_1 = [125, 140, 175, 180, 180, 200, 225, 245, 270, 280, 120, 100, 90, 85, 80, 80, 70, 50, 50, 40]\) \(\mathbf{x}_2 = [15, 18, 20, 25, 25, 25, 27, 30, 32, 35, 45, 50, 50, 55, 55, 55, 60, 70, 80, 90]\) \(\mathbf{y} = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\) import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams.update({'font.size': 22}) import numpy as np x1 = np.array([[125, 140, 175, 180, 180, 200, 225, 245, 270, 280, 120, 100, 90, 85, 80, 80, 70, 50, 50, 40]]) x2 = np.array([[15, 18, 20, 25, 25, 25, 27, 30, 32, 35, 45, 50, 50, 55, 55, 55, 60, 70, 80, 90]]) y = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) def _plot(x, y, title="", xlabel="", ylabel=""): plt.figure(figsize = (16, 8)) plt.scatter(x, y, marker = 'o') x_min = np.min(x) plt.axhline(1, color="green") plt.text(x_min, 0.9, "y=1.0") plt.axhline(0, color="red") plt.text(x_min, 0.05, "y=0.0") plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) plt.show() _plot(x1, y,
_plot(x2, y,
Như vậy ta có thể thấy khi lương càng thấp thì khả năng vỡ nợ càng cao và khi dư nợ càng cao thì khả năng vỡ nợ càng cao. Tiếp theo chúng ta xây dựng mô hình hồi qui tuyến tính và dự báo để kiểm chứng miền biến của giá trị dự báo \(\hat{y}\). from sklearn import linear_model regr = linear_model.LinearRegression(fit_intercept=True) # fit_intercept = False for calculating the bias X = np.concatenate([x1, x2], axis = 0).T regr.fit(X, y) Dự báo giá trị của \(y\) và biểu đồ hoá giá trị dự báo Dự báo giá nhà ngay trên tập trainypred = regr.predict(X) Đồ thị hoá_plot(x2, ypred,
Như vậy có một số giá trị đã vượt ngoài khoảng xác suất là \([0, 1]\) như đồ thị ở hình trên. Điều đó chứng tỏ hồi qui tuyến tính không phù hợp để dự báo xác suất. Ngoài ra mô hình hồi qui tuyến tính quá đơn giản để phân chia tốt các nhóm dữ liệu và đồng thời hồi qui tuyến tính cũng rất nhạy cảm với các điểm dữ liệu outliers là những nguyên nhân khác khiến cho nó dường như là không được sử dụng nhiều cho mục đích phân loại (mặc dù trên thực tế chúng vẫn có khả năng phân loại). |