Một số thuật toán trong Machine Learning

Một số thuật toán cơ bản trong Machine Learning

Đây là bài post mình dùng đe ôn tập và chia sẻ kiến thức đã học. Mình rất vui khi nhận được chia sẻ, góp ý nội dung từ các bạn. – Hữu Danh

1. Machine Learning là gì?

Theo mình, điểm khác nhau giữa người và máy tính chính là người có thể học tập kiến thức mới từ những thứ trong cuộc sống.
Trước khi biết đến Machine Learning, mình chỉ nghĩ lập trình là xây dựng thuật toán để giải quyết một vấn đề cụ thể.
Còn đối với Machine Learning, thì chúng ta lập trình để máy tính học và và giải quyết các yêu cầu từ “kiến thức đã có”. Vốn kiến thức này chính là dữ liệu (dữ liệu dùng để dạy cho máy tính học trước khi suy ra kết quả gọi là training data).

2. Các thuật toán cơ bản

Trước khi chúng ta học giải Phương trình, Vi phân, Toán cao cấp, … thì chúng ta phải học những phép tính cơ bản trước như: cộng, trừ, nhân, chia, lấy căn, …
Đối với Machine Learning cũng vậy, khi mình tìm hiểu về nó qua các khóa học, mình được ho những thuật toán cơ bản nhất, để từ đó kết hợp và giải quyết các vấn đề phức tạp hơn.

Tổng hợp lại thì ta có:
– Decision Trees
– Naive Bayes
– Gradient Descent
– Linear Regression
– Logistic Regression
– Neural Networks
– Clustering

Tất nhiên còn rất nhiều thuật toán khác, nếu bạn thấy thuật toán nào hay muốn chia sẻ, hãy comment phía dưới nhé!

Decision Trees / Random Forest

Decision Trees là một thuật toán mà trong đó chúng ta xét từng thuộc tính của đối tượng so với điều kiện mà chúng ta đặt ra trước để phân loại đối tượng vào các nhóm. Xem hình phía dưới, bạn sẽ hiểu tại sao nó được gọi là Decision Trees (cây quyết định).

ví dụ kinh điển: tính khả năng sống sót của một người trên tàu Titanic

Theo mình học được thì thuật toán này có các điểm mạnh sau:

  • Dễ hiểu và dễ giải thích
  • Áp dụng cho cả dữ liệu số và dữ liệu phân loại (có thể tạm hiểu là kiểu dữ liệu enum).
  • Xử lí tốt với dữ liệu lớn.

Hạn chế thì có:

  • Thay đổi dữ liệu dạy học (training data) sẽ thay đổi cây cấu trúc.
  • Không chính xác bằng các thuật toán khác.
  • Có nhiều kiểu dữ liệu mà sẽ làm cho thuật toán này bối rối, ví dụ: XOR

Naive Bayes

Naive Bayes là thuật toán dùng để phân nhóm dựa vào tính xác suất có điều kiện. Nếu ai đã học xác xuất thống kế thì có lẽ đã nghe đến công thức này.

Ví dụ kinh điển: detecting spam emails

Dựa vào training data đã phân loại, ta sẽ xác định các thuộc tính của chúng, ví dụ ở đây là từ “cheap”, ta sẽ tính tỉ lệ email là spam khi có tư “cheap”. Sau đó ta xác định với các thuộc tính khác.
Khi có email mới sẽ xác định tỉ lệ email mới có phải spam không dựa theo việc xác định theo thuộc tính, thường là lấy tích các thuộc tính. Xem thêm về công thức Naive Bayes để hiểu cách tính.

Ưu điểm mình nhận thấy là: tạo ra các bộ lọc khác nhau cho các trường hợp khác nhau, ví dụ email bị cho là spam khác nhau với mỗi người.

Nhươc điểm là:

  • Khi quá nhiều thuộc tính, dataset quá lớn thì sẽ chạy chậm.
  • Và sẽ không chính xác khi các thuộc tính có nhiều mối tương quan.

Gradient Descent

Đây là một dạng thuật toán tìm thành phần ưu tiên. Thuật toán này tương tự cách chúng ta đi xuống đồi, chúng sẽ tìm nơi có độ cao thấp nhất và đi về hướng đó. Thuật toán này sẽ tìm biến để cho biểu thức xác định đạt giá trị nhỏ nhất.

Thuật toán này chủ yếu được ứng dụng để xây dựng các thuật toán khác.

Linear Regression & Logistic Regression

Với mình thì các thuật toán dạng Regression giố với các bài phương trình hàm: với biểu thức y = a x + b mà ta có rất nhiều cặp số (x, y) và nhiệm vụ là tìm ngược lại a và b

Linear Regression đúng như tên gọi của nó, ta cố gắng vẽ một đường thẳng sao cho tổng khoảng cách từ các điểm đến nó là ngắn nhất.
Khi có một dữ liệu mới, ta sẽ dựa vào đường thẳng này để dự đoán.
Ví dụ, giá nhà sẽ tăng khi diện tích căn nhà tăng và ta sẽ ước tính sự liên quan này qua một đường thẳng trên biểu đồ.

Tất nhiên, trong thực tế thì sẽ ít khi xuất hiện đường thẳng. Lúc đó ta cần đến Logistic Regression.

Lúc này chúng ta sẽ cố gắng dự đoán bằng cách phân chia hai miền giá trị bằng một hàm đặc biệt.

Regression đều ứng dụng Gradient Descent để tìm được hàm chính xác.

Support Vector Machines

Vấn đề đặt ra là khi mà dữ liệu mẫu phân nhóm, không bao phủ thì độ chính xác của Regression không cao nữa. Ví dụ như hình sau:

Bạn thấy đấy, các đường kẻ chia cắt 2 nhóm đều đúng, vậy thì đường nào là đúng nhất?
Lúc này thì ta áp dụng Support Vector Machines (SVM). Với SVM thì ta sẽ cố gắng mở rộng mỗi miền giá trị nhất có thể.
Có thể hiểu thuật toán này qua hình trên, chúng ta cần tìm đường thẳng chia ở giữa làm sao cho khoảng cách ngắn nhất của các điểm đến đường thẳng là dài nhất.

I will update later

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a website or blog at WordPress.com

Up ↑

%d bloggers like this: