나는 파이썬에서 클러스터링을하고있다. from scipy.cluster.hierarchy import linkage
매뉴얼에서 나는이 형식의 결과를 얻는다는 것을 안다. [A, B, 길이, #] A와 B는 앞으로 올 요소의 인덱스이다. 이 단계 (?)에서 병합 할 수 있지만 이미 병합되었지만이 단계에 참여하지 않는 클러스터에 대한 정보는 얻을 수 있습니까? 예를 들어단일 연결 알고리즘을 사용할 때 현재 클러스터를 모두 나열하려면 어떻게합니까?
내 데이터 세트는
A=[[1,1],[1,2],[1,3],[1,4],[1,5], [10,1],[10,2],[10,3],[10,4],[10,5], [15,1],[15,2],[15,3],[15,4],[15,5], [30,1],[30,2],[30,3],[30,4],[30,5]]
내가 클러스터링의 거리 제한으로 5를 선택 그것을 여기
Z = linkage(A, 'single')
Z=[[ 0. 4. 1. 2.]
[ 1. 20. 1. 3.]
[ 2. 21. 1. 4.]
[ 3. 22. 1. 5.]
[ 17. 19. 1. 2.]
[ 5. 9. 1. 2.]
[ 6. 25. 1. 3.]
[ 7. 26. 1. 4.]
[ 8. 27. 1. 5.]
[ 18. 24. 1. 3.]
[ 10. 14. 1. 2.]
[ 11. 30. 1. 3.]
[ 12. 31. 1. 4.]
[ 13. 32. 1. 5.]
[ 16. 29. 1. 4.]
[ 15. 34. 1. 5.]
[ 28. 33. 5. 10.]
[ 23. 36. 9. 15.]
[ 35. 37. 15. 20.]]
에 하나의 연결 알고리즘을 적용, 그래서 나는
를 얻을 수[ 28. 33. 5. 10.]
다음 I 원래 인덱스
cut = 5
temp1 = []
temp2 = []
for i in range(len(Z)):
if Z[i][2] >= cut:
temp1.append(Z[i])
for i in range(2):
temp2[i].append(int(temp1[0][i]))
for j in range(0, len(temp2)):
try:
g = max(temp2[j])
except:
continue
G = int(g - len(A))
while g >= len(A):
ind = temp2[j].index(g)
temp2[j].append(int(Z[G][0]))
temp2[j].append(int(Z[G][1]))
del temp2[j][ind]
g = max(temp2[j])
G = int(g - len(A))
다시 28 및도 33를 추적하고
temp2 = [[8, 7, 6, 5, 9], [13, 12, 11, 10, 14]]
가 '28'는 점 [10,1],[10,2],[10,3],[10,4],[10,5]
약자 및 '33'이 명확 수단 점 [15,1],[15,2],[15,3],[15,4],[15,5]
을 나타내며되는 것으로 클러스터는 [10, x]로 구성되고 [15, x]로 구성된 클러스터는이 단계에서 병합 할 것입니다.
그러나 분명히 [1,1],[1,2],[1,3],[1,4],[1,5]
및 [30,1],[30,2],[30,3],[30,4],[30,5]
순간에 그렇게하기 전에, 초기 단계에있는 다른 두 개의 클러스터를 형성해야합니다 [10, X] 및 [15, X] 현재 4 개 클러스터
그래서 결과가 병합 원하는 것은 다음과 같습니다.
temp2 = [[8, 7, 6, 5, 9], [13, 12, 11, 10, 14], [0, 1, 2, 3, 4], [15, 16, 17, 18, 19]]
나중에 두 개의 클러스터 T^T를 얻으려면 어떻게해야합니까? 고급 QQ the documentation 한 바와 같이
고맙습니다. !!!!!! 그게 바로 내가 T^T를 찾고있는 이유입니다. BTW, 제가 궁금한 것이 아니라 마지막 결과물에있는 L은 무엇입니까? 나는 내 결과에서 그 L을 얻지 못했습니다. (그리고 그것은 좋은 것입니다) – Chu
@ Xiadan : "긴 정수"를 나타냅니다. 그것은 numpy 배열을리스트로 변환 할 때 거기에 던져지는 약간의 쓰레기입니다. Python 3을 사용하는 경우에는 표시되지 않으며 64 비트 또는 32 비트와 같은 다른 플랫폼 세부 정보에 따라 표시되지 않을 수도 있습니다. 발견 한대로, 결과에 아무런 영향을 미치지 않습니다. 그냥 이상하게 보입니다. – BrenBarn
또한 np.where 부분에 감사드립니다. T^T 나는 인덱스를 다시 그 목록으로 변환하는 더 영리한 방법이 있어야한다는 것을 알고있었습니다. – Chu