Hướng dẫn dùng numpy polynomial.fit python

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:

Hướng dẫn dùng numpy polynomial.fit python

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

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ừ đế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], [email protected])

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ẫnREGULARIZED 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ê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.