Regularized linear regression
Machine Learning cơ bản với NumPy


Danh sách bài học
Regularized linear regression
Nội dung bài viết Học nhanh
Dẫn nhập
Trong bài trước, chúng ta đã tìm hiểu về TẠO POLYNOMIAL FEATURE.
Ở bài này Kteam sẽ giới thiệu về Regularized linear regression để giúp thuật toán chúng ta tránh rơi vào tình trạng overfit.
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
- TẠO POLYNOMIAL FEATURE
Trong bài này chúng ta sẽ tìm hiểu về:
- Regularization là gì?
- Regularized cost function cho linear regression
- Regularized cost gradient và sử dụng thư viện scipy để train thuật toán
- Regularized normal equation cho linear regression
Regularization là gì?
Khi chúng ta gặp phải vấn đề về overfit, regularization là một trong những giải pháp hiệu quả để giải quyết trường hợp này, giúp chúng ta tránh overfit nhưng vẫn giữ nguyên tính bao quát của thuật toán (không cần phải loại bỏ bất kì feature nào của training set). Cách hoạt động của regularization là giảm độ lớn của các theta đi, làm giảm sức ảnh hưởng của một số feature khiến hàm đơn giản hơn, tránh được overfit (vì hàm dự đoán càng phức tạp thì càng dễ rơi vào overfit).
Lưu ý:
- Nếu chúng ta tăng parameter lambda của regularization lên quá cao (đồng nghĩa với việc sử dụng regularization quá mức), thuật toán của chúng ta sẽ rơi vào trường hợp underfit.
- Chúng ta sẽ không thực hiện regularization trên feature x0
Regularized cost function
Đầu tiên chúng ta sẽ thực hiện regularized cho hàm cost. Để làm việc này chúng ta chỉ cần thêm một hạng tử regularization vào hàm J(θ) là được:
Trong đó:
là công thức hàm cost bình thường (chưa thêm hạng tử regularization vào)
(lambda) là parameter regularization, quyết định “cường độ” của việc regularization
dùng để tính tổng các bình phương theta, chỉ lấy từ θ1 đến θn , không lấy θ0 vì chúng ta không cần phải regularized feature bias x0
Để thuận tiện cho việc lập trình hàm này trong python, chúng ta có thể vectorize nó thành như thế này:
Chúng ta có thể rút gọn thành như vậy vì khi lấy VT * V (với V là 1 vector) thì sẽ đồng nghĩa với việc tính tổng các bình phương của các phần tử trong vector đó.
Bây giờ, chúng ta sẽ lập trình hàm cost regularized này với python. Đầu tiên chúng ta define một hàm mới trong file functions.py với các parameter như sau:
Tiếp theo, ta sẽ khởi tạo một số giá trị để tiện sử dụng:
Sau đó ta sẽ tính error và hạng tử regularization:
Cuối cùng ta chỉ việc tính J(θ) dựa theo công thức:
Vậy là chúng ta đã lập trình được hàm J(θ) regularized. Tiếp theo, để train thuật toán, ta cần phải có đạo hàm của hàm này (để biết được “độ dốc” của J(θ) tại một vị trí θ nhất định)
Regularized cost gradient và sử dụng thư viện scipy để train thuật toán
Regularized cost gradient
Kteam đã tính sẵn cho bạn đạo hàm của hàm cost này. Đối với θ0, chúng ta sẽ không thực hiện regularization nên công thức sẽ là:
Đối với đến
, ta sẽ thêm hạng tử regularization nên công thức sẽ như sau:
Trong đó:
chính là đạo hàm của hàm J(θ) khi chưa regularized, Kteam đã đề cập trong các bài trước.
chính là đạo hàm của hạng tử regularization, được thêm vào đối với các theta từ 1 tới n.
Để tránh phải sử dụng hàm tổng, ta có thể vectorized công thức thành:
Đối với và:
Đối với θ1 đến θn . Ta có thể vectorized được như trên vì sẽ tương đương với việc tính tổng các tích đơn thuần bằng hàm tổng.
Chúng ta tiếp tục define thêm 1 hàm grad_reg trong file functions:
Đầu tiên ta sẽ khởi tạo một số biến cần sử dụng:
Tiếp theo là tính error, cost gradient cho θ0 và cost gradient cho các theta còn lại:
Sử dụng thư viện scipy để train thuật toán
Để train thuật toán, bạn có thể tự lập trình Gradient Descent với công thức:
For i in range(iter)
Ở bài này Kteam sẽ hướng dẫn các bạn 1 cách khác, đó là sử dụng thư viện scipy để train thuật toán.
Cài đặt scipy
Các bước thực hiện để cài đặt thư viện scipy:
Bước 1: Mở cmd với quyền admin:
Tips: Bạn có thể mở nhanh cmd bằng tổ hợp phím Win + R; cmd; Enter.
Bước 2: Gõ lệnh:
python -m pip install [--user] scipy
Kteam khuyến khích bạn sử dụng --user để tránh bị lỗi nếu không có quyền truy cập toàn máy tính (local machine). --user chỉ cài đặt Scipy cho user hiện tại.
Sử dụng scipy để train thuật toán
Đầu tiên là phần import các thư viện cần thiết:
Ta load data và tạo các polynomial feature tương tự bài trước:
Tiếp theo là phần train thuật toán bằng hàm scipy.optimize.fmin_cg()
fmin_cg(f, initial_theta, fprime)
Trong đó:
- f là hàm cost
- initial_theta là bộ theta ban đầu
- fprime là đạo hàm của hàm f, cũng chính là hàm grad_reg của chúng ta
Lưu ý: Hàm fmin_cg chỉ truyền vào hàm f và fprime 1 parameter là theta vì thế chúng ta phải define lại phiên bản rút gọn của 2 hàm này.
Cuối cùng là gọi hàm fmin_cg để train:
Bạn có thể plot kết quả ra để xem:Nếu bạn không thích hàm này in ra kết quả, bạn có thể truyền thêm keyword argument disp = False
Bạn hãy tự thay đổi lambda và xem kết quả nhé.
Regularized normal equation
Chúng ta còn có 1 phương pháp khác để có được bộ theta, đó là normal equation. Kteam sẽ hướng dẫn các bạn cách regularized hàm normal equation.
Công thức normal equation regularized:
Đây là công thức normal equation bình thường nhưng được thêm regularization term với L là 1 identity matrix kích thước n*n với phần tử 0,0 bằng 0:
Chúng ta lại tiếp tục define một hàm mới trong file functions:
Sau đó ta chỉ việc áp dụng công thức:Vậy là chúng ta đã lập trình xong regularized normal equation, để sử dụng bạn chỉ cần gọi tới hàm và truyền đầy đủ các parameter vào.
Kết luận
Qua bài này chúng ta đã tìm hiểu về regularized linear regression để tránh được tình trạng overfit.
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 Regularized linear regression 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.
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.
mình chưa hiểu 2 dòng này cho lắm, 2 hàm J_reg và grad_reg đều có tham số (X, y, theta, l = 0) vậy parameter t truyền vào là biến của hàm lambda, vậy biến t ở đây truyền vào nó lấy giá trị = mấy nhỉ.
Mình muốn xem giá trị của 2 biến j và g thì làm sao ạ.
Cảm ơn
làm xử lí ảnh đi ạ
cho mình hỏi 1 chút. Với machine learning, khi đã ra được predict có các giá trị dự đoán từ bộ data mẫu đưa vào. Như thế mình muốn đưa vào giá trị bất kì của X không có trong bộ data mẫu để dự đoán dựa trên thuật toán đã chạy với data mẫu,thì phải làm thế nào. AD giúp mình với ạ. Thanks ad