Top 5 thuật toán phân loại (Classification) trong Machine learning

Trong supervised learning (loại machine learning phổ biến nhất hiện nay), regression và classification là hai nhóm thuật toán cực kì quan trọng. Với Classification, data analyst có thể giải quyết các bài toán như phân loại khách hàng, đánh giá rủi ro tín dụng, hay bất cứ business case nào với mục đích phân loại.

Trong bài viết này của TM Data School, chúng ta sẽ thảo luận về 5 thuật toán phổ biến dành cho các vấn đề classification, bao gồm: logistic regression, decision tree, random forest, support vector machine, và K nearest neighbour. Bài viết cũng sẽ mô tả cách triển khai classification với Python, cùng các metric để đánh giá từng mô hình. Còn nếu bạn muốn thực hành chi tiết hơn về các thuật toán này với giáo trình chuẩn đại học top 1% thế giới, hãy cùng tìm hiểu khóa học Advanced Analytics with Python của TM Data school nhé.

1. Logistic Regression

Logistic regression sử dụng hàm sigmoid để trả về xác suất của một nhãn. Nó được sử dụng rộng rãi khi vấn đề phân loại là nhị phân (binary) — đúng hoặc sai, thắng hoặc thua, tích cực hoặc tiêu cực, dương tính hoặc âm tính… Bằng cách so sánh xác suất với một ngưỡng đã được định trước, đối tượng cần phân loại (predicted variable y) sẽ được gán cho một nhãn tương ứng (ví dụ thường 1 tương ứng với dương tính, và 0 tương ứng với âm tính).

Dưới đây là đoạn code cho một logistic regression:

với Linear regression, nhưng Logistic regression thực ra là thuật toán phân loại và không có tính chất như linear regression cho các continuous variables.

Slide trích từ khóa học Advanced Analytics with Python của TM Data school

2. Decision Tree

Decision tree hoạt động bằng cách chia dữ liệu thành các nhóm con nhỏ hơn dựa trên các điều kiện nhất định, tạo ra một cấu trúc cây với các nút đại diện cho các điều kiện kiểm tra trên các thuộc tính (features) và các nhánh đại diện cho kết quả của các điều kiện này.

Mỗi nút lá (leaf node) của cây đại diện cho một nhãn lớp. Quá trình chia dữ liệu tiếp tục cho đến khi đạt được một tiêu chí dừng nhất định, chẳng hạn như tất cả các nút lá chứa dữ liệu thuần nhất hoặc đạt đến độ sâu tối đa của cây.

Decision tree có ưu điểm là dễ hiểu và trực quan hóa, nhưng cũng có nhược điểm là dễ bị overfitting (kết quả tốt trong lúc training nhưng sai số nhiều hơn với new data set), đặc biệt là khi cây quá sâu. Dưới đây là một đoạn code mẫu cho decision tree trong Python:

3. Random Forest

Như tên gọi của nó, random forest là một tập hợp của nhiều decision trees. Đây là một loại phương pháp tổng hợp phổ biến, kết hợp kết quả từ nhiều bộ dự đoán. Random forest còn sử dụng kỹ thuật bagging, cho phép mỗi cây được huấn luyện trên một mẫu ngẫu nhiên của tập dữ liệu gốc và lấy kết quả là giá trị đa số từ các cây. So với decision tree, random forest có khả năng khái quát hóa tốt hơn nhưng lại kém dễ hiểu hơn (interpretability) do có nhiều lớp được thêm vào mô hình.

Dưới đây là một đoạn code mẫu cho random forest trong Python:

Trong đoạn code này:

4. Support Vector Machine (SVM)

SVM hoạt động bằng cách tìm kiếm đường biên tốt nhất để phân chia các điểm dữ liệu thành các lớp khác nhau. Đường biên này, được gọi là hyperplane, được đặt sao cho nó tối đa hóa khoảng cách giữa các điểm dữ liệu của các lớp (ví dụ trên hình minh hoạ là hai lớp). Điều này giúp tạo ra một vùng đệm lớn nhất có thể giữa các lớp, giúp cải thiện khả năng phân loại của mô hình.

Điều làm cho SVM đặc biệt hữu ích là khả năng xử lý các trường hợp mà dữ liệu không thể phân chia một cách tuyến tính. Trong những tình huống này, SVM sử dụng các kỹ thuật kernel trick để ánh xạ dữ liệu vào không gian đa chiều, nơi mà một hyperplane có thể được sử dụng để phân chia dữ liệu. Dưới đây là đoạn mã Python cơ bản cho SVM (classifier):

5. K-Nearest Neighbour (KNN)

