- vừa được xem lúc

Logistic Regression - Bài toán cơ bản trong Machine Learning

0 0 82

Người đăng: Pham Van Chung

Theo Viblo Asia

1. Giới thiệu

  • Trong bài viết này, chúng ta sẽ thảo luận các khái niệm Logistic Regression và xem nó có thể giúp chúng ta xử lý các vấn đề thế nào.
  • Logistic Regression là 1 thuật toán phân loại được dùng để gán các đối tượng cho 1 tập hợp giá trị rời rạc (như 0, 1, 2, ...). Một ví dụ điển hình là phân loại Email, gồm có email công việc, email gia đình, email spam, ... Giao dịch trực tuyến có là an toàn hay không an toàn, khối u lành tính hay ác tình. Thuật toán trên dùng hàm sigmoid logistic để đưa ra đánh giá theo xác suất. Ví dụ: Khối u này 80% là lành tính, giao dịch này 90% là gian lận, ...

2. Đặt vấn đề

  • Ngân hàng bạn đang làm có chương trình cho vay ưu đãi cho các đối tượng mua chung cư. Tuy nhiên gần đây có nhiều chung cư hấp dẫn nên lượng hồ sơ người nộp cho chương trình ưu đãi tăng lên nhiều. Bình thường bạn có thể duyệt 10-20 hồ sơ một ngày để quyết định hồ sơ có được cho vay hay không, tuy nhiên gần đây bạn nhận được 1000-2000 hồ sơ mỗi ngày. Bạn không thể xử lý hết hồ sơ và bạn cần có một giải pháp để có thể dự đoán hồ sơ mới là có nên cho vay hay không. Sau khi phân tích, bạn nhận thấy có 2 yếu tố quyết định đến việc hồ sơ có được chấp nhận hay không, đó là mức lương và kinh nghiệm làm việc. Dưới đây là 1 đồ thị ví dụ
  • Về mặt logic, chúng ta có thể nghĩ ngay đến việc vẽ 1 đường thẳng phân chia các điểm xanh và đó, rồi đưa ra quyết định cho 1 điểm mới dựa vào đường thẳng đó. Ví dụ thế này:
  • Ví dụ đường xanh là đường phân chia. Dự đoán cho hồ sơ của người có mức lương 6 triệu và 1 năm kinh nghiệm là không chấp nhận
  • Tuy nhiên, do ngân hàng đang gặp khó khăn nên hạn chế cho vay, ngân hàng yêu cầu hồ sơ đạt trên 80% mới cho vay. Bây giờ không chỉ dừng lại ở việc quyết định cho vay hay không, mà phải tìm xác suất hồ sơ đó cho vay là bao nhiêu.

3. Hàm sigmoid

  • Giờ phải tìm xác suất cho vay của 1 hồ sơ, đương nhiên là giá trị trong đoạn [0, 1] rồi. Hàm mà luôn có giá trị trong đoạn [0, 1], liên tục mà lại dễ sử dụng thì đó là hàm sigmoid.
  • Nhận xét:
  • Hàm liên tục và luôn đưa ra giá trị trong khoảng (0, 1)
    
  • Có đạo hàm tại mọi điểm nên có thể dùng gradient descent
    

4. Thiết lập bài toán

Về cơ bản thì chúng ta sẽ có các bước sau cho 1 bài toán Machine learning:

  • Thiết lập model
  • Thiết lập hàm mất mát Loss Function
  • Tìm tham số bằng việc tối ưu loss function
  • Dự đoán dữ liệu mới dựa vào loss function mới tìm được

4.1 Model

  • Với dòng thức i trong dữ liệu, gọi là lương và là kinh nghiệm làm việc của hồ sơ thứ i
  • là xác suất mà model dự đoán hồ sơ thứ i cho vay
  • là xác suất mà model dự đoán hồ sơ thứ i không cho vay.
  • Ta có ngay
  • Hàm sigmoid là:
  • Tương tự như hàm dự đoán trong Linear Regression là , thì trong Logistic Regression ta có hàm dự đoán như sau:

