Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Tổng quát hóa bài toán dự đoán bằng Linear Regression

Trong bài toán dự đoán doanh thu phim dựa trên ngân sách bỏ ra, chúng ta đã cùng nhau tìm hiểu về thuật toán Hồi quy tuyến tính - Linear Regression ở dạng cơ bản nhất với chỉ một biến số độc lập. Trong thực tế, nếu dữ liệu có nhiều biến số độc lập hơn, dự đoán sẽ chính xác hơn nhiều.

Bài toán đơn giản: Nếu chúng ta thực hiện bài toán dự đoán giá nhà tại Hà Nội với một biến độc lập là diện tích. Khi đó bài toán sẽ có nhiều sai lệch do cùng một diện tích, giá nhà có thể chênh lệch khá nhiều do vị trí xa hay gần trung tâm thành phố. Thế nên nếu bài toán mở rộng ra với nhiều biến độc lập hơn, số liệu dự đoán sẽ chính xác hơn.

Bài toán mở rộng: Dự đoán giá nhà ở Hà Nội khi biết diện tích $x_1$, khoảng cách đến Hồ Hoàn Kiếm $x_2$ và căn nhà có số tầng là $x_3$. Nếu dữ liệu của bạn có đủ cho các biến độc lập $x_1$, $x_2$, $x_3$, giá trị căn nhà được dự đoán sẽ có độ chính xác cao hơn. Rõ ràng là bài toán này phức tạp hơn so với bài toán ban đầu.

Trước khi bắt đầu, bạn nên tham khảo bài viết Lý thuyết toán ma trận trong Machine Learning bởi bài viết có rất nhiều các khái niệm và tính toán liên quan đến ma trận.

1. Mô tả bài toán tổng quát bằng toán học

Hàm dự đoán sẽ có dạng

$$y \approx f(\textbf{x}) = \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n + \theta_0 = \hat{y}$$

trong đó $\textbf{x} = [x_1, x_2, x_3, ..., x_n]$ là một vector chứa thông tin dữ liệu đầu vào, $y$ là giá trị thực tế cần dự đoán, $\hat{y}$ là một số vô hướng biểu thị dữ liệu đầu ra mà Linear Regression dự đoán được. Nói chung, $y$ và $\hat{y}$ là khác nhau (số thực tế và số dự đoán được bao giờ cũng có sự chênh lệch).

Trong không gian n chiều, phương trình trên có đồ thị là một siêu mặt phẳng, tuyến tính (linear) là bài toán đơn giản nhất trong nhóm Regression.

Một số chú ý về ký hiệu trong công thức toán học: các số (vô hướng) được viết bằng các chữ cái thường $x_1, y$, các vector sẽ được biểu thị bằng chữ in đậm $\textbf{x, z}$ và các ma trận sẽ biểu thị bằng các chữ hoa in đậm $\textbf{X, W}$.

Bài toán của chúng ta là với tập dữ liệu cho trước tìm cách tối ưu tập giá trị {$\theta_0, \theta_1, ... , \theta_n$}. Khi đó chúng ta lại coi $\theta_0, \theta_1, ..., \theta_n$ là các biến số cần tìm do $x_1, ..., x_n$ đã có tập dữ liệu. Đây chính là bài toán Hồi quy tuyến tính tổng quát (Linear Regression) là một dạng bài toán thuộc Regression.

2. Cơ sở toán học cho bài toán Linear Regression

Trong phương trình tổng quát nếu ta đặt $\textbf{θ} = [\theta_0, \theta_1, ..., \theta_n]^T$ là vector chuyển vị của vector hệ số cần tối ưu (tức là chuyển thành vector cột), $\bar{x} = [1, x_1, x_2, ..., x_n]$ là vector dữ liệu đầu vào mở rộng. Khi đó phương trình ban đầu có thể viết thành:

$$y \approx \bar{x}\textbf{θ} = \hat{y}$$

Ý tưởng của Linear Regression là tìm ra siêu mặt phẳng tối ưu nhất sao cho giá trị sau đây là nhỏ nhất:

$$\cfrac {1}{2}e^2 = \cfrac {1}{2}(y - \hat{y})^2 = \cfrac {1}{2}(y - \bar{x}\textbf{θ})^2$$

Nếu bạn đã xem qua series Dự đoán doanh thu phim bằng Linear Regression thì có thể thấy rằng $y - \hat{y}$ chính là độ lệch giữa giá trị thực tế và giá trị dự đoán. Giá trị này có thể âm hoặc dương, âm nếu điểm $(x_{0_0}, x_{1_0}, ..., x_{n_0})$ nằm "dưới" siêu mặt phẳng. Ý tưởng tổng quát của Linear Regression là tìm ra siêu mặt phẳng sao cho độ lệch từ các điểm dữ liệu cho trước $M_0(x_{0_0}, x_{1_0}, ..., x_{n_0})$, ...,$M_m(x_{0_m}, x_{1_m}, ..., x_{n_m})$ đến siêu mặt phẳng là ít nhất. Chú ý, ở đây tập dữ liệu đầu vào có m dòng cho các biến số $x_1, ..., x_n$.

Ý tưởng Linear Regression

