Phân tích phân biệt tuyến tính (LDA) thường bị lu mờ bởi thuật toán phổ biến hơn là phân tích thành phần chính (PCA) khi nói đến giảm chiều dữ liệu. Tuy nhiên, LDA mang đến điều mà PCA không có: vừa giảm số chiều, vừa tối ưu khả năng tách biệt giữa các lớp.
Hướng dẫn này sẽ giới thiệu với bạn về LDA, trực giác toán học đằng sau nó, và các ứng dụng thực tế của kỹ thuật này. Tiếp đó, chúng ta sẽ triển khai LDA trên một tập dữ liệu, so sánh với PCA, và phân tích ưu nhược điểm, nhằm cung cấp cho bạn mọi thứ cần thiết để bắt đầu áp dụng LDA trong dự án tiếp theo.
Giới thiệu về Phân tích Phân biệt Tuyến tính (LDA)
LDA là một kỹ thuật giảm chiều và phân loại dựa trên giả định rằng các lớp khác nhau tạo ra dữ liệu theo các phân phối Gaussian khác nhau.
Mục tiêu của LDA là tìm tổ hợp tuyến tính của các đặc trưng sao cho tách các lớp tốt nhất. Nó tối đa hóa tỷ số giữa độ phân tán giữa các lớp và độ phân tán trong cùng lớp. Nói đơn giản, nó cố gắng tìm các hướng trong không gian đặc trưng mà tại đó các lớp khác nhau cách xa nhau (độ phân tán giữa lớp cao) trong khi các điểm trong cùng một lớp lại gần nhau (độ phân tán trong lớp thấp).
Mục tiêu kép này khiến LDA đặc biệt hiệu quả cho cả bài toán giảm chiều và phân loại.
Toán học đằng sau LDA
Để hiểu toán học đằng sau LDA, cần tách thuật toán thành ba thành phần chính:
độ phân tán trong lớp,
độ phân tán giữa lớp, và
mục tiêu tối ưu hóa.
Ma trận phân tán trong lớp (Sw)
Ma trận phân tán trong lớp đo lường mức độ phân tán của các điểm dữ liệu trong từng lớp.
Với mỗi lớp i, ta tính ma trận phân tán Si như sau:
Về bản chất, điều này là tối đa hóa tỷ lệ giữa độ phân tán giữa lớp và độ phân tán trong lớp trong không gian đã chiếu. Lời giải liên quan đến việc tìm các trị riêng và vectơ riêng của ma trận Sw-1Sb, từ đó cho ta các hướng (các thành phần phân biệt tuyến tính) tách lớp tốt nhất.
Như vậy, LDA rút gọn bài toán tối ưu phức tạp này về một phân rã trị riêng, giúp tính toán hiệu quả ngay cả với các tập dữ liệu có số chiều tương đối cao.
Giờ khi đã hiểu khái niệm và trực giác toán học đằng sau LDA, hãy tìm hiểu các ứng dụng thực tế của nó.
Ứng dụng thực tế của LDA
LDA có nhiều ứng dụng trong các lĩnh vực cần phân loại và giảm chiều dữ liệu:
Chẩn đoán y khoa: LDA được dùng trong xử lý ảnh y khoa để phân loại các loại khối u hoặc bất thường. Nó có thể phân tích ảnh MRI để phân biệt mô lành tính và ác tính bằng cách nhận diện các đặc trưng phân biệt nhất trong dữ liệu ảnh.
Tài chính và ngân hàng: Hệ thống chấm điểm tín dụng dùng LDA để phân loại người vay vào các nhóm rủi ro. Bằng cách phân tích các chỉ số tài chính như thu nhập, tỷ lệ nợ/thu nhập và lịch sử tín dụng, LDA giúp tách người vay rủi ro cao và thấp.
Tin sinh học: Phân tích biểu hiện gen dùng LDA để phân loại các trạng thái bệnh hoặc phản ứng điều trị khác nhau. Nó giúp xác định những gen quan trọng nhất để phân biệt giữa mẫu mô khỏe mạnh và bệnh lý.
Marketing và phân khúc khách hàng: Doanh nghiệp sử dụng LDA để phân khúc khách hàng dựa trên hành vi mua sắm, dữ liệu nhân khẩu học và mức độ tương tác. Điều này hữu ích cho các chiến dịch tiếp thị nhắm mục tiêu và đề xuất sản phẩm cá nhân hóa.
Nhận dạng hình ảnh: Hệ thống nhận dạng khuôn mặt sử dụng LDA để giảm chiều của ảnh khuôn mặt trong khi vẫn giữ lại các đặc trưng quan trọng nhất để phân biệt giữa các cá nhân.
Kiểm soát chất lượng: Ngành sản xuất áp dụng LDA để phân loại sản phẩm lỗi hoặc không lỗi dựa trên các chỉ số chất lượng, hỗ trợ tự động hóa quy trình đảm bảo chất lượng.
Nhận dạng giọng nói: LDA hỗ trợ phân loại âm vị bằng cách xác định các đặc trưng âm học phân biệt tốt nhất giữa các âm thanh lời nói, cải thiện độ chính xác của hệ thống chuyển giọng nói thành văn bản.
Giám sát môi trường: LDA được dùng để phân loại điều kiện môi trường dựa trên dữ liệu cảm biến, như phân biệt các mức độ ô nhiễm hoặc kiểu thời tiết khác nhau.
Triển khai LDA trong Python
Hãy cùng đi qua một ví dụ end-to-end triển khai LDA bằng Python.
Chúng ta sẽ dùng bộ dữ liệu Seeds, có thể tải từ thư viện UCI cũng như từ Kaggle. Bộ dữ liệu chứa các phép đo hạt lúa mì thuộc ba giống khác nhau.
Bước 1: Import thư viện và nạp dữ liệu
Trước tiên, ta import các thư viện cần thiết và nạp bộ dữ liệu:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
# Load the seeds dataset
file_path ="seeds_dataset.txt"
column_names =['area','perimeter','compactness','kernel_length','kernel_width','asymmetry','groove_length','variety']# Read the data with whitespace delimiter (space or tab)
seeds_df = pd.read_csv(file_path, sep='\s+', header=None, names=column_names)print(f"Dataset shape: {seeds_df.shape}")
seeds_df.head()Được hỗ trợ bởi
Ta sẽ thấy 5 dòng đầu tiên của bộ dữ liệu đã nạp như bên dưới:
Tổng quan bộ dữ liệu Seeds. (Hình do Tác giả cung cấp)
Bước 2: Tiền xử lý dữ liệu
Hãy khám phá cấu trúc dữ liệu và chuẩn bị cho phân tích LDA:
# Check for missing valuesprint(f"Missing values: {seeds_df.isnull().sum().sum()}")# Check class distributionprint("\nClass distribution:")print(seeds_df['variety'].value_counts())# Separate features and target
X = seeds_df.drop('variety', axis=1)
y = seeds_df['variety']# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=42, stratify=y)# Standardize the features
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)Được hỗ trợ bởi
Ở đây, ta kiểm tra xem bộ dữ liệu có giá trị thiếu hay không và xem có bao nhiêu ví dụ thuộc mỗi hạng mục. Sau đó, chuẩn bị dữ liệu bằng cách tách đầu vào khỏi nhãn, chia thành phần huấn luyện và kiểm tra, và chuẩn hóa các giá trị đầu vào để mọi đặc trưng ở cùng thang đo tương tự.
Tiền xử lý dữ liệu. (Hình do Tác giả cung cấp)
Ta thấy không có giá trị thiếu và phân bố các lớp là đồng đều.
Bước 3: Áp dụng LDA để giảm chiều
Giờ ta sẽ áp dụng LDA để giảm chiều dữ liệu đồng thời giữ được khả năng tách biệt lớp:
# Create and fit LDA model
lda = LinearDiscriminantAnalysis(n_components=2)
X_train_lda = lda.fit_transform(X_train_scaled, y_train)
X_test_lda = lda.transform(X_test_scaled)# Print explained variance ratioprint("Explained variance ratio:", lda.explained_variance_ratio_)print("Cumulative explained variance:", np.cumsum(lda.explained_variance_ratio_))Được hỗ trợ bởi
Ta đang tạo một mô hình tìm các hướng tốt nhất để tách các hạng mục khác nhau trong dữ liệu. Bằng cách giảm về hai đặc trưng mới (vì có ba hạng mục), ta giữ lại những khuôn mẫu quan trọng nhất để phân biệt chúng.
Kết quả đầu ra như sau:
Kết quả phương sai của LDA. (Hình do Tác giả cung cấp)
Đầu ra này cho thấy mức độ thông tin phục vụ tách lớp được hai đặc trưng mới do LDA tạo ra nắm bắt:
Tỷ lệ phương sai giải thích: Điều này nghĩa là thành phần LDA thứ nhất nắm bắt khoảng 67,7% thông tin cần thiết để phân biệt các lớp, trong khi thành phần thứ hai nắm phần còn lại 32,3%.
Phương sai lũy tích: Cả hai thành phần cùng nhau nắm bắt 100% thông tin tách lớp trong dữ liệu gốc. Điều này là kỳ vọng được vì chúng ta có 3 lớp, và LDA cho tối đa 2 hướng hữu ích.
Bước 4: Trực quan hóa phép biến đổi LDA
Hãy trực quan hóa cách LDA biến đổi dữ liệu và tách các lớp:
fig,(ax1, ax2)= plt.subplots(1,2, figsize=(14,6))# Plot the first two original features
ax1.scatter(X_train_scaled[:,0], X_train_scaled[:,1],
c=y_train, cmap='viridis', alpha=0.7, edgecolor='k')
ax1.set_xlabel('Area (standardized)')
ax1.set_ylabel('Perimeter (standardized)')
ax1.set_title('Original Feature Space (First Two Features)')
ax1.grid(True, alpha=0.3)# Plot LDA-transformed data
scatter = ax2.scatter(X_train_lda[:,0], X_train_lda[:,1],
c=y_train, cmap='viridis', alpha=0.7, edgecolor='k')
ax2.set_xlabel('First Linear Discriminant')
ax2.set_ylabel('Second Linear Discriminant')
ax2.set_title('LDA-Transformed Space')
ax2.grid(True, alpha=0.3)
plt.colorbar(scatter, ax=ax2, label='Wheat Variety')
plt.tight_layout()
plt.show()Được hỗ trợ bởi
Đoạn mã trên tạo hai biểu đồ đặt cạnh nhau để giúp ta so sánh dữ liệu trước và sau khi áp dụng kỹ thuật giảm chiều, như hình dưới:
Trực quan hóa LDA. (Hình do Tác giả cung cấp)
Biểu đồ đầu cho thấy dữ liệu gốc với hai đặc trưng đo được (diện tích và chu vi), để ta thấy các hạng mục tách biệt tự nhiên đến mức nào. Biểu đồ thứ hai hiển thị dữ liệu sau khi biến đổi sang các hướng mang nhiều thông tin nhất cho việc tách hạng mục. Thanh màu được thêm vào để cho biết màu nào ứng với loại lúa mì nào.
Bước 5: Dùng LDA cho phân loại
LDA cũng có thể được sử dụng trực tiếp như một bộ phân loại.
Ta huấn luyện một mô hình nhận diện các hạng mục lúa mì khác nhau dựa trên dữ liệu huấn luyện. Sau đó kiểm tra hiệu quả trên các ví dụ mới, chưa thấy trước, bằng cách đo độ chính xác tổng thể và mức độ dự đoán đúng từng hạng mục.
Kết quả như sau:
Kết quả phân loại bằng LDA. (Hình do Tác giả cung cấp)
Mô hình dự đoán đúng loại lúa mì khoảng 92% thời gian, có thể xem là hiệu suất tốt.
Ví dụ này cho thấy rằng dù LDA thường dùng cho giảm chiều, nó cũng có thể đóng vai trò bộ phân loại bằng cách mô hình hóa phân phối xác suất của mỗi lớp và gán dữ liệu mới vào lớp có khả năng cao nhất.
So sánh LDA và PCA với Mã và Trực quan hóa
Phân tích Thành phần Chính là một kỹ thuật giảm chiều phổ biến khác, tìm các hướng có phương sai lớn nhất trong dữ liệu.
Biểu đồ bên trái hiển thị dữ liệu qua PCA, vốn tìm các hướng nắm bắt nhiều biến thiên tổng thể nhất trong dữ liệu. Biểu đồ bên phải là kết quả LDA, vốn tìm các hướng tách biệt các hạng mục lúa mì tốt nhất.
Dựa trên kết quả triển khai và các giá trị phương sai giải thích, ta có thể kết luận rằng tuy cả hai hoạt động tốt, với các bài toán phân loại như thế này, LDA thường tạo ra sự tách biệt giữa các nhóm rõ ràng hơn.
Điểm khác biệt của LDA so với các kỹ thuật giảm chiều khác là tính có giám sát. Trong khi PCA chỉ xét phương sai dữ liệu mà không quan tâm đến nhãn lớp, LDA sử dụng trực tiếp thông tin lớp để tìm các hướng phân biệt nhất. Điều này lý tưởng khi xử lý dữ liệu nhiều chiều mà khả năng tách lớp quan trọng hơn việc giữ nguyên biến thiên tổng thể.
Vì vậy, PCA có thể dùng khi:
Cần giảm chiều không giám sát
Không có nhãn lớp hoặc nhãn không liên quan
Muốn trực quan hóa dữ liệu nhiều chiều
Cần giảm nhiễu và độ phức tạp tính toán
Tương tự, ta có thể dùng LDA khi:
Có dữ liệu gán nhãn và muốn tối đa hóa phân tách lớp
Số mẫu cho mỗi lớp đủ lớn (thường > 30)
Cần cả giảm chiều lẫn phân loại
Phân biệt lớp quan trọng hơn việc giữ biến thiên tổng thể
Ưu và nhược điểm của LDA
Giống mọi thuật toán, LDA có điểm mạnh và hạn chế mà ta cần lưu ý trước khi áp dụng trong dự án.
Ưu điểm
Lợi thế học có giám sát: Không như PCA, LDA sử dụng thông tin nhãn lớp để tìm đặc trưng phân biệt nhất, hiệu quả hơn cho bài toán phân loại.
Giảm chiều đi kèm phân loại: Vừa giảm số chiều, vừa cung cấp sẵn một bộ phân loại tuyến tính.
Hiệu quả tính toán: Chỉ cần phân rã trị riêng nên nhanh ngay cả với tập dữ liệu cỡ vừa.
Dễ diễn giải: Các thành phần phân biệt tuyến tính có thể được hiểu như tổ hợp có trọng số của các đặc trưng gốc.
Tối ưu cho phân phối Gaussian: Cung cấp bộ phân loại tuyến tính tối ưu khi các lớp tuân theo phân phối Gaussian với ma trận hiệp phương sai bằng nhau.
Không cần tinh chỉnh siêu tham số: Không giống nhiều thuật toán học máy khác, LDA không có siêu tham số cần tinh chỉnh trong triển khai cơ bản.
Nhược điểm
Chỉ ranh giới tuyến tính: Không thể nắm bắt các quan hệ phi tuyến giữa đặc trưng và lớp.
Giả định Gaussian và hiệp phương sai bằng nhau: Giả định mỗi lớp tuân theo phân phối Gaussian đa biến, điều này có thể không đúng với dữ liệu thực tế, và giả định các lớp có cùng ma trận hiệp phương sai, điều này thường bị vi phạm trong thực hành.
Số thành phần hạn chế: Có thể trích xuất tối đa (n_classes — 1) thành phần phân biệt, có thể không đủ cho trực quan hóa trong các bài toán đa lớp.
Nhạy với ngoại lệ và đa cộng tuyến: Việc tính trung bình và hiệp phương sai nhạy với ngoại lệ, và thuật toán có thể hoạt động kém khi các đặc trưng tương quan cao.
Yêu cầu kích thước mẫu: Cần đủ số mẫu trên mỗi lớp để ước lượng ma trận hiệp phương sai một cách tin cậy.
Hiểu rõ các đánh đổi này giúp ta quyết định liệu LDA có phải là thuật toán phù hợp nhất cho bài toán đang xét hay không.
Kết luận
Bài viết đã giới thiệu phân tích phân biệt tuyến tính, một kỹ thuật có giám sát kết hợp giảm chiều với phân loại bằng cách tối đa hóa tỷ số giữa phân tán giữa lớp và phân tán trong lớp.
Chúng ta đã khám phá nền tảng toán học của LDA, triển khai bằng Python, và so sánh với PCA để hiểu khi nào mỗi kỹ thuật phù hợp nhất. Ta cũng tìm hiểu các ứng dụng thực tế của LDA và thảo luận ưu nhược điểm của nó.
Để đào sâu hiểu biết về LDA và các kỹ thuật học máy liên quan, hãy cân nhắc tham gia lộ trình Supervised Machine Learning in Python, nơi bạn sẽ thành thạo nhiều thuật toán và cách triển khai của chúng, hoặc khóa học Dimensionality Reduction in Python để tìm hiểu sâu hơn về các kỹ thuật giảm chiều có giám sát và không giám sát.
Với vai trò nhà khoa học dữ liệu cao cấp, tôi thiết kế, phát triển và triển khai các giải pháp học máy quy mô lớn để giúp doanh nghiệp ra quyết định dựa trên dữ liệu hiệu quả hơn. Với vai trò tác giả về khoa học dữ liệu, tôi chia sẻ những bài học kinh nghiệm, lời khuyên nghề nghiệp và các hướng dẫn thực hành chuyên sâu.
Phân tích phân biệt tuyến tính (LDA) thường bị lu mờ bởi thuật toán phổ biến hơn là phân tích thành phần chính (PCA) khi nói đến giảm chiều dữ liệu. Tuy nhiên, LDA mang đến điều mà PCA không có: vừa giảm số chiều, vừa tối ưu khả năng tách biệt giữa các lớp.
Hướng dẫn này sẽ giới thiệu với bạn về LDA, trực giác toán học đằng sau nó, và các ứng dụng thực tế của kỹ thuật này. Tiếp đó, chúng ta sẽ triển khai LDA trên một tập dữ liệu, so sánh với PCA, và phân tích ưu nhược điểm, nhằm cung cấp cho bạn mọi thứ cần thiết để bắt đầu áp dụng LDA trong dự án tiếp theo.
Giới thiệu về Phân tích Phân biệt Tuyến tính (LDA)
LDA là một kỹ thuật giảm chiều và phân loại dựa trên giả định rằng các lớp khác nhau tạo ra dữ liệu theo các phân phối Gaussian khác nhau.
Mục tiêu của LDA là tìm tổ hợp tuyến tính của các đặc trưng sao cho tách các lớp tốt nhất. Nó tối đa hóa tỷ số giữa độ phân tán giữa các lớp và độ phân tán trong cùng lớp. Nói đơn giản, nó cố gắng tìm các hướng trong không gian đặc trưng mà tại đó các lớp khác nhau cách xa nhau (độ phân tán giữa lớp cao) trong khi các điểm trong cùng một lớp lại gần nhau (độ phân tán trong lớp thấp).
Mục tiêu kép này khiến LDA đặc biệt hiệu quả cho cả bài toán giảm chiều và phân loại.
Toán học đằng sau LDA
Để hiểu toán học đằng sau LDA, cần tách thuật toán thành ba thành phần chính:
Ma trận phân tán trong lớp (Sw)
Ma trận phân tán trong lớp đo lường mức độ phân tán của các điểm dữ liệu trong từng lớp.
Với mỗi lớp i, ta tính ma trận phân tán Si như sau:
Trong đó x là từng điểm dữ liệu thuộc lớp i, và μi là trung bình của lớp i. Tổng ma trận phân tán trong lớp là:
Ma trận phân tán giữa lớp (Sb)
Ma trận phân tán giữa lớp đo độ xa nhau giữa các trung bình lớp so với trung bình tổng thể. Nó được tính như sau:
Trong đó Ni là số mẫu trong lớp i, μi là trung bình của lớp i, và μ là trung bình tổng của toàn bộ dữ liệu.
Mục tiêu tối ưu hóa
LDA tìm ma trận chiếu W để tối đa hóa tiêu chuẩn Fisher:
Về bản chất, điều này là tối đa hóa tỷ lệ giữa độ phân tán giữa lớp và độ phân tán trong lớp trong không gian đã chiếu. Lời giải liên quan đến việc tìm các trị riêng và vectơ riêng của ma trận Sw-1Sb, từ đó cho ta các hướng (các thành phần phân biệt tuyến tính) tách lớp tốt nhất.
Như vậy, LDA rút gọn bài toán tối ưu phức tạp này về một phân rã trị riêng, giúp tính toán hiệu quả ngay cả với các tập dữ liệu có số chiều tương đối cao.
Giờ khi đã hiểu khái niệm và trực giác toán học đằng sau LDA, hãy tìm hiểu các ứng dụng thực tế của nó.
Ứng dụng thực tế của LDA
LDA có nhiều ứng dụng trong các lĩnh vực cần phân loại và giảm chiều dữ liệu:
Triển khai LDA trong Python
Hãy cùng đi qua một ví dụ end-to-end triển khai LDA bằng Python.
Chúng ta sẽ dùng bộ dữ liệu Seeds, có thể tải từ thư viện UCI cũng như từ Kaggle. Bộ dữ liệu chứa các phép đo hạt lúa mì thuộc ba giống khác nhau.
Bước 1: Import thư viện và nạp dữ liệu
Trước tiên, ta import các thư viện cần thiết và nạp bộ dữ liệu:
Ta sẽ thấy 5 dòng đầu tiên của bộ dữ liệu đã nạp như bên dưới:
Bước 2: Tiền xử lý dữ liệu
Hãy khám phá cấu trúc dữ liệu và chuẩn bị cho phân tích LDA:
Ở đây, ta kiểm tra xem bộ dữ liệu có giá trị thiếu hay không và xem có bao nhiêu ví dụ thuộc mỗi hạng mục. Sau đó, chuẩn bị dữ liệu bằng cách tách đầu vào khỏi nhãn, chia thành phần huấn luyện và kiểm tra, và chuẩn hóa các giá trị đầu vào để mọi đặc trưng ở cùng thang đo tương tự.
Tiền xử lý dữ liệu. (Hình do Tác giả cung cấp)
Ta thấy không có giá trị thiếu và phân bố các lớp là đồng đều.
Bước 3: Áp dụng LDA để giảm chiều
Giờ ta sẽ áp dụng LDA để giảm chiều dữ liệu đồng thời giữ được khả năng tách biệt lớp:
Ta đang tạo một mô hình tìm các hướng tốt nhất để tách các hạng mục khác nhau trong dữ liệu. Bằng cách giảm về hai đặc trưng mới (vì có ba hạng mục), ta giữ lại những khuôn mẫu quan trọng nhất để phân biệt chúng.
Kết quả đầu ra như sau:
Đầu ra này cho thấy mức độ thông tin phục vụ tách lớp được hai đặc trưng mới do LDA tạo ra nắm bắt:
Bước 4: Trực quan hóa phép biến đổi LDA
Hãy trực quan hóa cách LDA biến đổi dữ liệu và tách các lớp:
Đoạn mã trên tạo hai biểu đồ đặt cạnh nhau để giúp ta so sánh dữ liệu trước và sau khi áp dụng kỹ thuật giảm chiều, như hình dưới:
Biểu đồ đầu cho thấy dữ liệu gốc với hai đặc trưng đo được (diện tích và chu vi), để ta thấy các hạng mục tách biệt tự nhiên đến mức nào. Biểu đồ thứ hai hiển thị dữ liệu sau khi biến đổi sang các hướng mang nhiều thông tin nhất cho việc tách hạng mục. Thanh màu được thêm vào để cho biết màu nào ứng với loại lúa mì nào.
Bước 5: Dùng LDA cho phân loại
LDA cũng có thể được sử dụng trực tiếp như một bộ phân loại.
Hãy triển khai nó:
Ta huấn luyện một mô hình nhận diện các hạng mục lúa mì khác nhau dựa trên dữ liệu huấn luyện. Sau đó kiểm tra hiệu quả trên các ví dụ mới, chưa thấy trước, bằng cách đo độ chính xác tổng thể và mức độ dự đoán đúng từng hạng mục.
Kết quả như sau:
Kết quả phân loại bằng LDA. (Hình do Tác giả cung cấp)
Mô hình dự đoán đúng loại lúa mì khoảng 92% thời gian, có thể xem là hiệu suất tốt.
Ví dụ này cho thấy rằng dù LDA thường dùng cho giảm chiều, nó cũng có thể đóng vai trò bộ phân loại bằng cách mô hình hóa phân phối xác suất của mỗi lớp và gán dữ liệu mới vào lớp có khả năng cao nhất.
So sánh LDA và PCA với Mã và Trực quan hóa
Phân tích Thành phần Chính là một kỹ thuật giảm chiều phổ biến khác, tìm các hướng có phương sai lớn nhất trong dữ liệu.
Hãy mở rộng ví dụ trước để so sánh LDA với PCA:
from sklearn.decomposition import PCA
Ta thấy biểu đồ sau:
Biểu đồ bên trái hiển thị dữ liệu qua PCA, vốn tìm các hướng nắm bắt nhiều biến thiên tổng thể nhất trong dữ liệu. Biểu đồ bên phải là kết quả LDA, vốn tìm các hướng tách biệt các hạng mục lúa mì tốt nhất.
Dựa trên kết quả triển khai và các giá trị phương sai giải thích, ta có thể kết luận rằng tuy cả hai hoạt động tốt, với các bài toán phân loại như thế này, LDA thường tạo ra sự tách biệt giữa các nhóm rõ ràng hơn.
Điểm khác biệt của LDA so với các kỹ thuật giảm chiều khác là tính có giám sát. Trong khi PCA chỉ xét phương sai dữ liệu mà không quan tâm đến nhãn lớp, LDA sử dụng trực tiếp thông tin lớp để tìm các hướng phân biệt nhất. Điều này lý tưởng khi xử lý dữ liệu nhiều chiều mà khả năng tách lớp quan trọng hơn việc giữ nguyên biến thiên tổng thể.
Vì vậy, PCA có thể dùng khi:
Tương tự, ta có thể dùng LDA khi:
Ưu và nhược điểm của LDA
Giống mọi thuật toán, LDA có điểm mạnh và hạn chế mà ta cần lưu ý trước khi áp dụng trong dự án.
Ưu điểm
Nhược điểm
Hiểu rõ các đánh đổi này giúp ta quyết định liệu LDA có phải là thuật toán phù hợp nhất cho bài toán đang xét hay không.
Kết luận
Bài viết đã giới thiệu phân tích phân biệt tuyến tính, một kỹ thuật có giám sát kết hợp giảm chiều với phân loại bằng cách tối đa hóa tỷ số giữa phân tán giữa lớp và phân tán trong lớp.
Chúng ta đã khám phá nền tảng toán học của LDA, triển khai bằng Python, và so sánh với PCA để hiểu khi nào mỗi kỹ thuật phù hợp nhất. Ta cũng tìm hiểu các ứng dụng thực tế của LDA và thảo luận ưu nhược điểm của nó.
Để đào sâu hiểu biết về LDA và các kỹ thuật học máy liên quan, hãy cân nhắc tham gia lộ trình Supervised Machine Learning in Python, nơi bạn sẽ thành thạo nhiều thuật toán và cách triển khai của chúng, hoặc khóa học Dimensionality Reduction in Python để tìm hiểu sâu hơn về các kỹ thuật giảm chiều có giám sát và không giám sát.