K nearest neighbour (KNN) là một thuật toán phân loại đơn giản nhưng hiệu quả. Mỗi điểm dữ liệu được biểu diễn trong không gian n chiều, tương ứng với n (features/ columns trong data set). Thuật toán này tính khoảng cách giữa các điểm dữ liệu. Sau đó, số k trong K nearest neighbour (KNN) xác định số lượng điểm dữ liệu gần nhất được xem xét để gán nhãn cho một điểm dữ liệu chưa được quan sát (predicted y). Cụ thể, nếu biến là numerical, tính giá trị trung bình (mean) của K điểm để xác định predicted y variable; nếu biến là categorical, chọn giá trị xuất hiện nhiều nhất (mode) trong K điểm đó để gán cho predicted y variable.

Case study: Project Classification (phân loại và dự đoán tình trạng sức khoẻ có bị bệnh tim hay không)

1. Tải Dataset và coi Data Overview

Predicted variable y là “target” trong bảng preview dưới đây. Trong đó giá trị “target” = 1 là có bệnh tim, và “target” = 0 là không có bệnh tim.

Sử dụng df.info() để có cái nhìn tổng quan về bộ dữ liệu bao gồm loại dữ liệu, dữ liệu thiếu và số lượng records/ rows.

2. Exploratory Data Analysis (EDA)

Biểu đồ histogram được sử dụng cho tất cả các numerical features (trong phân tích đơn biến) .

Categorical Features vs. Target — Grouped Bar Chart

Các dữ liệu categorical được trực quan hoá tương ứng với target (bằng 0 hoặc 1).

Numerical Features vs. Target — Box Plot

Box plot được sử dụng để xem tính phân phối của các features.

3. Chia Dataset thành Training & Testing Set

Bộ dữ liệu cần được chia thành một tập con để huấn luyện (train) và một tập con để kiểm tra (test). Mô hình được huấn luyện trên tập huấn luyện và sau đó được kiểm tra bằng tập kiểm tra.

4. Machine Learning Model Pipeline

Để tạo một pipeline (giúp tiết kiệm thời gian và công sức khi phải lặp lại quy trình với các thuật toán khác nhau), chúng ta sẽ thêm trạng thái mặc định của tất cả các thuật toán phân loại đã đề cập ở trên vào danh sách mô hình và sau đó lặp chúng để huấn luyện, kiểm tra, dự đoán và đánh giá.

5. Model Evaluation (đánh giá mô hình)

Dưới đây là giải thích tóm tắt về các phương pháp đánh giá phổ biến cho các mô hình phân loại — accuracy, ROC & AUC, và confusion matrix.

1. Accuracy

Accuracy là chỉ số đơn giản nhất để đo lường hiệu suất của mô hình. Nó đo tỷ lệ dự đoán chính xác: accuracy = (true positive + true negative) / (true positive + false positive + false negative + false positive).

2. ROC & AUC

ROC là đồ thị của true positive rate so với false positive rate ở các ngưỡng phân loại khác nhau. AUC là diện tích dưới đường cong ROC và AUC cao hơn cho thấy hiệu suất mô hình tốt hơn..

3. Confusion matrix

Confusion matrix chỉ ra giá trị thực tế so với giá trị dự đoán và tóm tắt các giá trị true negative, false positive, false negative và true positive trong một ma trận.

Slide trích từ khóa học Advanced Analytics with Python của TM Data school

Sau đó, chúng ta có thể sử dụng seaborn để trực quan hóa confusion matrix với biểu đồ heatmap.

Dựa trên ba phương pháp đánh giá trên, random forest có hiệu suất tốt nhất, trong khi KNN không hoạt động tốt. Tuy nhiên, điều này không có nghĩa là random forest là thuật toán ưu việt hơn. Chúng ta chỉ có thể nói rằng chúng phù hợp hơn với bộ dữ liệu này, nơi kích thước tương đối nhỏ và dữ liệu không cùng tỷ lệ (scale).

Kết luận

Mỗi thuật toán có điểm mạnh/ yếu và yêu cầu các kỹ thuật xử lý dữ liệu khác nhau, ví dụ như KNN nhạy cảm với các features có quy mô (scale) khác nhau, trong khi multicollinearity (các biến độc lập trong một mô hình có mối quan hệ tuyến tính) ảnh hưởng đến kết quả của logistic regression. Nếu bạn muốn hiểu lúc nào nên chọn KNN, lúc nào nên chọn Logistic regression, hay cách chọn các mô hình phù hợp, hãy tham gia khoá học khóa học Advanced Analytics with Python của TM Data school với 100% giảng viên được đào tạo về Data science tại nước ngoài (top 1% các chương trình về Data science trên thế giới) nhé.

Link nội dung: https://uws.edu.vn/classification-la-gi-a63492.html