Hàm J(θ) cho Linear Regression

Machine Learning cơ bản với NumPy

5.0 (6 đánh giá)
Tạo bởi Huy Trịnh Cập nhật lần cuối 5 năm trước 22.231 lượt xem 5 bình luận
Tác giả/Dịch giả: Huy Trịnh
Học nhanh

Danh sách bài học

Hàm J(θ) cho Linear Regression

Dẫn nhập

Trong bài trước, chúng ta đã tìm hiểu về LINEAR REGRESSION VÀ HÀM hθ(x) CHO LINEAR REGRESSION.

Ở bài này Kteam sẽ giới thiệu đến các bạn Hàm J(θ) cho Linear Regression.


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ẽ cùng tìm hiểu về:

  • Hàm J(θ) là gì?
  • Hàm J(θ) cho Linear Regression.
  • Lập trình hàm J(θ) để tính độ chính xác với kết quả dự đoán có sẵn.
  • Lưu ý về hàm J(θ).

Hàm J(θ) là gì ?

Qua bài trước Tèo đã có thể dự đoán được giá đất cho khách hàng, nhưng các vị khách hàng “thượng đế” của Tèo lại cho rằng giá đó là quá cao. Về phía Tèo, Tèo nghĩ giá mà Tèo dự đoán là giá chính xác nhất nhưng Tèo lại không biết được độ chính xác của mình. Vì thế, Tèo đã tìm hiểu về hàm J(θ) tìm ra độ chính xác của kết quả.

Với Machine Learning nói chung, chúng ta sẽ dùng kinh nghiệm E để thực hiện tác vụ T với độ chính xác P.

Hàm J(θ) có tác dụng “tính” độ chính xác P của tác vụ T nói chung, hay là hàm hθ(x) nói riêng. Hàm hθ(x) thực chất là hàm tính trung bình (một cách màu mè hơn) của tất cả những sai số khi dự đoán (kết quả dự đoán – kết quả thực tế).

Ví dụ:

Khi  ta có một hàm hθ(x) chính xác:

Hàm J(θ) cho Linear Regression, Python, Kteam, Howkteam

Thì hàm J(θ) sẽ bằng 0. Nhưng nếu hàm hθ(x) không chính xác:

Hàm J(θ) cho Linear Regression, Python, Kteam, Howkteam

Thì J(θ) sẽ > 0. Trong trường hợp này là 0.5.


Hàm J(θ) cho Linear Regression.

Công thức

J(\theta)=\frac{1}{2m} \sum_{i=1}^{m}(h_\theta(x_{i})-y_{i})^2

Phân tích

  • Kí hiệu \sum_{i=1}^{m} là tổng của tất cả các training example (mẫu train). Bước này tương tự bước tính tổng trong việc tính trung bình.
  • h_{\theta}(x_{i})  là kết quả dự đoán dựa trên hàm hθ(x).
  • (h_{\theta}(x_{i}) -y_{i})^2 là bình phương của sai số khi dự đoán. Vì thế hàm J(θ) còn có tên gọi khác là “hàm sai số bình phương”.
  • Kết quả được chia 2  (*\frac{1}{2m}) để thuận tiện cho việc sử dụng Gradient Descent  vì các phép tính tích phân sẽ triệt tiêu \frac{1}{2} (nếu bạn chưa học qua hoặc đã quên thì không sao! Kteam sẽ tính sẵn cho bạn trong các bài sau).

Ý nghĩa

Hàm J(θ) cho ta biết độ chính xác của hàm hθ(x) hiện tại, giúp thuật toán tìm được hàm  hθ(x) tối ưu nhất (trường hợp tốt nhất khi J(θ) = 0) để dự đoán được chính xác hơn.

Đồ thị

Đồ thị hàm J(θ) trong Linear Regression có dạng lõm (convex):

Hàm J(θ) cho Linear Regression, Python, Kteam, Howkteam

J(θ) “vectorized”

Hàm J(θ) “vectorized” có chức năng giống hoàn toàn hàm J(θ) thông thường, tốc độ cũng tương đồng nhưng không cần dùng hàm tổng ( \sum_{i=1}^{m}). Bạn có thể lựa chọn giữa 2 cách thiết kế hàm J(θ) tùy ý.

J(\theta)=\frac{1}{2m}(h_{\theta}(x)-y)^T * (h_{\theta}(x)-y)


Lập trình hàm J(θ)

Load data

Kteam đã cung cấp sẵn resource của bài viết này tại:

Bài 4 - Resource

Trong file data có 3 cột, 2 cột đầu là X (các input), cột thứ 3 là y (kết quả).

Đầu tiên ta load raw data:

Sau đó chia data vào ma trận X và vector y:

Predict function

Lúc này, Kteam khuyến khích bạn tạo 1 file .py mới để lưu những function để sau này có thể tái sử dụng.

Define lại hàm predict từ bài trước (hàm predict đơn giản chỉ là X * Theta, dùng để dự đoán kết quả):

Compute cost function

Bây giờ, chúng ta define hàm computeCost để tính J(θ). Parameter của hàm J(θ) sẽ gồm X,y và Theta.

Công thức của hàm J(θ) là J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x_{i})-y_{i})^2, chúng ta sẽ lập trình từ trong ra ngoài. Đầu tiên là h_{\theta}(x_{i}):

Sau đó tính (h_{\theta}(x_{i})-y_{i})^2:

Tính tổng tất cả:

Nhân với \frac{1}{2m} :

Source code

Compute cost vectorized function

Ở phiên bản vectorized, ta có thể viết hàm J(θ) đơn giản hơn:

Test hàm J(θ)

Để test hàm J(θ), ta tự tạo bộ Theta rồi thử hàm:

Nếu chính xác, với bộ theta [89597.909542,139.210674 ,-8738.019112] J(θ) sẽ là nhỏ nhất.

Source code


Resources

Các bạn có thể download các file text được sử dụng trong bài viết tại:

Bài 4 - Resource


Kết luận

Qua bài này Kteam đã hướng dẫn các bạn về hàm J(θ) cho Linear Regression.

Ở bài sau, Kteam sẽ giới thiệu về PHƯƠNG PHÁP GRADIENT DESCENT CHO LINEAR REGRESSION – thuật toán giúp chúng ta tìm được parameter Theta phù hợp để hàm J(θ) nhỏ nhất.

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 Hàm J(θ) cho 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 likeshare để ủ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.

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á

5.0
6 đánh giá
Đánh giá
5
6
4
3
2
1
dphok5 đã đánh giá 2 năm trước

phungduongd đã đánh giá 3 năm trước

Hai Hoang đã đánh giá 3 năm trước

Nội dung bài học rất chi tiết!

mrthonglion đã đánh giá 4 năm trước

hoanghd218 đã đánh giá 5 năm trước

SDAD

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
phatnt đã bình luận 2 năm trước

Cho e hỏi cái m là gì vậy Ad ơi 

 

nhamqs2002 đã bình luận 4 năm trước

Chỗ hàm comuteCost với comuteCost_vec 2 cái đều ra 1 kết quả nhưng sai số do máy, dù số nào cũng ra như nhau thôi.

#bộ theta chính xác là [89597.909542,139.210674 ,-8738.019112], hàm JTheta tính sai số mà sai số vẫn lên 2043280050.6028283 mình k hiểu lắm

lenhan555 đã bình luận 5 năm trước

Cái đầu là tính RSS (Residual Sum of Squares) đúng không bạn? Độ lệch giữa Predictive value và True Value. 

Không có video.