4.2 Loss Function - Hàm mất mát

  • Bây giờ chúng ta cần 1 hàm để đánh giá độ tốt của model (tức làm dự đoán).
  • Ta có nhận xét như sau: + Nếu hồ sơ thứ i là cho vay, tức = 1 thì ta mong muốn càng gần 1 càng tốt hay model dự đoán xác suất cho hồ sơ thứ i vay càng cao càng tốt. + Nếu hồ sơ thứ i là không cho vay, tức = 0 thì ta mong muốn càng gần 0 càng tốt hay model dự đoán xác suất cho hồ sơ thứ i vay càng thấp càng tốt.
  • Với mỗi điểm (, ), ta gọi hàm loss function (Trong Machine learning, Deep leaning thì chúng ta hiểu log là ln nhé)
  • Thử đánh giá hàm L nhé. Nếu . Đây là đồ thị hàm loss trong trường hợp = 1
  • Nhận xét: + Hàm L giảm từ 0 đến 1 + Khi model dự đoán = 1, tức giá trị dự đoán gần với giá trị thật thì L nhỏ, xấp xỉ 0. + Khi model dự đoán = 0, tức giá trị dự đoán ngược lại với giá trị thật thì L rất lớn.
  • Ngược lại, nếu , ta có đồ thị sau
  • Nhận xét: + Hàm L tăng từ 0 đến 1 + Khi model dự đoán gần 0, tức giá trị dự đoán gần với giá trị thật thì L nhỏ, xấp xỉ 0. + Khi model dự đoán gần 1, tức giá trị dự đoán ngược lại với giá trị thật thì L rất lớn => Hàm L nhỏ khi giá trị model gần với giá trị thật và rất lớn khi model dự đoán sai, hay nói cách khác L càng nhỏ thì model dự đoán càng gần với giá trị thật. => Bài toán toán quy về tìm giá trị nhỏ nhất của L.
  • Ta có hàm mất mát trên tất cả bộ dữ liệu như sau:

4.3 Tính đạo hàm phức tạp bằng kỹ thuật Chain Rule

  • Chain rule là gì? Nếu z = f(y) và y = g(x) hay z = f(g(x)) thì
  • Thử áp dụng tính đạo hàm của hàm sigmoid . =

4.4 Áp dụng gradient descent

  • Với mỗi điểm (, ), gọi hàm mất mát trong đó là giá trị mà model dự đoán, còn yi là giá trị thật của dữ liệu.
  • Áp dụng Chain rule ta có:
  • Từ đồ thị ta thấy: Do đó:
  • Tương tự:
  • Đấy là trên 1 điểm dữ liệu, còn trên toàn bộ dữ liệu:

4.5 Biểu diễn bằng ma trận

  • Sau khi thực hiện gradient descent ta tìm được w0, w1, w2. Với mỗi hồ sơ mới ta tính được phần trăm nên cho vay rồi so sánh với ngưỡng cho vay của công ty t (thường là 0.5, hoặc cao hơn là 0.8), nếu thì cho vay, không thì không cho vay.

4.6 Xây dựng đường thẳng phân chia

  • Xét đường thẳng y = ax + b, thì f = y - (ax + b), ta có được 1 đường thẳng chia mặt phẳng là 2 phần, 1 phần f > 0, 1 phần f < 0 và các điểm trên đường thẳng thì f = 0.
  • Giả sử mốc chính giữa là 0.5 thì >= 0.5 thì cho vay, ngược lại thì không cho vay.
  • Tương tự => đường thẳng là đường phân cách giữa các điểm cho vay và từ chối.
  • Trong trường hợp tổng quát t bất kỳ, <=>
  • Ta thấy khi t = 0.8 thì đường phân cách gần các điểm màu đỏ hơn so với t = 0.5, thậm chí 2 điểm màu đỏ trước đó được chấp nhận thì bây giờ lại bị loại bỏ.

5. Ứng dụng

  • Dự đoán email có phải spam hay không
  • Dự đoán giao dịch ngân hàng là gian lận hay không
  • Dự đoán khối u lành hay ác tính
  • Dự đoán khoản vay có trả được không
  • Dự đoán khoản đầu tư vào start-up có sinh lãi hay không.

Nguồn Towards Datascience, Deep learning cơ bản

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 496

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 373

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 689

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 334

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 417

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 413