Hướng dẫn dùng y train python

Dẫn nhập

Trong bài trước, chúng ta đã tìm hiểu về TỔNG KẾT LINEAR REGRESSION.

Ở bài này Kteam sẽ giới thiệu đến các bạn Phân tích thông số của quá trình training và cách lựa chọn parameter tự động để hiểu rõ hơn thuật toán của mình và cải thiện hiệu năng.


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

Trong bài này chúng ta sẽ tìm hiểu về:

  • Cách debug thuật toán Machine Learning của bạn.
  • Phân biệt các trường hợp Bias và Overfit
  • Hệ thống, phân chia training set
  • Tự động lựa chọn parameter
  • Learning curves

Debug thuật toán Machine Learning

Qua các bài trước bạn đã có thể tự tạo ra một thuật toán Machine Learning cho riêng bạn. Đối với training set, thuật toán hoạt động rất tốt, tuy nhiên khi bạn áp dụng thuật toán với một bộ data hoàn toàn mới, nó lại không hoạt động như ý muốn. Khi này, bạn có một số lựa chọn sau:

  • Tìm thêm data cho training set
  • Giảm số lượng feature của training set
  • Tạo ra thêm feature cho training set
  • Thêm các polynomial feature (feature bậc cao như mũ 2, mũ 3,…)
  • Thay đổi hệ số regularization (Kteam sẽ hướng dẫn trong các bài sau)

Vậy với nhiều lựa chọn khác nhau như vậy, bạn có thể phải tạo ra 1 diagnostic tool cho thuật toán (một tool chẩn đoán cho thuật toán của bạn). Tuy việc thiết kế tốn kha khá thời gian, nhưng nếu bạn đang không biết phải debug như thế nào thì nó rất đáng để thử.


Phân biệt các trường hợp Bias và Overfit

Trong quá trình training, rất có thể bạn sẽ bắt gặp các trường hợp bias và overfiting, ảnh hưởng đến kết quả của thuật toán. Vậy chúng là gì?

Bias

Đây là trường hợp đường dự đoán của chúng ta không đủ phức tạp để có thể khớp hoàn toàn training set

Hướng dẫn dùng y train python

Overfit

Trái ngược với Bias, Overfiting là trường hợp mà đường dự đoán quá phức tạp, tuy khớp hoàn toàn từng example trong training set nhưng khi sử dụng thuật toán ngoài thực tế thì hoàn toàn sai.

Hướng dẫn dùng y train python


Hệ thống, phân chia training set

Vì có thể thuật toán của chúng ta rơi vào trường hợp overfiting, tuy kết quả của hàm J(θ) rất tốt nhưng thực tế lại không như vậy, ta cần phải phân chia lại bộ data thành 3 phần: train, cross validation và test. Đây cũng là bước đầu để tạo diagnostic tool.

Thông thường tỷ lệ giữa các phần data là:

  • Training set: 60%, đây chính là bộ data dùng để train thuật toán
  • Cross validation: 20%, đây là bộ data dùng để kiểm tra chất lượng của thuật toán, dùng trong việc tự động lựa chọn parameter
  • Test set: đây chính là bộ data dùng để kiểm tra chất lượng sau cùng của thuật toán

Bài 9 - Reasource

Ta tiến hành load data như thường lệ:

raw = np.loadtxt('data.txt',delimiter=',')

Sau đó chúng ta sẽ tách data thành 3 phần:

#Câu lệnh dùng để sắp xếp ngẫu nhiên lại data, đảm bảo tính công bằng
np.random.shuffle(raw)
#Thêm cột 1 đầu tiên
data = np.ones([np.size(raw,0),np.size(raw,1)+1])
data[:,1:] = raw[:,0:]
#Normalize toàn bộ data
[data, mu, sig] = Normalize(data)
#Tách 20% đầu làm cross-validation set
Xcv = data[0:int(np.size(data,0)/100*20),0:-1]
ycv = data[0:int(np.size(data,0)/100*20),-1]
#Tách 20% tiếp theo làm test set
Xtest = data[int(np.size(data,0)/100*20):int(np.size(data,0)/100*40),0:-1]
ytest = data[int(np.size(data,0)/100*20):int(np.size(data,0)/100*40),-1]
#Phần còn lại là training set
X = data[int(np.size(data,0)/100*40):,0:-1]
y = data[int(np.size(data,0)/100*40):,-1]

Bạn có thể plot phần training set ra để xem thử hình dạng của training set lần này (mối liên hệ giữa lượng nước thay đổi (x) và lượng nước xả ra khỏi đập (y)):

#Chỉ lấy cột thứ 2, bỏ cột x0 luôn bằng 1
plt.plot(X[:,1],y,'rx')
plt.show()

Hướng dẫn dùng y train python


Tự động lựa chọn parameter

Trong thuật toán của chúng ta, ta cần phải lựa chọn các parameter như alpha, model, lambda (trong việc regularization, Kteam sẽ hướng dẫn trong các bài sau)… Ta không thể tự mình lựa chọn hết tất cả parameter này được, vì thế Kteam sẽ hướng dẫn các bạn cách tự động lựa chọn các parameter này.

Đối với các parameter là số (alpha, lambda, số lượng training example….) chúng ta sẽ tạo một list các giá trị có thể của các parameter này. Sau đó chúng ta sẽ tạo một vòng lặp thực hiện các bước sau:

  1. Chọn một giá trị từ list
  2. Tiến hành training với parameter này (lưu ý chỉ training trên training set đã chia)
  3. Tính J(θ) của thuật toán được train với parameter này trên cross-validation set
  4. Tính J(θ) của thuật toán trên training set (dùng để plot learning curves)
#tạo list các giá trị có thể của alpha
alph = [0.001, 0.003, 0.01, 0.03, 0.1, 0.3, 1]
#tạo array lưu lại các J(θ) của từng giá trị alpha
costs = np.zeros(7)
for i in range(7):
	#train thuật toán với từng giá trị alpha
	[theta, jhist] = GradientDescent(X, y, alph[i], 100)
	#lưu lại J(θ) tính trên cross-validation set
	costs[i] = computeCost(Xcv,ycv,theta)

Sau khi lưu lại toàn bộ các J(θ) của từng giá trị, ta có thể so sánh và biết được với giá trị nào thì thuật toán hoạt động tốt nhất. Ta cũng có thể plot ra để có cái nhìn tổng quát hơn.

#tạo một đồ thị mới để plot
plt.figure(2)
#plot các giá trị cost cho từng giá trị alpha
plt.plot(alph,costs,'b-')
#tìm alpha có hiệu quả nhất (có cost thấp nhất)
alpha = alph[np.where(costs == np.min(costs))[0][0]]
print(alpha)
plt.show()

Hướng dẫn dùng y train python


Kết luận

Qua bài này chúng ta đã tìm hiểu cách Phân tích thông số của quá trình training và cách lựa chọn parameter tự động.

Ở bài sau, Kteam sẽ hướng dẫnCÁCH TẠO POLYNOMIAL FEATURE.

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 quyê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!

Hướng dẫn dùng y train python


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.