Trong bài trước chúng ta đã tìm hiểu nguyên tắc cơ bản của việc huấn luyện mô hình machine learning thông qua việc tối ưu hoá các hàm mục tiêu và tìm hiểu một ví dụ về việc dự đoán mức độ hài lòng đối với công việc của nhân viên theo mức lương. Tuy nhiên, chúng ta chưa chi tiết vấn đề làm như thế nào. Trong bài này, chúng ta sẽ chi tiết hoá các vấn đề này thông qua một trong những thuật toán cơ bản và có lẽ là đơn giản nhất trong machine learning đó là Linear Regression (Hồi quy tuyến tính). Đây là một trong những mô hình tốt nhất để chúng ta bắt đầu tìm hiểu về machine learning do tính đơn giản và trực quan của nó.
Linear Regression
Trước khi xem xét Linear Regression là gì, chúng ta xem xét một số ví dụ:
Ví dụ 1. Quay lại ví dụ ở bài trước về dự đoán mức độ hài lòng của nhân viên qua mức lương. Gọi \(x_1\) là mức lương của nhân viên và \(y\) là mức độ hài lòng với công việc của nhân viên. Giả sử chúng ta đã có số liệu thống kê từ hơn 100 nhân viên trong công ty thông qua một cuộc khảo sát nặc danh, liệu rằng khi tuyển dụng một nhân viên mới vào công ty, ta có thể đưa ra mức lương vừa phù hợp với năng lực lại vừa làm hài lòng nhân viên hay không?
Ví dụ 2. Tiếp tục ví dụ trên với điều kiện phức tạp hơn, đó là ngoài mức lương \(x_1\), chúng ta còn cho rằng các điều kiện như giờ làm thêm mỗi tháng \(x_2\), và số sự kiện team building được tổ chức hàng năm \(x_3\) cũng có thể ảnh hưởng đến mức độ hài lòng với công việc của nhân viên. Vậy trong trường hợp này các yếu tố ảnh hưởng như thế nào? Làm thế nào để cải thiện mức độ hài lòng với công việc của nhân viên?
Ví dụ 3. Một loại thuốc A có dược lực (mức độ hiệu quả) bị ảnh hưởng theo thời gian bảo quản \(x_1\), nhiệt độ bảo quản \(x_2\) và độ ẩm bảo quản \(x_3\). Vậy có một mô hình nào để dự đoán được dược lực còn lại của thuốc sau một thời gian với điều kiện nhiệt độ và độ ẩm đã cho hay không?
Dạng thức tổng quát
Trong tất cả các ví dụ trên, chúng ta có thể đưa ra một hàm dự đoán \(y=f(X)\) dựa trên các thông tin đầu vào (input) của dữ liệu được cung cấp \(X=[x_1,x_2,x_3]\), trong đó hàm \(f\) biểu diễn quan hệ của đầu ra \(y\) theo các đầu vào \(X\), và \(y\) nhận các giá trị liên tục.
Một cách đơn giản chúng ta có thể suy ra rằng trong 2 ví dụ đầu tiên thì rõ ràng mức lương \(x_1\) cao sẽ nhiều khả năng đồng nghĩa với độ hài lòng công việc cao hơn, số giờ làm thêm \(x_2\) sẽ nhiều khả năng làm giảm độ hài lòng và các sự kiện team building \(x_3\) có thể làm tăng mức độ hài lòng với công việc. Và trong ví dụ thứ ba, nhiệt độ \(x_2\) cao, độ ẩm \(x_3\) cao và thời gian bảo quản \(x_1\) đã lâu thì chất lượng hay hoạt lực của thuốc đều giảm đi.
Các bài toán trên đều là các bài toán thuộc loại regression trong đó giá trị cần dự đoán \(y\) là dạng liên tục phụ thuộc vào các biến đầu vào \(x_1, x_2, x_3\). Mức độ ảnh hưởng của các yếu tố (biến đầu vào) này có thể rất phức tạp (phi tuyến), tuy nhiên để đơn giản chúng ta có thể biểu diễn các quan hệ này dưới dạng một quan hệ tuyến tính, hay hàm tuyến tính. Sở dĩ chúng ta sử dụng các hàm số tuyến tính đầu tiên bởi đây là các hàm đơn giản nhất, và thuận tiện nhất trong việc hình dung và tính toán. Chẳng hạn, trên mặt phằng 2 chiều quan hệ tuyến tính được biểu diễn dưới dạng một đường thẳng, trong không gian 3 chiều nó được biểu diễn dưới dạng một mặt phẳng, còn trong không gian nhiều hơn 3 chiều, chúng ta có một khái niệm là siêu phẳng (hyperplane) và do đó dễ dàng trong tính toán và biểu diễn. Lưu ý rằng dù quan hệ phi tuyến chúng ta cũng có thể đưa về các quan hệ tuyến tính bằng một chút thủ thuật đơn giản. Tuy nhiên, ở đây chúng ta chưa quan tâm đến vấn đề này mà để đơn giản chúng ta chỉ giả sử rằng các quan hệ này là tuyến tính (linear) và sẽ quay lại vấn đề này ở Bài các mô hình Hồi quy phía sau trong Series này. Dạng biểu diễn tuyến tính của các bài toán trên có dạng như sau:
\(f(X) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_3 \)
trong đó \(w_0, w_1, w_2, w_3\) là các hằng số (tham số của mô hình), \(w_0\) còn được gọi là bias (độ lệch) có nghĩa là dù có lương thấp đến đâu thì khi điền phiếu điều tra nhân viên vẫn cho điểm hài lòng lớn hơn một ngưỡng nào đó. Để tìm được hàm \(f\) có nghĩa là chúng ta phải tìm được các tham số \(w_0, w_1, w_2, w_3\). Đây gọi là bài toán Hồi quy tuyến tính nhiều biến (multivariate linear regression).