Chúng ta không dùng giá trị tuyệt đối cho độ lệch để giá trị nó dương bởi vì phần tiếp theo chúng ta sẽ dùng đạo hàm để tìm ra giá trị nhỏ nhất mà đạo hàm của trị tuyệt đối không xác định tại điểm gốc tọa độ. Hẳn bạn còn nhớ đạo hàm của hàm số $y = |x|$ như sau:

$$y^{\prime} = \begin{cases} 1 & \text{nếu $x > 0$} \cr -1 & \text{nếu $x < 0$} \cr \not\exists & \text{nếu $x = 0$}\end{cases}$$

Hệ số $\cfrac {1}{2}$ cũng là để thuận tiện khi tính đạo hàm, nó giúp cho triệt tiêu 2 từ số mũ khi đạo hàm. Ngoài ra cần tính bình phương độ lệch do kể cả khi độ lệch cực nhỏ tiến đến $-\infty$ nhưng sai số cực lớn.

Với ý tưởng ở trên chúng ta có hàm tính toán tổng bình phương độ lệch (loss function) như sau:

$$\mathcal{L}(\mathbf{θ}) = \frac{1}{2}\sum_{i=1}^m (y_i - \mathbf{\bar{x}_i}\mathbf{θ})^2$$

Trong đó m là số lượng dữ liệu trong tập dữ liệu chúng ta có. Để tìm lời giải bài toán này, chúng ta cùng đơn giản các phép toán như sau. Đặt

$$\mathbf{y} = \begin{bmatrix} y_1 \cr y_2 \cr \vdots \cr y_m \end{bmatrix}$$

là vector chứa các đầu ra của dữ liệu training đầu vào $\mathbf{\bar{X}} = [\mathbf{\bar{x}}_1; \mathbf{\bar{x}}_2; \dots; \mathbf{\bar{x}}_m ]$ ma trận dữ liệu đầu vào (mở rộng) mà mỗi hàng của nó là một điểm dữ liệu. Khi đó hàm loss function có thể được viết lại như sau:

$$ \mathcal{L}(\mathbf{θ}) = \frac{1}{2}\sum_{i=1}^m (y_i - \mathbf{\bar{x}}_i\mathbf{θ})^2 = \frac{1}{2} ||\mathbf{y} - \mathbf{\bar{X}}\mathbf{θ} ||_2^2 $$

Cách tốt nhất để tìm nghiệm cho bài toán cực trị là giải phương trình đạo hàm của nó bằng 0. Đạo hàm của loss function theo biến $θ$ có dạng:

$$\frac{\partial{\mathcal{L}(\mathbf{θ})}}{\partial{\mathbf{θ}}} = \mathbf{\bar{X}}^T(\mathbf{\bar{X}}\mathbf{θ} - \mathbf{y})$$

Phương trình đạo hàm bằng 0 như sau:

$$\mathbf{\bar{X}}^T\mathbf{\bar{X}}\mathbf{θ} = \mathbf{\bar{X}}^T\mathbf{y}$$

Đặt $\mathbf{\bar{X}}^T\mathbf{y}$ bằng $\mathbf{b}$ ta có:

$$\mathbf{\bar{X}}^T\mathbf{\bar{X}}\mathbf{θ} = \mathbf{b}$$

Nếu ma trận vuông $A = \mathbf{\bar{X}}^T\mathbf{\bar{X}}$ khả nghịch thì ta có nghiệm của phương trình sẽ là:

$$\mathbf{θ} = \mathbf{A}^{-1}\mathbf{b}$$

Như vậy chúng ta đã có cơ sở toán học để xác định nghiệm cho bài toán Linear Regression.


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Thực hiện Linear Regression với Scikit-learn

Người dùng nhập liệu với hàm input() trong Python

3 Bình luận trong "Tổng quát hóa bài toán dự đoán bằng Linear Regression"

  1. Mít đặc

    3 years ago

    Phản hồi

    Đọc xong bài này đầu óc quay cu đơ luôn, khó hiểu quá.

    1. FirebirD

      3 years ago

      Phản hồi

      Để dễ hiểu hơn bạn cần theo trình tự từ bài toán cụ thể đến bài toán tổng quát: 

      1. Xem qua series Dự đoán doanh thu phim - đây là bài toán 1 biến đơn giản nhất trong Linear Regression.
      2. Đọc lý thuyết về toán ma trận (đại số tuyến tính)

      Bạn chỉ cần hiểu ý tưởng của thuật toán, vì các cài đặt này đã có sẵn các thư viện trong Python chúng ta có thể sử dụng ngay mà không cần hiểu về nguyên lý. Tuy nhiên nếu không nắm rõ lý thuyết toán, sẽ có một số các đánh giá thuật toán sau này khó hiểu hơn và bạn cũng không biết khi nào nên áp dụng thuật toán machine learning nào cho vấn đề cụ thể nào.

  2. error

    2 years ago

    Phản hồi

    có thể chi tiết hơn trong code không ạ sử dụng toàn thứ có sẵn như vậy thì thelta các thứ sao vậy bài toán và lý thuyết đâu còn giá trị :(( chỉ đơn giản đọc file và python thực hiện không có trình bày bước giải sao ra pt đường thẳng hàm mất mát ....

Thêm bình luận