Logit 에서 Singular matrix 오류

이경주 Junior data analyst·2024년 5월 24일
0

Python

목록 보기
6/8

0. 개요

  • statsmodel에서 지원하는 MNlogit 혹은 logit 적용할 때 발생하는 오류인 singular matrix에 대해 왜 오류가 발생하며, 해결 방법에 대해 작성하려한다.
LinAlgError: Singular matrix

y=Xβ+ϵy = X\beta+\epsilon
β^ = (XTX)1XTy\hat{\beta}\ =\ (X^TX)^{-1}X^Ty

회귀분석에서 계수를 구할 때, 위와 같은 방법으로 β\beta를 추정할 수 있다.

보통 Singular matrix 오류는 이 과정에서 발생한다. 케이스를 나누어 좀 더 자세히 설명하면,

  1. 다중공선성
  2. 결측값 혹은 inf 값이 있는 경우
  3. 어떤 특정한 변수가 전부 한 값으로 이뤄진 경우
  4. **역행렬을 구할 수 없는 경우

웬만한 경우는 전부 역행렬을 구할 수 없는 경우에 위와 같은 오류가 발생한다.

1. 다중공선성 문제

다중공선성 구하기

  • 해결방법 : 위 글을 이용해서 다중공선성 문제가 있는 행렬을 찾아낸 뒤, 행렬을 지우거나 혹은 PCA를 통해 차원을 낮추는 과정을 거친 뒤 진행하면 된다.

2. NA값(결측치)

결측치를 제거하거나 이상치를 제거하는 방법은 너무나도 많기에 해당 게시글에선 스킵한다.

3,4. 역행렬을 구할 수 없는 경우

2번과 3번의 경우를 묶은 이유는 2번의 의미가 3번의 의미를 함축시키고 있기 때문이다.

  • 해결방법 : 위와 같은 경우는 변수들의 히스토그램 plot을 통해 찾아낼 수 있다.
data = {
	'var1' : [1,1,1,1,1],
    'var2' : np.arange(0, 10, 2),
    'var3' : np.random.rand(5),
    'y' : ...}
import matplotlib.pyplot as plt

for col in data.columns:
	plt.figure()
    data[col].hist(bins = 30) #bins 는 막대가 이루고 있는 크기
    plt.title(column)
    fig.show()

plot을 통해 한 값으로만 이뤄진 그래프가 보인다면, 이 녀석을 제거하거나 후처리를 통해 값을 변경하고 진행하면 된다.

profile
Good afternoon, Good evening and Good night

0개의 댓글