silhouette coefficient과 같은 발견 된 솔루션 (클러스터링)에 대한 색인을 계산합니다 (이 계수를 사용하면 포인트/관찰이 클러스터링에 의해 할당 된 클러스터에 얼마나 잘 맞는지 품질에 대한 피드백을 얻을 수 있습니다). 다른 색인은 클러스터링을 한정하기 위해 다른 기준을 사용합니다.뭔가 import numpy as np
import scipy.cluster.hierarchy as hac
import matplotlib.pyplot as plt
a = np.array([[0.1, 2.5],
[1.5, .4 ],
[0.3, 1 ],
[1 , .8 ],
[0.5, 0 ],
[0 , 0.5],
[0.5, 0.5],
[2.7, 2 ],
[2.2, 3.1],
[3 , 2 ],
[3.2, 1.3]])
fig, axes23 = plt.subplots(2, 3)
for method, axes in zip(['single', 'complete'], axes23):
z = hac.linkage(a, method=method)
# Plotting
axes[0].plot(range(1, len(z)+1), z[::-1, 2])
knee = np.diff(z[::-1, 2], 2)
axes[0].plot(range(2, len(z)), knee)
num_clust1 = knee.argmax() + 2
knee[knee.argmax()] = 0
num_clust2 = knee.argmax() + 2
axes[0].text(num_clust1, z[::-1, 2][num_clust1-1], 'possible\n<- knee point')
part1 = hac.fcluster(z, num_clust1, 'maxclust')
part2 = hac.fcluster(z, num_clust2, 'maxclust')
clr = ['#2200CC' ,'#D9007E' ,'#FF6600' ,'#FFCC00' ,'#ACE600' ,'#0099CC' ,
'#8900CC' ,'#FF0000' ,'#FF9900' ,'#FFFF00' ,'#00CC01' ,'#0055CC']
for part, ax in zip([part1, part2], axes[1:]):
for cluster in set(part):
ax.scatter(a[part == cluster, 0], a[part == cluster, 1],
color=clr[cluster])
m = '\n(method: {})'.format(method)
plt.setp(axes[0], title='Screeplot{}'.format(m), xlabel='partition',
ylabel='{}\ncluster distance'.format(m))
plt.setp(axes[1], title='{} Clusters'.format(num_clust1))
plt.setp(axes[2], title='{} Clusters'.format(num_clust2))
plt.tight_layout()
plt.show()
여기
당신이 np.diff가 무릎 지점을 찾는 데 사용되는 방법을 설명 할 수 준다? 왜 그것을 2 학년 때 사용합니까? 그리고이 점의 수학적 해석은 무엇입니까? – user1603472
@ user1603472 가로 좌표의 모든 숫자는 파티션 수에 따라 가능한 한 가지 솔루션입니다. 이제 분명히 허용 할 파티션이 많을수록 클러스터 내의 동질성이 높아집니다. 따라서 실제로 원하는 것은 다음과 같습니다. 균질성이 높은 파티션 수가 적습니다 (대부분의 경우). 이것이 당신이 "무릎"지점을 찾는 이유입니다. 이자형. 거리 * 이전의 포인트 *는 이전의 증가와 관련하여 훨씬 더 높은 값으로 "점프"합니다. – embert
@ user1603472 불연속 값의 파생어로 작업 한 경우, 1 차 및 2 차 차이점을 알지 못했습니다. 여하튼 그것은 다만 운동했다. 실제로 저는 곡률에 대한 수식을 사용하여 "가장 강한"무릎 점을 찾을 수 있다는 것을 알았지 만, 보통은 어쨌든 당신이 그것을 보면서 음모를 평가해야합니다. 그것은 단지 추가적인 방향으로 작용할 수 있습니다. 이것은 내가 말하고있는 위키에서 [팔꿈치 방법] (http://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set#The_Elbow_Method)에 따른 것입니다. – embert