멀티 클래스 LDA 교육의 공선 변수


16

8 클래스 의 데이터 로 다중 클래스 LDA 분류기를 훈련하고 있습니다.

교육을 수행하는 동안 " 변수는 동일 선상에 있습니다 " 라는 경고가 표시됩니다.

90 % 이상의 훈련 정확도를 얻고 있습니다.

Python 에서 scikits-learn 라이브러리를 사용 하여 다중 클래스 데이터를 훈련시키고 테스트합니다.

나는 적절한 테스트 정확도도 얻 습니다 (약 85 % -95 % ).

오류 / 경고의 의미를 이해하지 못합니다. 도와주세요.

답변:


29

다중 공선 성은 예측 변수가 서로 관련되어 있음을 의미합니다. 왜 이것이 나쁜가요?

LDA는 회귀 기술과 같이 행렬 반전 계산을 포함하므로 행렬식이 0에 가까울 경우 정확하지 않습니다 ( 즉, 둘 이상의 변수가 서로 거의 선형 조합 임).

더 중요한 것은 추정 된 계수를 해석 할 수 없게 만드는 것입니다. 증가하는 경우 , 말하자면,에 감소와 연관되어 X 2 그들은 모두 증가 변수 Y 에 모든 변경 X 1 의 변화에 의해 보상됩니다 X 2 및 효과 과소 평가합니다 X 1Y를 . LDA에서는 분류에 대한 X 1 의 영향을 과소 평가합니다 .X1X2YX1X2X1와이엑스1

관심있는 모든 분류 자체 가 있고 데이터의 절반에 대해 모델을 학습하고 다른 절반에 대해 테스트 한 후 85-95 %의 정확도를 얻는다면 괜찮습니다.


테스트 정확도가 낮은 경우에 특징 벡터의 특징 X1이 적합하지 않은 것으로 해석 할 수 있습니까?
garak

1
테스트 정확도가 낮 으면 좋은 선택이 없다고 생각합니다.
gui11aume

흥미로운 점은 LDA 에서이 문제가 있지만 QDA를 사용할 때가 아닙니다. 나는 거기에 무엇이 다른지 궁금해?
garak

1
답은 +1이지만 "행렬 반전 계산"은 정확하지 않을 수 있습니다. 우리는 그것을 명시 적으로 컴퓨터 화하지 않으며, LU, QR 또는 반복적 인 방법과 같은 직접적인 방법이 사용됩니다.
Haitao Du

@ hxd1011 맞아요! 기록을 위해, 행렬이 "거의 단수"일 때 LU / QR 등에서 발생하는 일에 대해 몇 마디 말하거나 설명하는 문서를 가리킬 수 있습니까?
gui11aume

12

gui11aume이 당신에게 큰 대답을했다고 생각하는 것처럼, 나는 약간 다른 각도에서 예를 보여주고 싶습니다. 판별 함수의 공변량은 다음과 같습니다.

X1=5X2+3X3X4.

Suppose the best LDA has the following linear boundary:

X1+2X2+X32X4=5

Then we can substitute 5X2+3X3X4 for X1 n the LDA boundary equation, so:

5X2+3X3X4+2X2+X32X4=5

or

7X2+4X33X4=5.

These two boundaries are identical but the first one has coefficients 1,2,1,2 for X1, X2, X3, and X4 respectively, while the other has coefficients 0,7,3,1.

So the coefficient are quite different but the two equations give the same boundary and identical prediction rule. If one form is good the other is also. But now you can see why gui11ame says the coefficients are uninterpretable.

There are several other ways to express this boundary as well by substituting for X2 to give it the 0 coefficient and the same could be done for X3 or X4. But in practice the collinearity is approximate. This makes things worse because the noise allows for a unique answer. Very slight perturbations of the data will cause the coefficients to change drastically. But for prediction you are okay because each equation defines almost the same boundary and so LDA will result in nearly identical predictions.


1

While the answer that was marked here is correct, I think you were looking for a different explanation to find out what happened in your code. I had the exact same issue running through a model.

진행 상황은 다음과 같습니다. 데이터 세트의 일부로 예측 변수를 사용하여 모델을 학습합니다. 나도 모르게 일어난 일의 예는 다음과 같습니다.

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns[:-1]]

이 코드에서는 'COL3'의 값을 예측하고 싶지만 train_X를 보면 마지막 열을 제외한 모든 열을 검색하도록 지시하므로 COL4가 아닌 COL1 COL2 및 COL3을 입력합니다. train_X의 일부인 COL3을 예측하려고합니다.

열을 이동하고 Excel에서 COL3을 수동으로 데이터 세트의 마지막 열 (현재 COL4 대신)로 이동하여이를 수정했습니다.

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL4']
train_X = train[train.columns[:-1]]

Excel에서 이동하지 않고 코드로 이동하려면 다음을 수행하십시오.

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns['COL1','COL2','COL4']]

train_Y의 일부인 COL3을 제외한 모든 열을 포함하도록 train_X를 선언 한 방법에 주목하십시오.

도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.