Tôi đã sử dụng Phân tích phân biệt tuyến tính (LDA) từ scikit-learn
thư viện máy học (Python) để giảm kích thước và có một chút tò mò về kết quả. Bây giờ tôi đang tự hỏi LDA scikit-learn
đang làm gì để kết quả trông khác với, ví dụ, cách tiếp cận thủ công hoặc LDA được thực hiện ở R. Thật tuyệt nếu ai đó có thể cung cấp cho tôi một số thông tin chi tiết ở đây.
Điều cơ bản liên quan nhất là việc scikit-plot
hiển thị một mối tương quan giữa hai biến trong đó cần có một mối tương quan 0.
Để thử nghiệm, tôi đã sử dụng bộ dữ liệu Iris và 2 phân biệt tuyến tính đầu tiên trông như thế này:
IMG-1. LDA thông qua scikit-learn
Điều này về cơ bản phù hợp với kết quả tôi tìm thấy trong tài liệu scikit-learn tại đây.
Bây giờ, tôi đã đi qua LDA từng bước và có một hình chiếu khác. Tôi đã thử các cách tiếp cận khác nhau để tìm hiểu điều gì đang xảy ra:
IMG-2. LDA trên dữ liệu thô (không định tâm, không chuẩn hóa)
Và đây sẽ là cách tiếp cận từng bước nếu tôi chuẩn hóa (chuẩn hóa điểm z; phương sai đơn vị) dữ liệu trước. Tôi đã làm điều tương tự chỉ với định tâm trung bình, điều này sẽ dẫn đến cùng một hình ảnh chiếu tương đối (và nó thực sự đã làm).
IMG-3. LDA từng bước sau khi định tâm trung bình hoặc tiêu chuẩn hóa
IMG-4. LDA trong R (cài đặt mặc định)
LDA trong IMG-3 nơi tôi tập trung dữ liệu (sẽ là cách tiếp cận ưa thích) trông cũng giống hệt như dữ liệu mà tôi đã tìm thấy trong Bài đăng của một người đã thực hiện LDA trong R
Mã để tham khảo
Tôi không muốn dán tất cả mã ở đây, nhưng tôi đã tải nó lên dưới dạng sổ ghi chép IPython ở đây được chia thành một số bước tôi đã sử dụng (xem bên dưới) cho phép chiếu LDA.
- Bước 1: Tính toán các vectơ trung bình d chiều
Bước 2: Tính toán ma trận phân tán
2.1 trong lớp ma trận tán xạ được tính bằng phương trình sau: S W = c Σ i = 1 S i = c Σ i = 1 n Σ x ∈ D i ( x - m i )
2.2 Ma trận phân tán giữa các lớp
3.1. Sắp xếp các hàm riêng bằng cách giảm giá trị riêng