Tạo polynomial feature
Machine Learning cơ bản với NumPy


Danh sách bài học
Tạo polynomial feature
Dẫn nhập
Trong bài trước, chúng ta đã tìm hiểu về PHÂN TÍCH THÔNG SỐ CỦA QUÁ TRÌNH TRAINING VÀ CÁC LỰA CHỌN PARAMETER TỰ ĐỘNG.
Ở bài này Kteam sẽ giới thiệu đến các bạn cách Tạo polynomial feature để cải thiện thuật toán.
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
- NORMAL EQUATION CHO LINEAR REGRESSION
- TỔNG KẾT LINEAR REGRESSION
- PHÂN TÍCH THÔNG SỐ CỦA QUÁ TRÌNH TRAINING VÀ CÁC LỰA CHỌN PARAMETER TỰ ĐỘNG.
Trong bài này chúng ta sẽ tìm hiểu về:
- Polynomial features là gì?
- Cách thêm các polynomial feature
- Lưu ý về overfit
Polynomial features là gì?
Chúng ta có thể cải thiện các feature của thuật toán theo nhiều cách khác nhau. Đầu tiên, ta có thể kết hợp nhiều feature lại thành 1. Ví dụ như ta có thể tạo ra x3 bằng cách nhân x1 với x2 lại với nhau: x3 = x1 * x2 hoặc x1 / x2 …
Một cách cải thiện khác đó là thêm vào các bậc cao hơn cho cùng một feature để nâng bậc cho hàm hθ(x) thành hàm bậc 2, bậc 3, căn bậc 2… khiến nó không còn là một đường thẳng đơn giản nữa.
Ví dụ: từ hàm hθ(x) như này:
Ta có thể tạo các feature bậc cao hơn dựa trên x1 để được hàm bậc 2 như thế này:
Hay là hàm bậc 3:
Vậy là ta đã thêm các feature mới là và
để tạo ra hàm
bậc 3 này. Ta cũng có thể thêm cả
để tạo ra hàm
căn bậc 2.
Ngoài ra, ta cũng có thể vừa kết hợp 2 feature với nhau và vừa nâng bậc chúng: ...
Lưu ý: Cần chú ý normalize data khi thêm các feature bậc cao để tránh overload. Ví dụ nếu x có phạm vi từ 1 - 1000 thì phạm vi x2 trở thành 1 - 1000000 và của x3 trở thành 1 - 1000000000
Cách thêm các polynomial feature
Bây giờ chúng ta sẽ thực hành việc thêm các polynomial feature cho bộ data bài trước và train lại để thấy sự khác biệt
Ta tiến hành load data như thường lệ:
data = np.loadtxt('data.txt',delimiter=',')
Sau đó chúng ta sẽ tách X, y ra:
#Khởi tạo ma trận X cùng kích thước với data
X = np.ones(data.shape)
#lấy các cột đầu làm X
X[:,1:] = data[:,:-1]
#lấy cột cuối làm y
y = data[:,-1]
Sau đó ta dùng vòng lặp để thêm từng feature bậc cao hơn vào X (thêm từ đến
):
#Vòng lặp từ mũ 2 đến mũ 8
for i in range(2,9):
#thêm một cột feature vào bên phải X với giá trị bằng x1 mũ i
X = np.c_[X, X[:,1]**i]
#Lấy kích thước y làm m
m = y.size
#Lấy số cột của X làm n
n = X.shape[1]
Sau đó ta tạo ma trận xp để thuận tiện cho việc plot data sau này:
#tính min và max của x1
min_x = np.min(X[:,1])
max_x = np.max(X[:,1])
#tạo ma trận xp có giá trị từ min_x – 10 đến max_x + 10, step là 0.5 (mỗi giá trị lệch nhau 0.5)
xp = np.arange(min_x - 10, max_x + 10, 0.5)
#thêm x0 bằng 1 cho xp
xp = np.c_[np.ones(xp.size), xp]
#thực hiện thêm polynomial feature như đã làm với X
for i in range(2,9):
xp = np.c_[xp, xp[:,1]**i]
Cuối cùng trong việc chuẩn bị data là normalize cả X và xp:
#Normalize X
[X, mu, sig] = Normalize(X)
#thực hiện normalize xp bằng mu và sigma tính từ X
xp -= mu
xp /= sig
xp[:,0] = 1
Bây giờ ta chỉ cần train data và plot ra để xem kết quả:
#train data với alpha bằng 0.1
theta, jhist = GradientDescent(X, y, 0.1, 100)
#plot bộ training set, cần đảo ngược quá trình normalize bằng cách * sigma + mu
plt.plot(X[:,1]*sig[1] +mu[1], y, 'rx')
#plot đường dự đoán
plt.plot(xp[:,1]*sig[1] +mu[1], xp@theta)
plt.show()
Lưu ý về overfit
Chúng ta không nên quá lạm dụng polynomial feature, tạo ra hàm bậc quá cao dẫn đến tình trạng overfit.
Ở bài sau, chúng ta sẽ có cách khắc phục trường hợp này bằng cách sử dụng Regularized linear regression.
Kết luận
Qua bài này chúng ta đã tìm hiểu cách Tạo polynomial feature.
Ở bài sau, Kteam sẽ hướng dẫn REGULARIZED 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 Tạo polynomial feature 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.
Cố lên nhe, mong các clip và bài của bạn tiếp theo.