ฉันใช้การวิเคราะห์เชิงเส้นตรง (LDA) จากไลบรารี่การscikit-learn
เรียนรู้ของเครื่องจักร (Python) สำหรับการลดมิติข้อมูลและอยากรู้เกี่ยวกับผลลัพธ์เล็กน้อย ฉันสงสัยว่าตอนนี้สิ่งที่ LDA scikit-learn
กำลังทำอยู่เพื่อให้ผลลัพธ์ดูแตกต่างจากเช่นวิธีการด้วยตนเองหรือ LDA ที่ทำใน R มันจะดีถ้ามีใครให้ข้อมูลเชิงลึกที่นี่
สิ่งที่สำคัญที่สุดคือการscikit-plot
แสดงให้เห็นถึงความสัมพันธ์ระหว่างตัวแปรสองตัวที่ควรมีความสัมพันธ์ 0
สำหรับการทดสอบฉันใช้ชุดข้อมูลของ Iris และตัวจำแนกเชิงเส้น 2 ตัวแรกมีลักษณะดังนี้:
IMG-1 LDA ผ่าน scikit เรียนรู้
สิ่งนี้สอดคล้องกับผลลัพธ์ที่พบในเอกสาร scikit-Learn ที่นี่
ตอนนี้ฉันผ่าน LDA ทีละขั้นตอนและได้ประมาณการที่แตกต่างกัน ฉันลองวิธีที่แตกต่างกันเพื่อค้นหาว่าเกิดอะไรขึ้น:
IMG-2 LDA บนข้อมูลดิบ (ไม่มีการจัดกึ่งกลางไม่มีมาตรฐาน)
และนี่คือแนวทางทีละขั้นตอนถ้าฉันสร้างมาตรฐาน (การทำให้เป็นมาตรฐาน z-score; ความแปรปรวนของหน่วย) ข้อมูลก่อน ฉันทำสิ่งเดียวกันโดยมีค่าเฉลี่ยอยู่กึ่งกลางเท่านั้นซึ่งควรนำไปสู่ภาพการฉายภาพแบบเดียวกัน (และสิ่งที่มันทำ)
IMG-3 LDA ทีละขั้นตอนหลังจากการกำหนดค่าเฉลี่ยกึ่งกลางหรือกำหนดมาตรฐาน
IMG-4 LDA ใน R (การตั้งค่าเริ่มต้น)
LDA ใน IMG-3 ที่ฉันจัดกึ่งกลางข้อมูล (ซึ่งจะเป็นวิธีที่ต้องการ) ก็ดูเหมือนกันกับที่ฉันพบในโพสต์โดยคนที่ทำ LDA ใน R
รหัสสำหรับการอ้างอิง
ฉันไม่ต้องการวางรหัสทั้งหมดที่นี่ แต่ฉันได้อัปโหลดเป็นสมุดบันทึก IPythonที่นี่แบ่งออกเป็นหลายขั้นตอนที่ฉันใช้ (ดูด้านล่าง) สำหรับการฉาย LDA
- ขั้นตอนที่ 1: การคำนวณ d มิติเวกเตอร์เฉลี่ย
ขั้นตอนที่ 2: การคำนวณเมทริกซ์การกระจาย
2.1 เมทริกซ์กระจายภายในคลาสถูกคำนวณโดยสมการต่อไปนี้:S W = c ∑ i = 1 S i = c ∑ i = 1 n ∑ x ∈ D ฉัน ( x - m i )
2.2 เมทริกซ์กระจายระหว่างคลาสคำนวณโดยสมการต่อไปนี้: โดยที่คือค่าเฉลี่ยโดยรวม
ขั้นตอนที่ 3 การแก้ปัญหาค่าลักษณะเฉพาะทั่วไปสำหรับเมทริกซ์
3.1 การเรียงลำดับไอเก็นผู้ชำนาญการโดยการลดค่าลักษณะเฉพาะ
3.2 การเลือกeigenvector kกับค่าลักษณะเฉพาะที่ใหญ่ที่สุด การรวมสองไอคิวนิวเดอเรเตอร์เข้ากับค่าไอควิชันสูงสุดเพื่อสร้างมิติไอเกนวีคมิติเมทริกซ์
ขั้นตอนที่ 5: การแปลงตัวอย่างลงในพื้นที่ย่อยใหม่