Mô hình hồi quy tuyến tính trong không gian hai chiều (đường thẳng) và 3 chiều (mặt phẳng)
Một cách tổng quát hơn, trong không gian \(n\) chiều, tức là chúng ta có \(n\) thuộc tính hay cần dự đoán giá trị \(y\) theo \(n\) biến khác nhau \(X=[x_1,x_2,\ldots, x_n]\). Khi đó, gọi \(\bar{X} = [1,x_1, x_2,\ldots,x_n]\) và \(W=[w_0,w_1, w_2, \ldots,w_n]^T\) thì, hàm \(f\) cần xây dựng sẽ có dạng:
\(f(X) = w_0+w_1 x_1 + w_2 x_2 + \ldots + w_n x_n = \bar{X}\cdot W\)
Lưu ý rằng, số 1 được thêm vào \(\bar{X}\) để tiện biểu diễn giá trị bias có hệ số \(w_0\).
Trong trường hợp suy biến ở ví dụ 1, ta có:
\(f(x_1) = w_0 + w_1 x_1\)
Lúc này mô hình gọi là mô hình hồi quy tuyến tính một biến (Simple linear regression). Cả hai trường hợp trên chúng ta gọi chung là các mô hình hồi quy tuyến tính (Linear Regression).
Hàm mất mát (Loss Function)
Trong bài toán regression, ta có các giá trị \(y^{(i)}\) là giá trị thực của đầu ra (outcome) được gắn nhãn tương ứng với đầu vào thứ \(i: X^{(i)}=[x^{(i)}_1, x^{(i)}_2, \ldots,x^{(i)}_n]\) và xác định sẵn trong bộ dữ liệu huấn luyện (training data). Giả sử chúng ta xây dựng được một mô hình hồi quy \(f\), thì từ \(f\), chúng ta có thể tính được các giá trị dự đoán \(\hat{y}^{(i)}\) tương ứng với mỗi đầu vào \(X^{(i)} = [x^{(i)}_1, x^{(i)}_2, \ldots,x^{(i)}_n]\). Nhìn chung, hai giá trị \(y^{(i)}\) và \(\hat{y}^{(i)}\) là khác nhau do sai số của mô hình dự doán.
Như chúng ta đã thấy ở bài trước, có vô số các mô hình \(f\) mà ta có thể xây dựng được, tuy nhiên mỗi mô hình lại cho một sai số dự đoán khác nhau. Mô hình cho sai số nhỏ nhất là mô hình tốt nhất mà chúng ta cần tìm. Sai số dự đoán của mẫu dữ liệu thứ \(i\) được tính bằng: \(y^{(i)}-\hat{y}^{(i)}\).
Tuy nhiên, cũng như đã nói trong bài trước, sai số này có thể bị triệt tiêu do dấu của sai số hoặc trong trường hợp giá trị của \(e=-\infty\) là rất rất nhỏ nhưng thực sự thì sự sai lệch ở đây lại rất lớn do đó nó không thể hiện được đúng mức độ sai lệch mà chúng ta mong muốn. Vì vậy, chúng ta cần lượng hoá nó bằng cường độ sai số (không âm). Để đơn giản, ta có thể chọn hàm trị tuyệt đối \(|y^{(i)}-\hat{y}^{(i)}|\) hoặc hàm bình phương \((y^{(i)}-\hat{y}^{(i)})^2\) hoặc một số hàm khác (tham khảo bài viết này). Và để đơn giản trong việc lấy đạo hàm, ở đây chúng ta sử dụng giá trị sai số được tính bằng:
\((y^{(i)}-\hat{y}^{(i)})^2 = (y^{(i)}-\bar{X}^{(i)}W)^2\)
Hãy nhớ lại một định lý toán học mà các bạn học trước đây đó là giá trị cực trị của hàm số sẽ đạt tại các điểm có đạo hàm bằng 0. Do đó, các hàm dễ tính được đạo hàm và đạo hàm có dạng đơn giản sẽ dễ dàng để tối ưu hơn rất nhiều. Sau này, một số thuật toán khác để tối ưu tham số trong machine learning cũng đều dựa trên đạo hàm. Do đó, các hàm có đạo hàm đơn giản sẽ thực sự rất rất hữu dụng !!!
Đến đây, chúng ta hãy quay lại bài toán của chúng ta. Chúng ta không chỉ mong muốn mô hình dự đoán tốt trên duy nhất một điểm dữ liệu \(i\) mà mục tiêu của chúng ta đặt ra là tìm ra các mô hình dự đoán cho sai số dự đoán trên toàn bộ tập huấn luyện là nhỏ nhất. Việc tối ưu sai số trên toàn bộ tập huấn luyện thì hơi khó, do đó chúng ta quy về việc tối ưu sai số trung bình trên toàn tập huấn luyện.
Với tất cả các cặp giá trị \((X^{(i)}, y^{(i)})\) trong bộ dữ liệu huấn luyện, sai số dự đoán trung bình của mô hình là:
\(\mathcal{L}(W) = \frac{1}{n}\sum_{i=1}^n (y^{(i)}-\hat{y}^{(i)})^2 = \frac{1}{n}\sum_{i=1}^n (y^{(i)}-\bar{X}^{(i)}W)^2\)
Hàm số \(\mathcal{L}(W)\) này được gọi là hàm mất mát (loss function) của bài toán Linear Regression. Không mất tính chính xác của nghiệm và để thuận tiện cho lấy đạo hàm khi tìm nghiệm ở bước sau, chúng ta nhân thêm một hệ số \(\frac{1}{2}\) vào hàm mất mát để thu được dạng của hàm mất mát được sử dụng cuối cùng là:
\(\mathcal{L}(W) = \frac{1}{2n}\sum_{i=1}^n (y^{(i)}-\hat{y}^{(i)})^2 = \frac{1}{2n}\sum_{i=1}^n (y^{(i)}-\bar{X}^{(i)}W)^2\)
Lưu ý rằng, việc này không nhất thiết phải thực hiện, chúng ta vẫn có thể lấy đạo hàm thông thường khi không có hệ số này, nhưng kết quả sẽ vẫn còn một hệ số 2 ở trên tử số nhìn có vẻ “không đẹp”, do đó ta thêm vào để kết quả nhìn cho có vẻ đẹp hơn mà thôi. Điều này không làm thay đổi đến nghiệm (tức là hệ số \(W\) cần tìm) bởi hằng số không làm thay đổi kết quả của phương trình đạo hàm có giá trị bằng 0.
Nghiệm của bài toán Linear Regression và mô hình machine learning cho bài toán Linear Regression
Bây giờ, chúng ta đã xác định được hàm mục tiêu để tối ưu mô hình. Mục tiêu của chúng ta tiếp theo là tìm mô hình (hay các hệ số \(W\) để tối thiểu hoá hàm số này. Chúng ta cần tìm ra các vector hệ số \(W=[w_0,w_1, \ldots,w_n]\) sao cho hàm mất mát \(\mathcal{L}(W)\) đạt giá trị nhỏ nhất. Giá trị của \(W\) mà tại đó hàm mất mát đạt giá trị nhỏ nhất được gọi là nghiệm tối ưu của bài toán, ký hiệu:
\(W^*=arg\underset{W}{\min} \mathcal{L}(W)\)
Để đơn giản hóa phép toán trong phương trình hàm mất mát, chúng ta đặt: \(Y=[y^{(1)}, y^{(2)}, \ldots, y^{(n)}]\) là một vector cột chứa tất cả các output của dữ liệu huấn luyện và \(\bar{\mathcal{X}} = [\bar{X}^{(1)}, \bar{X}^{(2)}, \ldots, \bar{X}^{(n)}]\) là 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 mở rộng (tức là có số 1). Khi đó hàm số mất mát \(\mathcal{L}(W)\) được viết lại thành:
\(\mathcal{L}(W) = \frac{1}{2n}\sum_{i=1}^n (y^{(i)}-\hat{y}^{(i)})^2 = \frac{1}{2n}\sum_{i=1}^n (y^{(i)}-\bar{X}^{(i)}W)^2 = \frac{1}{2n}||Y-\bar{\mathcal{X}}W||^2\)
Với \(||\cdot||\) là chuẩn Euclid, hay khoảng cách Euclid thông thường mà chúng ta vẫn học trong chương trình phổ thông và được tính bằng căn bậc hai của tổng của bình phương mỗi phần tử của vector.
Trong chương trình phổ thông lớp 12, chắc hẳn bạn cũng đã khá quen với một cách được sử dụng rất phổ biến để tìm cực trị cho một hàm số là giải phương trình đạo hàm bằng 0! Với hàm nhiều biến, chúng ta gọi đạo hàm theo từng biến là các gradient, và điều tương tự cũng diễn ra, tức là để tìm cực trị chúng ta sẽ giải các phương trình gradient bằng 0. Gradient thực chất là việc đạo hàm theo từng biến với điều kiện coi các biến khác là hằng số. Tức là ta cần giải phương trình:
\(\frac{\partial \mathcal{L}(W)}{\partial W}=0\), hay \(\frac{\partial \mathcal{L}(W)}{\partial w_i}=0, \forall i=0,1,\ldots,n\)
Ở đây, với mô hình hồi quy tuyến tính, rất may mắn là việc tính đạo hàm và giải phương trình đạo hàm bằng 0 đối với hàm mất mát không quá phức tạp. Trong nhiều mô hình khác, chẳng hạn như SVM hay mạng nơ ron, việc tính và giải các phương trình này là cực kỳ phức tạp và chúng ta thường phải sử dụng các phương pháp gần đúng như Gradient Descent. Chúng ta sẽ học nó trong các bài sau. Còn ở đây, đạo hàm chúng ta có thể tính được và dạng của nó cho dưới đây:
\(\frac{\partial \mathcal{L}(W)}{\partial W} = -\bar{\mathcal{X}}^T(Y-\bar{\mathcal{X}}W) = \bar{\mathcal{X}}^T\bar{\mathcal{X}}W – \bar{\mathcal{X}}^TY\)
Phương trình đạo hàm bằng 0 tương đương với:
\(\bar{\mathcal{X}}^T\bar{\mathcal{X}}W – \bar{\mathcal{X}}^TY = 0\) hay \(\bar{\mathcal{X}}^T\bar{\mathcal{X}}W = \bar{\mathcal{X}}^TY\)
Với, điều kiện \(\bar{\mathcal{X}}^T\bar{\mathcal{X}}\) là ma trận khả nghịch, thì ta có nghiệm duy nhất của phương trình trên là:
\(W=(\bar{\mathcal{X}}^T\bar{\mathcal{X}})^{-1}\bar{\mathcal{X}}^TY\)
Trong điều kiện ngược lại, khi \(\bar{\mathcal{X}}^T\bar{\mathcal{X}}\) không khả nghịch thì phương trình vô nghiệm hoặc vô số nghiệm, tuy nhiên, chúng ta không xét đến trường hợp này ở đây.
Nếu các bạn thấy đống công thức trên khá khó hiểu, thì có một cách đơn giản hơn sau đây.
Chúng ta đã biết ở trên gradient tương đương với việc tính đạo hàm riêng theo từng biến và coi các biến khác là hằng số. Thế thì, từ phương trình
\(\frac{\partial \mathcal{L}(W)}{\partial w_i}=0, \forall i=0,1,\ldots,n\)
ta có:
\(\frac{\partial \mathcal{L}(W)}{\partial w_i} = \frac{1}{n}\sum_{j=1}^n (y^{(j)} – w_0 – w_1 x^{(j)}_1 – w_2 x^{(j)}_2 – \ldots – w_n x^{(j)}_n) (-x^{(j)}_i)=0 , \forall i=0,1,\ldots,n\)
Tức là chúng ta sẽ thu được một hệ phương trình \(n + 1\) phương trình và \(n+1\) ẩn và giải hệ phương trình này, ta có thể thu được các giá trị \(w_i\) tương ứng. Tức là chúng ta có thể tìm được hệ số $W$ của mô hình từ hệ phương trình này. Và công thức nghiệm ở trên thực chất cũng là biểu diễn cho nghiệm của hệ phương trình này, với một cách phức tạp hơn.
Thực nghiệm xây dựng mô hình machine learning cho bài toán hồi quy trên Python
Trong phần này, để dễ hiểu hơn về mặt ký hiệu ở trên chúng ta sẽ xem xét một ví dụ đơn giản cho bài toán hồi quy tuyến tính một chiều dưới đây. Trong ví dụ này, dữ liệu đầu vào chỉ có 1 thuộc tính (1 chiều) để thuận tiện cho việc minh hoạ trong mặt phẳng. Để đánh giá độ chính xác của công thức nghiệm ở trên, chúng ta sẽ tiến hành so sánh nó với nghiệm tìm được khi sử dụng thư viện học máy scikit-learn của Python (một trong những thư viện được sử dụng phổ biến nhất hiện nay trong machine learning).
Cho bảng dữ liệu thể hiện tỷ lệ hoạt lực của loại thuốc X sau mỗi năm bảo quản như sau:
Năm | 1 | 2 | 3 | 4 | 5 |
Tỷ lệ | 96 | 84 | 70 | 58 | 52 |
- Xây dựng đường hồi quy tuyến tính thể hiện tỷ lệ hoạt động của thuốc X qua thời gian
- Thể hiện bằng cách vẽ đồ thị bằng matplotlib
- Dựa trên kết quả hồi quy trên, hãy xác định thời gian hết hạn của thuốc và thời điểm mà thuốc chỉ còn lại 80% hoạt lực.
Đây là một bài toán hồi quy tuyến tính một chiều đơn giản trong đó nhiệm vụ của chúng ta là phải dự đoán được tỷ lệ hoạt động còn lại của một loạt thuốc X theo thời gian. Tất nhiên thuốc để càng lâu thì tỷ lệ hoạt động càng giảm. Tức là quan hệ ở đây là quan hệ tỷ lệ nghịch.
Đầu tiên, để thuận lợi cho việc tính toán chúng ta thêm vào thư viện numpy để phục vụ cho việc xử lý các phép tính trên đại số tuyến tính và sử dụng thêm thư viện matplotlib cho việc vẽ hình minh họa trực quan kết quả.
1 2 |
import numpy as np import matplotlib.pyplot as plt |
Tiếp theo, để tiện theo dõi, chúng ta khai báo và biểu diễn dữ liệu trên một đồ thị.
1 2 3 4 5 6 7 8 9 |
# Sử dụng np.array để đưa các phép toán cho thư viện numpy xử lý X = np.array([[1,2,3,4,5]]).T y = np.array([[ 96,84,70,58,52]]).T # Vẽ đồ thị để biểu diễn dữ liệu plt.plot(X, y, 'ro') plt.axis([0, 10, 40, 100]) plt.xlabel('Số năm') plt.ylabel('Tỷ lệ hoạt động') plt.show() |
Từ đồ thị này ta thấy rằng dữ liệu được sắp xếp gần như theo 1 đường thẳng nghịch biến, và do đó mô hình Linear Regression nhiều khả năng sẽ cho kết quả tốt:
\(y=w_1 x + w_0\)
Tiếp theo, chúng ta sẽ tính toán các hệ số \(W=[w_0, w_1]\) theo công thức ở trên. Đầu tiên, ghép vào ma trận để thu được ma trận \(\bar{\mathcal{X}}\):
1 2 |
one = np.ones((X.shape[0], 1)) Xbar = np.concatenate((one, X), axis = 1) |
Khi đó Xbar của chúng ta sẽ có dạng:
1 2 3 4 5 |
[[1. 1.] [1. 2.] [1. 3.] [1. 4.] [1. 5.]] |
Tiếp theo, chúng ta tính nghiệm theo công thức:
1 2 3 4 |
A = np.dot(Xbar.T, Xbar) b = np.dot(Xbar.T, y) w = np.dot(np.linalg.inv(A), b) print('w = ', w) |
Thu được:
1 2 |
w = [[106.2] [-11.4]] |
Tương ứng với phương trình hồi quy: \(y=106.2 – 11.4 x\).
Vẽ đường thẳng hồi quy trên đồ thị và hiển thị lại các điểm trên đồ thị để so sánh kết quả hồi quy:
1 2 3 4 5 6 7 8 9 10 11 |
w_0 = w[0][0] w_1 = w[1][0] x0 = np.linspace(0, 10, 2) y0 = w_0 + w_1*x0 plt.plot(X.T, y.T, 'ro') plt.plot(x0, y0) plt.axis([0, 10, 40, 100]) plt.xlabel('Số năm') plt.ylabel('Tỷ lệ hoạt động') plt.show() |
Từ đồ thị bên trên ta thấy rằng các điểm dữ liệu màu đỏ nằm khá gần đường thẳng dự đoán màu xanh. Vậy mô hình Linear Regression hoạt động tốt với tập dữ liệu huấn luyện đã cho.
Khi hoạt lực còn 80% tức là: \(80=106.2-11.4 x\) hay \(x= 2.3\) năm, tức là nếu chúng ta quy ước thuốc còn tối thiểu 80% hoạt lực là còn hạn sử dụng thì hạn sử dụng của thuốc ở đây sẽ là khoảng 2 năm.
Tiếp theo, chúng ta sẽ sử dụng thư viện scikit-learn của Python để tìm nghiệm và so sánh với kết quả theo công thức.
1 2 3 4 5 6 7 |
from sklearn import linear_model model = linear_model.LinearRegression(fit_intercept=False) model.fit(Xbar, y) print( 'Mô hình tính theo sklearn: ', model.coef_ ) print( 'Mô hình tính theo công thức: ', w.T) |
Kết quả thu được:
1 2 |
Mô hình tính theo sklearn: [[106.2 -11.4]] Mô hình tính theo công thức: [[106.2 -11.4]] |
Chúng ta thấy rằng hai kết quả thu được ở trên là như nhau! Hay nói cách khác, các phân tích của chúng ta ở trên là đúng!
Mặc dù, còn khá nhiều điều cần nói về các mô hình machine learning dạng hồi quy, đặc biệt là trường hợp Hồi quy nhiều chiều hay hồi quy phi tuyến. Tuy nhiên, do thời lượng có hạn cũng như mục đích của bài viết này chỉ để chúng ta nắm được cơ bản việc huấn luyện mô hình machine learning là như thế nào. Do đó, các vấn đề chi tiết hơn và phức tạp hơn về Linear Regression sẽ được để giành lại cho các bài sau. Đến đây, chúng ta tổng kết một số điều đã được học trong bài này, đó là:
- Các mô hình machine learning sẽ được thu được thông qua việc tối ưu hóa một hàm mục tiêu (trong bài chúng ta chọn hàm mục tiêu có cùng dạng với hàm mất mát và tìm cách cực tiểu hóa nó.
- Việc tối ưu này có thể thực hiện bằng nhiều phương pháp khác nhau (đây là một trong những sự khác biệt cơ bản của các thuật toán machine learning) trong đó phương pháp đơn giản nhất thường được thử là tìm cách giải phương trình đạo hàm bằng 0.
- Linear Regression là một mô hình đơn giản, do đó dạng của đạo hàm (gradient) cũng như việc giải phương trình đạo hàm bằng 0 cũng khá đơn giản và có thể thu được công thức tường minh. Tuy vây, trong hầu hết các trường hợp, chúng ta sẽ không thể có được kết quả đẹp thế này. Trong những trường hợp đó, các phương pháp tối ưu xấp xỉ khác được sử dụng, đại diện là Gradient Descent hay một số phương pháp dạng tham lam…
Đến đây, chúng ta đã có thể kết thúc bài này tại đây. Trong bài sau, chúng ta sẽ tiếp tục với một vấn đề khá cốt lõi của các mô hình machine learning đó là vấn đề Overfitting và Underfitting. Các bạn hãy chú ý tiếp tục theo dõi nhé! Nếu có gì chưa rõ, hãy để lại bình luận bên dưới hoặc tham gia nhóm hỏi đáp của TEK4.VN.