kmeans에 의해 클러스터 된 데이터 세트가 있습니다. 친구는 각 클러스터 센터를 대표하는 그림을 보여줄 수 있다고했습니다. 그는 나에게이 짧은 예제 코드입니다 주었다 :이 시도했습니다kmeans 클러스터 센터를 나타내는 그림 표시 (Scikit learn)
for i in xrange(len(np.unique(labels))):
this_cluster = np.where(labels == i)[0]
fig, ax = plt.subplots(len(this_cluster))
for im in this_cluster:
ax.imshow(images[im])
하지만 ... 작동하지 예컨대 내가 20 개 사진을 포함하는 작은 데이터 집합을 가지고있다. Kmeans는이 20 명의 사진을 위해 50 개의 센터를 반환합니다. 그래서 (레이블 = kmeans.labels_ ?!) 내 np.unique (레이블)은 50과 같습니다 ... "i"는 0에서 49까지 ... 내 첫번째 "this_cluster"는 다음과 같습니다 :
의 다음 나에게 경계의 밖으로을 줄 것이다 20 사진과im>20
와
images[im]
가 있기 때문에
i=4
에 의해 파괴 begans 경우
[ 4 8 18 19 35 37 50 135 140 146 156 214 371 506 563
586 594 887 916 989 993 1021 1061 1105 1121 1128 1405 1409 1458 1466
1481 1484 1505 1572 1573 1620 1784 1817 1835 1854 1945 1955 2004 2006 2054
2135 2204 2245 2319 2321 2343 2391 2410 2414 2486 2502 2530 2594 2624 2629
2825 2828 2833 2911 3017 3097 3245 3246 3298 3347 3493 3568 3627 3677 3701
3789 3866 3941 3944 3969 4022 4115 4214 4215 4432 4527 4559 4594 4645 4668
4699 4785 4797 4802 4807 4831 4892 4905 4921 4929 4932 5076 5178 5233 5249
5318 5463 5508 5571 5621 5644 5661 5678 5690 5727 5736 5737 5755 5777 5961
6088 6089 6107 6197 6353 6487 6500 6515 6565 6575 6601 6706 6749]
그래서 ... 난 "this_clusters은"계산되는 데이터 집합에서 촬영 한 기술자 생각 kmeans에 의해 클러스터 0으로 설정 ... 그래서 이것이 맞을 수 없다! 또는 나는 틀린 길에있다. 어쩌면 누군가 나를 도울 수 있습니다.
EDIT *
[[ 36. 1. 9. ..., 0. 0. 0.]
[ 0. 0. 1. ..., 0. 0. 0.]
[ 0. 0. 0. ..., 0. 0. 1.]
...,
[ 49. 26. 0. ..., 12. 4. 5.]
[ 0. 0. 0. ..., 0. 0. 0.]
[ 0. 3. 8. ..., 0. 0. 3.]]
데이터 = 20의 모든 픽쳐 디스크립터 ...
세트 :
create sets
X_train_pos, X_test_pos, X_dataset_train_pos, X_dataset_test_pos = train_test_split(X_desc_pos, dataset_pos, test_size=0.5)
X_train_neg, X_test_neg, X_dataset_train_neg, X_dataset_test_neg = train_test_split(X_desc_neg, dataset_neg, test_size=0.5)
# merge list of array descriptor into descriptor list
x1 = numpy.vstack(X_train_pos)
x2 = numpy.vstack(X_train_neg)
# compute cluster centers
kmeans, n_clusters = dataset_module.create_center_data(numpy.vstack((x1,x2)),numpy.vstack((X_dataset_train_pos,X_dataset_train_neg)))
컴퓨팅 kmeans는
def create_center_data(data,dataset):
n_clusters = len(data)
n_clusters = math.sqrt(n_clusters/2)
n_clusters = int(n_clusters)
kmeans = KMeans(init='k-means++', n_clusters=n_clusters, n_init=1)
kmeans.fit(data)
numpy.set_printoptions(threshold=numpy.nan)
labels = kmeans.labels_
for i in xrange(len(numpy.unique(labels))):
this_cluster = numpy.where(labels == i)[0]
fig, ax = plt.subplots(len(this_cluster))
for im in this_cluster:
pic = open(dataset[im], "rb")
ax.imshow(pic)
return kmeans, n_clusters
데이터 등을 보인다 pa를 가진 질적 인 배열이다. 사진을 부르게
관련
린다
데이터 포인트가 20 개인 경우 실수가 두 번 있습니다. 하나는 20 개의 샘플에서 50 개의 클러스터를 찾으려고하는 것이고, 이는 의미가 없습니다. 다른 하나는 당신이 적어도 6750 포인트를 가지고 있다고 생각하기 때문에 데이터를 잘못된 방법으로'KMeans.fit'에 공급한다는 것입니다. 더 많은 코드를 보지 않으면 무엇이 잘못 될지 말할 수 없습니다. –
50 개 정도되는 것이 좋습니까? 누군가는 내가 고양이와 함께 50 장의 사진을 찍기 위해 100에서 500 사이를 가져야한다고 말한다. 내 세트는 훨씬 더 크지 만 이것을 시험하기 위해 20 장의 사진을 찍는다 ... 편집 : * 코드 – Linda
50 점으로 20 점을 클러스터링 할 수 없다. KMeans로 클러스터를 구성하면 예외가 발생합니다. '데이터'의 모양은 무엇입니까? –