요약 : LDA 전에 PCA를 수행하여 문제를 정규화하고 과적 합을 피할 수 있습니다.
LDA 투영은 고유 분해를 통해 계산됩니다 . 여기서 및 는 클래스 간 공분산 행렬입니다. 개 미만의 데이터 포인트가있는 경우 (여기서 은 공간의 차원, 즉 피처 / 변수 수) 는 단수이므로 반전 할 수 없습니다. 이 경우 LDA를 직접 수행 할 수있는 방법은 없지만 PCA를 먼저 적용하면 작동합니다. @Aaron은 그의 답변에 대한 의견에이 말을했으며, 이에 동의합니다 (그러나 지금 보시는 바와 같이 일반적으로 그의 답변에 동의하지 않습니다).Σ−1WΣBΣWΣBNNΣW
그러나 이것은 문제의 일부일뿐입니다. 더 큰 그림은 LDA가 데이터를 지나치게 쉽게 맞추는 경향이 있다는 것입니다. 클래스 내 공분산 행렬 은 LDA 계산에서 반전 됩니다. 고차원 행렬의 경우 반전은 이 실제로 좋은 경우에만 안정적으로 수행 할 수있는 매우 민감한 연산입니다 . 그러나 높은 차원의 에서는 의 정확한 추정값을 얻는 것이 실제로 어렵고 , 실제로 는 추정값이 양호하기를 기대하기 위해 종종 데이터 포인트 보다 훨씬 많은 데이터 포인트가 있어야합니다. 그렇지 않으면ΣWN≫1ΣWNΣW 거의 특이 할 것입니다 (즉, 일부 고유 값은 매우 낮을 것임). 이는 과적 합, 즉 시험 데이터에서 우연한 성능으로 훈련 데이터에서 클래스가 거의 완벽하게 분리 될 수 있습니다.
이 문제를 해결하려면 문제를 정규화 해야합니다 . 이를 수행하는 한 가지 방법은 PCA를 사용하여 차원을 먼저 줄이는 것입니다. 또 다른 더 좋은 방법이 있습니다. 예를 들어 정규화 된 LDA (rLDA) 방법은 단순히 을 대신 작은 와 함께 사용합니다 ( 수축량 추정기 라고 함) ), 그러나 PCA를 먼저하는 것이 개념적으로 가장 간단한 방법이며 종종 잘 작동합니다.(1−λ)ΣW+λIλΣW
삽화
다음은 과적 합 문제를 보여줍니다. 10, 50, 100 및 150 차원 공간에서 표준 가우스 분포 (평균 0, 단위 분산)에서 3 클래스로 클래스 당 60 샘플을 생성하고 2D로 데이터를 투영하기 위해 LDA를 적용했습니다.
차원이 커짐에 따라 클래스가 더 나아지고 더 잘 분리되는 반면, 실제로 는 클래스간에 차이 가 없습니다 .
클래스를 약간 분리하면 PCA가 과적 합을 방지하는 방법을 알 수 있습니다. 첫 번째 클래스의 첫 번째 좌표에 1을, 두 번째 클래스의 첫 번째 좌표에 2를, 세 번째 클래스의 첫 번째 좌표에 3을 추가했습니다. 이제 그들은 약간 분리되어 있습니다. 왼쪽 상단 서브 플롯을 참조하십시오.
과적 합 (맨 위 줄)은 여전히 분명합니다. 그러나 PCA로 데이터를 사전 처리하고 항상 10 차원 (맨 아래 행)을 유지하면 과적 합이 사라지고 클래스는 거의 최적으로 분리됩니다.
추신. 오해를 피하기 위해 : 나는 PCA + LDA가 좋은 정규화 전략이라고 주장하지는 않지만 (rLDA를 사용하는 것이 좋습니다), 나는 그것이 가능한 전략 이라는 것을 간단히 보여주고 있습니다 .
최신 정보. @cbeleites가 제공하는 흥미롭고 포괄적 인 답변을 통해 다음 스레드에서 매우 비슷한 주제가 논의되었습니다.
좋은 답변이있는이 질문을 참조하십시오.
best practice
. 차원 축소 기술로서 PCA와 LDA는 매우 다릅니다. 때때로 사람들은 LDA 이전의 PCA를 수행하지만 폐기 된 PC와 함께 중요한 차별적 차원을 버릴 위험이 있습니다. 귀하가 묻는 질문은 실제로이 사이트에서 여러 형태로 요청되었습니다. 사람들이 말한 내용을 읽으려면 "PCA LDA"를 검색하십시오.