Phân tích thông số của quá trình training và cách lựa chọn parameter tự động

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 21:47 31-08-2020 2.494 lượt xem 3 bình luận
Học nhanh

Danh sách bài học

Phân tích thông số của quá trình training và cách lựa chọn parameter tự động

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

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

Phân tích thông số của quá trình training và cách lựa chọn parameter tự động, Python, Kteam, Howkteam, Numpy

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.

Phân tích thông số của quá trình training và cách lựa chọn parameter tự động, Python, Kteam, Howkteam, Numpy


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()

Phân tích thông số của quá trình training và cách lựa chọn parameter tự động, Python, Kteam, Howkteam, Numpy


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()

Phân tích thông số của quá trình training và cách lựa chọn parameter tự động, Python, Kteam, Howkteam, Numpy


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ẫn CÁ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!


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á

trandaongochung đã đánh giá 09:33 02-05-2020

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
huynh_ngoc_long_88 đã bình luận 23:07 16-09-2020

Minh ủng hộ làm tiếp đến Neural network để xử lý hình ảnh đi 

lenhan555 đã bình luận 20:08 19-08-2020

Chưa có clip giảng hả bạn?

Truong Le đã bình luận 22:56 11-08-2020

a ơi phần tải xuống là file data mà ạ

 

Không có video.