Oi Faiçal! Tudo bom com você?
Primeiro, desculpe pela demora em te responder.
O método linkage
precisa de uma entrada em array bidimensional para que ele funcione corretamente. Isso se deve graças a forma como o cluster hierárquico funciona, pois o cálculo é baseado no mínimo de duas distâncias entre cada ponto a partir da matriz de distância. Um array bidimensional é um array formado por um conjunto de linhas e colunas, o que é diferente de um array unidimensional que é formado apenas por uma linha. Imagine uma base de dados definida por:
index | Valor |
---|
0= | [9] |
1= | [28] |
2= | [13] |
3= | [18] |
4= | [6] |
5= | [24] |
A matriz de distância é a base do cálculo do cluster e é calculada pela distância Euclidiana da base de vetores. Essa distância é calculada seguindo a fórmula abaixo:
Distancia Euclidiana = sqrt( (x2 -x1)**2 + (y2-y1)**2 )
Onde x representa o primeiro e y o segundo elemento elemento da linha da matriz . Se existissem mais elementos nas linhas da matriz eles devem ser adicionados na equação.
Uma matriz de distância é caracterizada por ser simétrica e sua diagonal principal formada por zeros assim como mostrado abaixo
Cada um desses espaços vazios é preenchido pelo resultado da distância euclidiana. Por exemplo, o ponto (2,2) da matriz de distância pode ser calculado utilizando a equação a distância euclidiana:
Distancia Euclidiana (2,2) = sqrt( (9 -28)**2 )
Distancia Euclidiana (2,2) = 19
Note que, por não existir mais elementos na lista, a segunda parte da equação da distância euclidiana é desconsiderada (y2-y1)**2 = 0
. Seguindo a mesma lógica teremos uma matriz de distância dada por
| 1 | 2 | 3 | 4 | 5 |
---|
1 | 0 | | | | |
2 | 19 | 0 | | | |
3 | 4 | 15 | 0 | | |
4 | 9 | 10 | 5 | 0 | |
5 | 3 | 22 | 7 | 12 | 0 |
Note que, para construir a matriz de distância, foi necessário que existisse uma matriz, afinal a lógica da equação de distância euclidiana deve ser seguida e o método linkage
utiliza a mesma lógica de cálculo.
No caso do seu código inicial, você utilizou um array unidimensional como parâmetro ao método linkage
, porém esse tipo de array não é um padrão suportado desse método já que não segue a lógica do cálculo de cluster hierárquico explicado acima. Quando você utilizou Z = linkage(np.reshape(Y, (len(Y), 1)))
, você alterou o array para se tornar uma array bidimensional em que cada elemento representou uma linha desse array, o que permitiu que o método conseguisse seguir a lógica correta.
Eu espero ter te ajudado! Se surgir outra dúvida estarei disposta a ajudar ;-)
Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!