Saya menggunakan Linear Discriminant Analysis (LDA) dari scikit-learn
perpustakaan pembelajaran mesin (Python) untuk pengurangan dimensi dan sedikit ingin tahu tentang hasilnya. Sekarang saya bertanya-tanya apa yang dilakukan LDA scikit-learn
sehingga hasilnya terlihat berbeda dari, misalnya, pendekatan manual atau LDA yang dilakukan di R. Akan lebih bagus jika seseorang bisa memberi saya wawasan di sini.
Apa yang pada dasarnya paling memprihatinkan adalah bahwa scikit-plot
menunjukkan korelasi antara dua variabel di mana harus ada korelasi 0.
Untuk tes, saya menggunakan dataset Iris dan 2 diskriminan linier pertama terlihat seperti ini:
IMG-1. LDA melalui scikit-learn
Ini pada dasarnya konsisten dengan hasil yang saya temukan di dokumentasi scikit-learning di sini.
Sekarang, saya melalui LDA langkah demi langkah dan mendapat proyeksi yang berbeda. Saya mencoba berbagai pendekatan untuk mencari tahu apa yang sedang terjadi:
IMG-2. LDA pada data mentah (tidak ada pemusatan, tidak ada standardisasi)
Dan di sini akan menjadi pendekatan langkah-demi-langkah jika saya menstandarkan (z-skor normalisasi; varian unit) data terlebih dahulu. Saya melakukan hal yang sama hanya dengan pemusatan-kejam saja, yang seharusnya mengarah pada gambar proyeksi relatif yang sama (dan memang memang demikian).
IMG-3. Step-by-step LDA setelah mean-centering, atau standardisasi
IMG-4. LDA dalam R (pengaturan default)
LDA di IMG-3 di mana saya memusatkan data (yang akan menjadi pendekatan yang disukai) terlihat juga persis sama dengan yang saya temukan di Post oleh seseorang yang melakukan LDA di R
Kode untuk referensi
Saya tidak ingin menempelkan semua kode di sini, tetapi saya telah mengunggahnya sebagai notebook IPython di sini dipecah menjadi beberapa langkah yang saya gunakan (lihat di bawah) untuk proyeksi LDA.
- Langkah 1: Menghitung vektor rata-rata d-dimensi
Langkah 2: Menghitung Matriks Sebar
2.1 dalam kelas scatter matrix dihitung dengan persamaan berikut: S W = c Σ i = 1 S i = c Σ i = 1 n Σ x ∈ D i ( x - m i )
2.2 antara kelas scatter matrix dihitung dengan persamaan berikut: S B = c Σ i = 1 n i ( m i - m ) ( m i - m ) T di mana m adalah mean keseluruhan.
Langkah 3. Memecahkan masalah nilai eigen umum untuk matriks
3.1. Menyortir vektor eigen dengan menurunkan nilai eigen
3.2. Memilih k vektor eigen dengan nilai eigen terbesar. Menggabungkan dua vektor eigen dengan nilai eigen tertinggi untuk membangun kami berdimensi vektor eigen matriks W
Langkah 5: Mengubah sampel ke subruang baru