Tạo polynomial feature

Machine Learning cơ bản với NumPy

5.0 (1 đánh giá)
Tạo bởi Huy Trịnh Cập nhật lần cuối 22:27 20-04-2020 715 lượt xem 0 bình luận
Học nhanh

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

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:

h_\theta(x) = \theta_0 + \theta_1 *x_1

Ta có thể tạo các feature bậc cao hơn dựa trên x1 để được hàm  h_\theta(x) bậc 2 như thế này:

h_\theta(x) = \theta_0 + \theta_1*x_1 +\theta_2*x_1^2

Hay là hàm h_\theta(x) bậc 3:

h_\theta(x) = \theta_0 + \theta_1*x_1 +\theta_2*x_1^2 +\theta_3*x_1^3

Vậy là ta đã thêm các feature mới là x_1^2 và x_1^3 để tạo ra hàm h_\theta(x) bậc 3 này. Ta cũng có thể thêm cả \sqrt{x_1}để tạo ra hàm h_\theta(x) 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: x_1^2x_2 ...

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

Bài 10 - Resource

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ừ x^2 đến x^8):

#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 h_\theta(x) 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

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


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á

12312thaipro đã đánh giá 18:01 20-05-2020

Chat luong 1 sao

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
Không có video.