답변:
다중 공선 성은 예측 변수가 서로 관련되어 있음을 의미합니다. 왜 이것이 나쁜가요?
LDA는 회귀 기술과 같이 행렬 반전 계산을 포함하므로 행렬식이 0에 가까울 경우 정확하지 않습니다 ( 즉, 둘 이상의 변수가 서로 거의 선형 조합 임).
더 중요한 것은 추정 된 계수를 해석 할 수 없게 만드는 것입니다. 증가하는 경우 , 말하자면,에 감소와 연관되어 X 2 그들은 모두 증가 변수 Y 에 모든 변경 X 1 의 변화에 의해 보상됩니다 X 2 및 효과 과소 평가합니다 X 1 에 Y를 . LDA에서는 분류에 대한 X 1 의 영향을 과소 평가합니다 .
관심있는 모든 분류 자체 가 있고 데이터의 절반에 대해 모델을 학습하고 다른 절반에 대해 테스트 한 후 85-95 %의 정확도를 얻는다면 괜찮습니다.
gui11aume이 당신에게 큰 대답을했다고 생각하는 것처럼, 나는 약간 다른 각도에서 예를 보여주고 싶습니다. 판별 함수의 공변량은 다음과 같습니다.
.
Suppose the best LDA has the following linear boundary:
Then we can substitute for n the LDA boundary equation, so:
or
.
These two boundaries are identical but the first one has coefficients for , , , and respectively, while the other has coefficients .
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 to give it the coefficient and the same could be done for or . 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.
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를 선언 한 방법에 주목하십시오.
도움이 되길 바랍니다.