Bài 8: Phân tích biệt thức bậc hai (Quadratic Discriminant Analysis)
Phân tích biệt thức tuyến tính (LDA) giả định rằng:
(1) các quan sát từ mỗi lớp có phân phối chuẩn và (2) các quan sát từ mỗi lớp có cùng ma trận hiệp phương sai.
Với các giả định này, LDA giúp xác định các giá trị sau:
- μk: Giá trị trung bình của tất cả các biến quan sát huấn luyện từ lớp thứ k .
- σ2 : Giá trị trung bình có trọng số của các phương sai mẫu đối với từng lớp trong số k lớp.
- πk : Tỷ lệ của các biến quan sát huấn luyện thuộc lớp thứ k .
D k (x) = x * (μ k / σ 2 ) - (μ k 2 / 2σ 2 ) + log (π k )
Tính chất tuyến tính của LDA ở chỗ các giá trị được tạo ra bởi hàm trên đến từ kết quả của các hàm tuyến tính của x.
Một mở rộng của phân tích biệt thức tuyến tính là phân tích biệt thức bậc hai (QDA).
QDA tương tự như LDA, cũng giả định rằng các quan sát từ mỗi lớp có phân phối chuẩn, nhưng QDA không giả định mỗi lớp có cùng ma trận hiệp phương sai. Thay vào đó, QDA giả định rằng mỗi lớp có ma trận hiệp phương sai riêng.
Có nghĩa là, QDA giả định rằng một biến quan sát từ lớp thứ k có dạng X ~ N (μ k , Σ k).
Với giả định này, QDA nhằm xác định các giá trị sau:
- μk: Giá trị trung bình của tất cả các biến quan sát để huấn luyện mô hình từ lớp thứ k .
- Σk: Ma trận hiệp phương sai của lớp thứ k .
- πk : Tỷ lệ của các quan sát huấn luyện thuộc lớp thứ k .
Ta có phương trình của mô hình QDA như sau:
D k (x) = -1/2*(x - μk)TΣ k -1 (x - μk ) - 1/2 * log | Σk | + log (πk)
QDA được gọi là bậc hai trong tên của nó, vì giá trị được tạo ra bởi hàm nói trên có từ kết quả của hàm bậc hai theo x.
So sánh LDA và QDA
Sự khác biệt chính giữa LDA và QDA: LDA giả định các lớp có cùng ma trận hiệp phương sai.
QDA thường được ưu tiên hơn LDA trong các trường hợp sau:
(1) Tập hợp dữ liệu huấn luyện lớn.
(2) Khi chúng ta không chắc chắn các lớp có cùng ma trận hiệp phương sai.
Khi các điều kiện trên dúng thì QDA có xu thế tốt hơn vì nó linh hoạt hơn LDA và phù hợp hơn với dữ liệu dự báo.
Chuẩn bị dữ liệu cho QDA
Khi chạy mô hình QDA cần đảm bảo dữ liệu đáp ứng các yêu cầu sau
1. Biến phản hồi có tính phân lớp. Mô hình QDA được thiết kế để sử dụng cho các biến phân lớp, tức là khi biến phản hồi có thể được đặt vào các lớp.
2. Các quan sát trong mỗi lớp tuân theo phân phối chuẩn . Đầu tiên, hãy kiểm tra xem mỗi phân phối giá trị trong mỗi lớp có phân phối chuẩn. Nếu không, trước hết cần chuyển đổi dữ liệu để chúng có phân phối chuẩn.
3. Xem xét các trường hợp ngoại lệ. Cần xem xét các giá trị ngoại lệ trong tập dữ liệu trước khi áp dụng QDA. Thông thường, chúng ta có thể kiểm tra các điểm ngoại lệ một cách trực quan bằng cách sử dụng biểu đồ boxplot hay scatter.
Phân tích biệt thức bậc 2 với Python
Bước 1: Tải các thư viện cần thiết
Đầu tiên, chúng ta sẽ tải các chức năng và thư viện cần thiết:
from sklearn.model_selection import train_test_split
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.model_selection import cross_val_score
from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd
import numpy as npBước 2: Tải dữ liệu
Dưới đây, chúng ta sẽ sử dụng tập dữ liệu iris từ thư viện sklearn. Đoạn mã sau đây cho thấy cách tải tập dữ liệu này và chuyển đổi nó thành DataFrame để dễ dàng làm việc hơn:
#load iris dataset iris = datasets.load_iris() #convert dataset to pandas DataFrame df = pd.DataFrame(data = np.c_[iris['data'], iris['target']], columns = iris['feature_names'] + ['target']) df['species'] = pd.Categorical.from_codes(iris.target, iris.target_names) df.columns = ['s_length', 's_width', 'p_length', 'p_width', 'target', 'species'] #view first six rows of DataFrame df.head() s_length s_width p_length p_width target species 0 5.1 3.5 1.4 0.2 0.0 setosa 1 4.9 3.0 1.4 0.2 0.0 setosa 2 4.7 3.2 1.3 0.2 0.0 setosa 3 4.6 3.1 1.5 0.2 0.0 setosa 4 5.0 3.6 1.4 0.2 0.0 setosa #find how many total observations are in dataset len(df.index) 150
Tập dữ liệu trên có 150 đối tượng.
Đối với ví dụ này, chúng ta sẽ xây dựng một mô hình phân tích biệt thức bậc 2 để phân lớp các bông hoa nhất định thuộc về loài nào.
Chúng ta sẽ sử dụng các biến dự báo sau trong mô hình:
- Chiều dài của đài hoa
- Chiều rộng của đài hoa
- Chiều dài cánh hoa
- Chiều rộng cánh hoa
Và chúng ta sẽ sử dụng chúng để dự đoán biến phản hồi Species, biến này sử dụng ba lớp tiềm năng sau:
- setosa
- versicolor
- virginica
Bước 3: Tinh chỉnh mô hình LDA
Tiếp theo, chúng ta sẽ tin chỉnh mô hình LDA cho dữ liệu, bằng cách sử dụng hàm QuadraticDiscriminantAnalsyis từ thư viện sklearn:
#define predictor and response variables X = df[['s_length', 's_width', 'p_length', 'p_width']] y = df['species'] #Fit the QDA model model = QuadraticDiscriminantAnalysis() model.fit(X, y)
Bước 4: Sử dụng mô hình để đưa ra dự đoán
Sau khi tinh chỉnh mô hình, chúng ta có thể đánh giá mô hình hoạt động như thế nào bằng cách sử dụng xác thực chéo k-lần phân tầng lặp lại.
Đối với ví dụ trên, chúng ta sử dụng 10 lần gấp và 3 lần lặp lại như sau:
#Define method to evaluate model
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
#evaluate model
scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
print(np.mean(scores))
0.97333333333334
Có thể thấy rằng mô hình có độ chính xác trung bình là 97,78% .
Sử dụng mô hình để dự đoán 1 bông hoa thuộc lớp nào, dựa trên các giá trị đầu vào như sau:
#define new observation new = [5, 3, 1, .4] #predict which class the new observation belongs to model.predict([new]) array(['setosa'], dtype='<U10')
Có thể thấy rằng mô hình dự đoán cho giá trị của biến quan sát cho trong đoạn code trên thuộc về loài setosa .
Nhận xét
Đăng nhận xét