PCA와 LDA를 결합하는 것이 합리적입니까?


25

예를 들어 Bayes 분류기를 통해 감독 된 통계 분류 작업에 대한 데이터 집합이 있다고 가정합니다. 이 데이터 세트는 20 개의 피쳐로 구성되며 PCA (Principal Component Analysis) 및 / 또는 LDA (Linear Discriminant Analysis)와 같은 차원 축소 기법을 통해 2 가지 피쳐로 요약하려고합니다.

두 기술 모두 데이터를 더 작은 피쳐 하위 공간에 투영하고 있습니다 .PCA를 사용하면 (클래스 레이블을 고려하지 않고) 데이터 세트의 편차를 최대화하는 방향 (구성 요소)을 찾을 수 있으며 LDA를 사용하면 사이를 최대화하는 구성 요소가 있습니다 동급 분리.

이제 이러한 기술을 결합 할 수 있는지, 어떻게, 왜 필요한지 궁금합니다.

예를 들면 다음과 같습니다.

  1. PCA를 통해 데이터 세트를 변환하여 새로운 2D 서브 스페이스에 투영
  2. 최대 LDA를 통해 (이미 PCA 변환 된) 데이터 세트 변환 동급 분리

또는

  1. PCA 단계를 건너 뛰고 LDA에서 상위 2 개 구성 요소 사용.

또는 의미가있는 다른 조합.


2
보편적 일 수는 없습니다 best practice. 차원 축소 기술로서 PCA와 LDA는 매우 다릅니다. 때때로 사람들은 LDA 이전의 PCA를 수행하지만 폐기 된 PC와 함께 중요한 차별적 차원을 버릴 위험이 있습니다. 귀하가 묻는 질문은 실제로이 사이트에서 여러 형태로 요청되었습니다. 사람들이 말한 내용을 읽으려면 "PCA LDA"를 검색하십시오.
ttnphns

@SebastianRaschka : 여기에 내 대답이 유용한 지 궁금하거나이 문제에 대해 더 궁금한 점이 있습니까?
amoeba는

@amoeba 죄송합니다. 지금까지 답변을 보지 못했습니다. 어쨌든 균열을 통해 미끄러 져 왔을 것입니다. 감사합니다!

답변:


44

요약 : LDA 전에 PCA를 수행하여 문제를 정규화하고 과적 합을 피할 수 있습니다.

LDA 투영은 고유 분해를 통해 계산됩니다 . 여기서 및 는 클래스 간 공분산 행렬입니다. 개 미만의 데이터 포인트가있는 경우 (여기서 은 공간의 차원, 즉 피처 / 변수 수) 는 단수이므로 반전 할 수 없습니다. 이 경우 LDA를 직접 수행 할 수있는 방법은 없지만 PCA를 먼저 적용하면 작동합니다. @Aaron은 그의 답변에 대한 의견에이 말을했으며, 이에 동의합니다 (그러나 지금 보시는 바와 같이 일반적으로 그의 답변에 동의하지 않습니다).ΣW1ΣBΣWΣBNNΣW

그러나 이것은 문제의 일부일뿐입니다. 더 큰 그림은 LDA가 데이터를 지나치게 쉽게 맞추는 경향이 있다는 것입니다. 클래스 내 공분산 행렬 LDA 계산에서 반전 됩니다. 고차원 행렬의 경우 반전은 이 실제로 좋은 경우에만 안정적으로 수행 할 수있는 매우 민감한 연산입니다 . 그러나 높은 차원의 에서는 의 정확한 추정값을 얻는 것이 실제로 어렵고 , 실제로 는 추정값이 양호하기를 기대하기 위해 종종 데이터 포인트 보다 훨씬 많은 데이터 포인트가 있어야합니다. 그렇지 않으면ΣWN1ΣWNΣW 거의 특이 할 것입니다 (즉, 일부 고유 값은 매우 낮을 것임). 이는 과적 합, 즉 시험 데이터에서 우연한 성능으로 훈련 데이터에서 클래스가 거의 완벽하게 분리 될 수 있습니다.

이 문제를 해결하려면 문제를 정규화 해야합니다 . 이를 수행하는 한 가지 방법은 PCA를 사용하여 차원을 먼저 줄이는 것입니다. 또 다른 더 좋은 방법이 있습니다. 예를 들어 정규화 된 LDA (rLDA) 방법은 단순히 을 대신 작은 와 함께 사용합니다 ( 수축량 추정기 라고 함) ), 그러나 PCA를 먼저하는 것이 개념적으로 가장 간단한 방법이며 종종 잘 작동합니다.(1λ)ΣW+λIλΣW

삽화

