Bài viết này đưa ra bài giải và chi tiết cách giải của mỗi bài tập trong tuần 2 của khóa học Machine Learning của giáo sư Andrew Ng.
Xem các bài viết khác tại Machine Learning Course Structure.
1. Cài đặt Octave
Còn gì dễ hơn: Download Octave
Chọn phiên bản 64-bit nha: octave-4.4.1-w64-installer.exe (~ 238 MB)
2. Warmup
Yêu cầu: Trả về 5×5 identity matrix
A = eye(5);
3. Cost Function J
Công thức:
Vectorize:
Ta có:
Nếu coi là vector
, X là matrix
, thì phép tính trên còn đơn giản như sau:
Vậy cost function biến đổi lại thành:
Code:
J = (1/(2*m))*sum((X*theta - y).^2)
4. Gradient Descent
Thuật toán Gradient Descent có 2 bước:
- Tính bộ giá trị
- Thay vào cost function để kiểm tra hội tụ
Để cho đơn giản, ta sẽ giả định rằng chỉ có 2 feature là và
(n = 2)
Công thức:
Ta tách công thức trên thành 2 phần:
với
với:
- X =
- y =
Tương tự như cost function, ta có:
với a là vector m x 1
Nhân với và tính tổng
Đối với mỗi tham số của vector a, ta nhân nó với x tương ứng, rồi cộng tất cả các kết quả lại.
Để vừa nhân, vừa tính tổng và trả về một vector chứa kết quả là các giá trị của gradient, ta sẽ phải biến đổi matrix X một chút.
Khi nhân matrix này với vector a, ta sẽ có kết quả như mong muốn.
Code:
file gradientDescent.m
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
%GRADIENTDESCENT Performs gradient descent to learn theta
% theta = GRADIENTDESCENT(X, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
gradient = (alpha/m) * X' * (X*theta - y);
theta = theta - gradient;
% Save the cost J in every iteration
J_history(iter) = computeCost(X, y, theta);
end
end
Code này có thể dùng chung cho gradient descent với nhiều feature
5. Normal Equation
Cái này thì khá dễ, nên mình không giải thích mà sẽ đưa code luôn nhé
file normalEqn.m
function [theta] = normalEqn(X, y)
%NORMALEQN Computes the closed-form solution to linear regression
% NORMALEQN(X,y) computes the closed-form solution to linear
% regression using the normal equations.
theta = zeros(size(X, 2), 1);
theta = pinv(X'*X)*X'*y;
end
Bắt đầu tuần 3 nào 😀
Cam on anh vi mot bai giang hay (y)
LikeLike
Em xin cảm ơn anh vì bài giảng này. Trong lúc học em có vài điểm chưa hiểu nhờ bài này đã làm em thông suốt nhiều vấn đề.
LikeLike