Normal Equation cho Linear Regression
Machine Learning cơ bản với NumPy

Danh sách bài học
Normal Equation cho Linear Regression
Dẫn nhập
Trong bài trước, chúng ta đã tìm hiểu về FEATURE NORMALIZE & GRADIENT DESCENT CHO MULTIVARIATE PROBLEM.
Ở bài này Kteam sẽ giới thiệu đến các bạn Normal Equation cho Linear Regression.
Nội dung
Để theo dõi bài này tốt nhất bạn cần có kiến thức về:
- LẬP TRÌNH PYTHON CƠ BẢN
- GIỚI THIỆU MACHINE LEARNING VÀ CÀI ĐẶT NUMPY
- MA TRẬN VÀ VECTOR VỚI NUMPY
- LINEAR REGRESSION VÀ HÀM hθ(x) CHO LINEAR REGRESSION.
- THUẬT TOÁN GRADIENT DESCENT CHO LINEAR REGRESSION
- FEATURE NORMALIZE & GRADIENT DESCENT CHO MULTIVARIATE PROBLEM
Trong bài này chúng ta sẽ cùng tìm hiểu về:
- Giới thiệu Normal Equation
- Công thức Normal Equation.
- So sánh Normal Equation và Gradient Descent.
- Trường hợp đặc biệt của Normal Equation.
Giới thiệu Normal Equation
Trong các bài trước Kteam đã hướng dẫn các bạn 1 phương pháp để tìm parameter Theta, đó là sử dụng thuật toán Gradient Descent. Tuy nhiên vẫn còn một phương pháp khác để tìm ra Theta tối ưu: phương pháp Normal Equation (phương trình thông thường).
Với Normal Equation, chúng ta không cần dùng vòng lặp để tối ưu Theta từng bước (iteration) để tới được Theta tối ưu nhất, mà chỉ cần dùng duy nhất 1 biểu thức để tìm trực tiếp Theta, không cần phải thực hiện Feature Normalize.
Công thức Normal Equation
Công thức toán học:
Trong đó:
: Ma trận chuyển vị của X nhân với ma trận X (kích thước = n x n)
: Ma trận khả nghịch của
(kích thước = n x n)
: Là ma trận ngược của X nhân với y (kích thước = n x 1)
Lưu ý:
Đừng nhầm lẫn ma trận chuyển vị (transpose matrix) và ma trận khả nghịch (invert matrix) đã được đề cập trong bài MA TRẬN & VECTOR VỚI NUMPY.
Ma trận chuyển vị sẽ chỉ đổi index của hàng và cột (A[i,j] sẽ chuyển thành A[j,i]).
Ma trận khả nghịch sẽ dùng các công thức toán học để tạo ra một ma trận hoàn toàn mới (bằng kích thước gốc) để khi nhân với ma trận cũ sẽ có kết quả là 1 (ma trận với 1 trên đường chéo).
Thực hiện invert, transpose ma trận
Để thực hiện transpose ma trận (tạo ma trận chuyển vị), ta chỉ cần lấy attribute .T:
Để thực hiện invert ma trận (tạo ma trận khả nghịch), ta dùng hàm np.linalg.pinv(X):
XI = np.linalg.pinv(X)
Xây dựng Normal Equation
Đầu tiên ta tính :
import numpy as np
def NormEqn(X,y):
return X.T @ X
Sau đó invert tất cả:
import numpy as np
def NormEqn(X,y):
return np.linalg.pinv(X.T @ X)
Rồi nhân với là hoàn tất:
import numpy as np
def NormEqn(X,y):
return np.linalg.pinv(X.T @ X) @ (X.T @ y)
Sử dụng
Để sử dụng, ta chỉ cần load data, dùng hàm NormEqn rồi predict kết quả, chỉ cần 4 dòng code
import numpy as np
from functions import *
[X, y] = Loadtxt(‘data.txt’)
Theta = NormEqn(X,y)
inp = np.array([1, 1650, 3])
predict = predict(inp, Theta)
print(‘%.2f$’%(predict))
So sánh Normal Equation và Gradient Descent
Gradient Descent |
Normal Equation |
Cần chọn alpha và iter |
Không cần chọn alpha và iter |
Cần lặp nhiều bước tối ưu |
Chỉ thực hiện 1 bước |
Độ phức tạp O(kn2) |
Độ phức tạp O(n3), cần tìm ma trận khả nghịch |
Hoạt động tốt với training set lớn |
Xử lí chậm với training set lớn (tìm ma trận khả nghịch làm chậm tốc độ khá nhiều) |
Vì thế với các training set nhỏ ta có thể dùng Normal Equation, nhưng với training set lớn, ta vẫn nên dùng Gradient Descent
Trường hợp đặc biệt
Với Normal Equation, chúng ta có 2 trường hợp khiến thuật toán không hoạt động được (do không tính được ma trận nghịch đảo):
- m <= n: Lượng mẫu quá ít trong khi có quá nhiều feature (X): có thể khắc phục bằng cách giảm số feature hoặc dùng Regularization (đề cập trong các bài sau)
- Tồn tại các feature (X) tương tự nhau: ví dụ có 2 feature tương tự nhau là diện tích(đơn vị m2) và diện tích(đơn vị feet2): có thể khắc phục bằng cách bỏ bớt 1 trong 2 feature.
Resources
Các bạn có thể download các file text được sử dụng trong bài viết tại:
Kết luận
Qua bài này chúng ta đã cùng nhau tìm hiểu về Normal Equation cho Linear Regression.
Ở bài sau, Kteam sẽ TỔNG KẾT LINEAR REGRESSION.
Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Normal Equation cho Linear Regression dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Nội dung bài viết
Khóa học
Machine Learning cơ bản với NumPy
Với mục đích giới thiệu đến mọi người về Machine Learning cũng như tạo điểm khởi đầu cho các bạn mới, muốn tham gia và tìm hiểu ban đầu về lĩnh vực khá hot này. Cùng Kteam tìm hiểu về Machine Learning cơ bản với ngôn ngữ Python.
Thông qua khóa học MACHINE LEARNING VỚI NUMPY, Kteam sẽ hướng dẫn các kiến thức cơ bản của thuật toán Machine Learning để các bạn có thể tạo ra những sản phẩm Machine Learning của riêng mình.
Sau khoá học này Kteam làm thêm những video ứng dụng của machine learning được không ạ, học xong em không biết phải làm gì tiếp theo, Kteam gợi ý giúp em được không ạ