scikit-learn
차원 축소를 위해 기계 학습 라이브러리 (Python) 의 선형 판별 분석 (LDA)을 사용 하고 있었으며 결과에 대해 약간 궁금했습니다. LDA가 무엇을하고 있는지 궁금해서 scikit-learn
결과가 예를 들어 수동 접근이나 R에서 수행 된 LDA와 다르게 보일 수 있습니다.
기본적으로 가장 중요한 scikit-plot
것은 상관 관계가 있어야하는 두 변수 간의 상관 관계를 보여줍니다.
테스트를 위해 Iris 데이터 세트를 사용했으며 처음 2 개의 선형 판별 변수는 다음과 같습니다.
IMG-1. Scikit-learn을 통한 LDA
이것은 기본적으로 여기 scikit-learn 설명서 에서 찾은 결과와 일치 합니다.
이제 LDA를 단계별로 살펴보고 다른 예상을 얻었습니다. 나는 무슨 일이 일어나고 있는지 알아 내기 위해 다른 접근법을 시도했다.
IMG-2. 원시 데이터에 대한 LDA (센터링 없음, 표준화 없음)
그리고 데이터를 먼저 표준화 (z- 스코어 정규화; 단위 분산)하면 단계별 접근 방식이 있습니다. 나는 평균 중심 화로 만 똑같은 일을했는데, 이는 동일한 상대 투영 이미지로 이어져야합니다 (그리고 실제로 그랬습니다).
IMG-3. 평균 센터링 또는 표준화 후 단계별 LDA
IMG-4. R의 LDA (기본 설정)
데이터를 중심으로 한 IMG-3의 LDA (선호하는 접근법)는 R에서 LDA를 한 사람 이 Post 에서 찾은 것과 정확히 동일하게 보입니다.
참조 코드
여기에 모든 코드를 붙여넣고 싶지는 않지만 LDA 프로젝션에 사용한 여러 단계 (아래 참조)로 나누어 진 IPython 노트북 으로 업로드했습니다 .
2 단계 : 분산 행렬 계산
3 단계. 행렬 대한 일반 고유 값 문제 해결
3.1. 고유 값을 줄임으로써 고유 벡터 정렬