Normal Equation cho Linear Regression

Machine Learning cơ bản với NumPy

0.0 (0 đánh giá)
Tạo bởi Huy Trịnh Cập nhật lần cuối 21:45 31-08-2020 4.305 lượt xem 2 bình luận
Học nhanh

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ề:

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:

\theta = (X^TX)^{-1}X^Ty

Trong đó:

  • X^TX : Ma trận chuyển vị của X nhân với ma trận X (kích thước = n x n)
  • ^{-1} : Ma trận khả nghịch của X^TX (kích thước = n x n)
  • X^Ty: 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:

XT = X.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 X^TX:

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 X^Ty 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

Bài 7 - Resources

Để 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:

Bài 7 - Resources


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ó”.


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ÌNH LUẬ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

Tác giả/Dịch giả

Chào các bạn!! Mình là Huy - một cậu bé đam mê lập trình :D Trong một mùa hè rảnh rỗi trước năm cuối cấp đầy cam go, sau khi đã cày hết 7749 bộ anime thì mình muốn làm một việc gì đó "có ích cho đời" hơn. Từ đó mình đã thành 1 Kter :)))

Liên hệ: huytrinhm@gmail.com

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.

Đánh giá

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
tienkg5554 đã bình luận 16:28 05-03-2020

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 ạ

Không có video.