더북(TheBook)

LDA에서 선형 판별 벡터는 최대 c - 1개입니다. c는 클래스 레이블의 개수입니다. 클래스 내 산포 행렬 SB가 랭크(rank) 1 또는 그 이하인 c개의 행렬을 합한 것이기 때문입니다.12 0이 아닌 고윳값이 두 개만 있는 것을 볼 수 있습니다(고윳값 3에서 13번째는 넘파이 부동 소수 연산의 정확도 때문에 완전히 0으로 출력되지 않았습니다).

Note ≡ 공선성


드물게 완벽하게 공선성을 가지는 경우(모든 샘플이 동일 선상에 위치한 경우) 공분산 행렬의 랭크는 1입니다. 이때는 0이 아닌 고윳값을 가진 고유 벡터가 하나만 만들어집니다.

선형 판별 벡터(고유 벡터)로 잡은 클래스 판별 정보가 얼마나 많은지 측정하기 위해 PCA 절에서 만든 설명된 분산 그래프와 비슷하게 고윳값의 내림차순으로 선형 판별 벡터를 그려 보겠습니다.

>>> tot = sum(eigen_vals.real)
>>> discr = [(i / tot) for i in sorted(eigen_vals.real, reverse=True)]
>>> cum_discr = np.cumsum(discr)
>>> plt.bar(range(1, 14), discr, alpha=0.5, align='center',
...         label='Individual "discriminability"')
>>> plt.step(range(1, 14), cum_discr, where='mid',
...         label='Cumulative "discriminability"')
>>> plt.ylabel('"Discriminability" ratio')
>>> plt.xlabel('Linear discriminants')
>>> plt.ylim([-0.1, 1.1])
>>> plt.legend(loc='best')
>>> plt.tight_layout()
>>> plt.show()

 

 


12 역주 클래스별 평균 벡터인 mean_vec을 (13, 1) 크기의 열 벡터로 만든 후 외적을 하여 (13, 13) 행렬을 만들었습니다. 이 행렬은 행과 열이 같은 배수로 증가하기 때문에 최대 랭크가 1입니다. 마지막 클래스의 평균 벡터는 다른 클래스의 평균 벡터에 종속적이므로 전체 산포 행렬 SB의 랭크는 c-1이 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.