Eu estava usando a Análise Discriminante Linear (LDA) da scikit-learn
biblioteca de aprendizado de máquina (Python) para redução de dimensionalidade e fiquei um pouco curioso sobre os resultados. Gostaria de saber agora o que o LDA scikit-learn
está fazendo para que os resultados pareçam diferentes, por exemplo, de uma abordagem manual ou de um LDA feito em R. Seria ótimo se alguém pudesse me dar algumas idéias aqui.
O que é mais preocupante é que scikit-plot
mostra uma correlação entre as duas variáveis em que deve haver uma correlação 0.
Para um teste, usei o conjunto de dados Iris e os dois primeiros discriminantes lineares ficaram assim:
IMG-1. LDA via scikit-learn
Isso é basicamente consistente com os resultados que encontrei na documentação do scikit-learn aqui.
Agora, passei pelo LDA passo a passo e recebi uma projeção diferente. Tentei abordagens diferentes para descobrir o que estava acontecendo:
IMG-2. LDA em dados brutos (sem centralização, sem padronização)
E aqui estaria a abordagem passo a passo se eu padronizasse (normalização do escore z; variação da unidade) primeiro os dados. Fiz a mesma coisa apenas com a centralização da média, o que deve levar à mesma imagem de projeção relativa (e com efeito).
IMG-3 LDA passo a passo após centralização média ou padronização
IMG-4. LDA em R (configurações padrão)
O LDA no IMG-3, onde eu centralizei os dados (qual seria a abordagem preferida) também parece exatamente o mesmo que encontrei em um Post por alguém que fez o LDA no R
Código de referência
Eu não queria colar todo o código aqui, mas o enviei como um bloco de notas IPython aqui, dividido nas várias etapas que usei (veja abaixo) para a projeção do LDA.
- Etapa 1: Computando os vetores médios d-dimensionais
Etapa 2: Computando as matrizes de dispersão
2.1 A matriz de dispersão dentro da classe é calculada pela seguinte equação:S W = c Σ i = 1 S i = c Σ
2.2 A matriz de dispersão entre classes é calculada pela seguinte equação: onde é a média geral.S B = c ∑ i = 1 n i ( m i - m ) ( m i - m ) T m
Etapa 3. Resolvendo o problema generalizado de autovalor para a matriz
3.1 Classificando os vetores próprios, diminuindo os valores próprios
3.2 Escolhendo k vetores próprios com os maiores valores próprios. Combinando os dois vetores próprios com os valores próprios mais altos para construir nossa matriz de vetores próprios dimensionalW
Etapa 5: Transformando as amostras no novo subespaço