다음은 과적 합 문제를 보여줍니다. 10, 50, 100 및 150 차원 공간에서 표준 가우스 분포 (평균 0, 단위 분산)에서 3 클래스로 클래스 당 60 샘플을 생성하고 2D로 데이터를 투영하기 위해 LDA를 적용했습니다.

LDA에 과적 합

차원이 커짐에 따라 클래스가 더 나아지고 더 잘 분리되는 반면, 실제로 는 클래스간에 차이없습니다 .

클래스를 약간 분리하면 PCA가 과적 합을 방지하는 방법을 알 수 있습니다. 첫 번째 클래스의 첫 번째 좌표에 1을, 두 번째 클래스의 첫 번째 좌표에 2를, 세 번째 클래스의 첫 번째 좌표에 3을 추가했습니다. 이제 그들은 약간 분리되어 있습니다. 왼쪽 상단 서브 플롯을 참조하십시오.

LDA 과잉 적합 및 PCA를 통한 정규화

과적 합 (맨 위 줄)은 여전히 ​​분명합니다. 그러나 PCA로 데이터를 사전 처리하고 항상 10 차원 (맨 아래 행)을 유지하면 과적 합이 사라지고 클래스는 거의 최적으로 분리됩니다.

추신. 오해를 피하기 위해 : 나는 PCA + LDA가 좋은 정규화 전략이라고 주장하지는 않지만 (rLDA를 사용하는 것이 좋습니다), 나는 그것이 가능한 전략 이라는 것을 간단히 보여주고 있습니다 .


최신 정보. @cbeleites가 제공하는 흥미롭고 포괄적 인 답변을 통해 다음 스레드에서 매우 비슷한 주제가 논의되었습니다.

좋은 답변이있는이 질문을 참조하십시오.


정말 좋은 답변입니다! 그리고 근본 이론을 설명하는 동안 당신은 거기에 좋은 실용적인 설명을 가지고 있습니다. 고마워요!

두 번째 줄거리를 이해하지 못합니다. LDA 이전에 수업이 PCA와 분리되지 않은 것 같습니다 (하단)
PierreE

@PierreE, 두 번째 플롯에서 클래스가 거의 분리되지 않도록 생성됩니다. 분리가 작습니다. 맨 아래 줄에서이 약간의 분리를 볼 수 있지만 자세히 살펴 봐야합니다. 파란색과 빨간색 클래스에 초점을 맞추면 하나는 왼쪽으로 이동하고 다른 하나는 오른쪽으로 이동합니다.
amoeba는 Reinstate Monica

알 겠어. 맨 윗줄에서 보는 클래스의 분리가 실제로 너무 적합하다는 것을 잊었습니다. 감사합니다
PierreE

1

두 클래스 문제가있는 경우 LDA는 1 차원으로 안내합니다. PCA를 먼저 수행 할 이유가 없습니다.


1
흠, 나는 당신의 추론을 따르지 않습니다 : 나는 당신이 선택하지 않으면 LDA가 당신을 1 차원으로 낮추지 않을 것이라고 확신합니다. 값을 줄여 고유 값을 정렬 한 후 보유 할 고유 벡터 수에 따라 다릅니다. 어쩌면 나는 여기에 뭔가 빠져있을 것입니다 ...하지만 수업 수는 언급하지 않았습니다. 각각 20 개의 피처를 가진 3 개의 클래스가 있다고 가정하고 3D 서브 스페이스에 투영하고 싶습니다.

1
PCA를 먼저 수행하는 유일한 이유는 클래스 내 공분산 행렬이 특이한 것입니다. 20 개의 기능과 3 개의 클래스가 있다면 단수형이 아니므로 먼저 PCA를 수행하지 마십시오.
Aaron

4
assume we have 3 classes. @SebastianRaschka : 그러면 LDA는 최대 2 개의 판별 기능을 허용합니다. LDA 의 고유 값 수 는 min (num_groups-1, num_features)입니다.
ttnphns

@Sebastian LDA에서 선택하는 판별 기능의 수는 수행하려는 작업에 따라 다릅니다. 공간 변환으로서 "감독 된"PCA와 거의 같으며 원하는만큼 선택합니다. 초평면 분리 분류법 으로서 , 초평면은 정의상 N-1 치수이다. 나는 아직도 어디에서 min(num_groups-1,num_features)오는지 이해하지 못하기 때문에 그 주제에 대한 추가 정보를 물어볼 수있다 .
Matthieu

1
@ Matthieu 클래스 간 산란 행렬 때문에 랭크 1 이하의 c (c = 클래스 수) 행렬을 추가하여 생성합니다. 따라서 최대 0에서 c-1이 아닌 고유 값 만 가질 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.