kMeans 클러스터링 감도를 조정하는 방법은 무엇입니까?

공기 역학

다음 데이터 세트가 있습니다.

        node        bc cluster
1    russian  0.457039       1
48       man  0.286875       1
155    woman  0.129939       0
3        bit  0.092721       0
5      write  0.065424       0
98       age  0.064347       0
97     escap  0.062675       0
74      game  0.062606       0

그런 다음 kMeans 클러스터링을 bc별로 수행 하여 노드를 두 개의 다른 그룹으로 분리합니다. 바로 지금 아래 코드를 사용하여 위의 결과를 얻습니다 (클러스터링 결과가 cluster열에 있음).

    bc_df = pd.DataFrame({"node": bc_nodes, "bc": bc_values})
    bc_df = bc_df.sort_values("bc", ascending=False)
    km = KMeans(n_clusters=2).fit(bc_df[['bc']])
    bc_df.loc[:,'cluster'] = km.labels_
    print(bc_df.head(8))

꽤 좋지만 약간 다르게 작동하고 첫 번째 클러스터에서 처음 4 개 노드를 선택한 다음 두 번째 클러스터에서 다른 노드를 선택하는 것이 서로 더 비슷하기 때문입니다.

kMeans에 약간의 조정을 할 수 있습니까? 아니면 sklearn그렇게 할 수있는 다른 알고리즘을 알고 계십니까?

chitown88

원하는 것은 1 차원 데이터에 대한 클러스터링입니다. 이 문제를 해결하는 한 가지 방법은 Jenks Natural Breaks를 사용하는 것입니다 (Google에서 설명을 얻음).

나는이 함수를 작성하지 않았습니다 (많은 신용이 여기에 그의 솔루션과 함께 @Frank로 이동합니다 )

데이터 프레임이 주어지면 :

import pandas as pd

df = pd.DataFrame([
['russian',  0.457039],
['man',  0.286875],
['woman',  0.129939],
['bit',  0.092721],
['write',  0.065424],
['age',  0.064347],
['escap',  0.062675],
['game',  0.062606]], columns = ['node','bc'])

Jenks Natural Break 기능을 사용한 코드 :

def get_jenks_breaks(data_list, number_class):
    data_list.sort()
    mat1 = []
    for i in range(len(data_list) + 1):
        temp = []
        for j in range(number_class + 1):
            temp.append(0)
        mat1.append(temp)
    mat2 = []
    for i in range(len(data_list) + 1):
        temp = []
        for j in range(number_class + 1):
            temp.append(0)
        mat2.append(temp)
    for i in range(1, number_class + 1):
        mat1[1][i] = 1
        mat2[1][i] = 0
        for j in range(2, len(data_list) + 1):
            mat2[j][i] = float('inf')
    v = 0.0
    for l in range(2, len(data_list) + 1):
        s1 = 0.0
        s2 = 0.0
        w = 0.0
        for m in range(1, l + 1):
            i3 = l - m + 1
            val = float(data_list[i3 - 1])
            s2 += val * val
            s1 += val
            w += 1
            v = s2 - (s1 * s1) / w
            i4 = i3 - 1
            if i4 != 0:
                for j in range(2, number_class + 1):
                    if mat2[l][j] >= (v + mat2[i4][j - 1]):
                        mat1[l][j] = i3
                        mat2[l][j] = v + mat2[i4][j - 1]
        mat1[l][1] = 1
        mat2[l][1] = v
    k = len(data_list)
    kclass = []
    for i in range(number_class + 1):
        kclass.append(min(data_list))
    kclass[number_class] = float(data_list[len(data_list) - 1])
    count_num = number_class
    while count_num >= 2:  # print "rank = " + str(mat1[k][count_num])
        idx = int((mat1[k][count_num]) - 2)
        # print "val = " + str(data_list[idx])
        kclass[count_num - 1] = data_list[idx]
        k = int((mat1[k][count_num] - 1))
        count_num -= 1
    return kclass






# Get values to find the natural breaks    
x = list(df['bc'])

# Calculate the break values. 
# I want 2 groups, so parameter is 2.
# If you print (get_jenks_breaks(x, 2)), it will give you 3 values: [min, break1, max]
# Obviously if you want more groups, you'll need to adjust this and also adjust the assign_cluster function below.
breaking_point = get_jenks_breaks(x, 2)[1]

# Creating group for the bc column
def assign_cluster(bc):
    if bc < breaking_point:
        return 0
    else:
        return 1

# Apply `assign_cluster` to `df['bc']`    
df['cluster'] = df['bc'].apply(assign_cluster)

산출:

print (df)
      node        bc  cluster
0  russian  0.457039        1
1      man  0.286875        1
2    woman  0.129939        1
3      bit  0.092721        0
4    write  0.065424        0
5      age  0.064347        0
6    escap  0.062675        0
7     game  0.062606        0

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

KMeans를 사용하여 다차원 및 알 수없는 데이터를 클러스터링하는 방법은 무엇입니까?

분류에서Dev

KMeans에서 예측 한 클러스터 번호 대신 레이블이있는 이름 클러스터를 얻는 방법은 무엇입니까?

분류에서Dev

sklearn.cluster.KMeans에서 클러스터 인덱스를 추출하고 매핑하는 방법은 무엇입니까?

분류에서Dev

kmeans의 클러스터 중심 사이의 거리를 계산하고 파이썬에서 최소값을 선택하는 방법은 무엇입니까?

분류에서Dev

Matplotlib를 사용하여 다기능 kmeans 모델에서 클러스터와 중심을 그리는 방법은 무엇입니까?

분류에서Dev

고객의 선호도를 클러스터링하는 방법은 무엇입니까?

분류에서Dev

R에서 Kmeans 클러스터링 플롯의 쌍별 플롯을 생성하는 방법은 무엇입니까?

분류에서Dev

Kafka Connect, Cassandra Sink : 파티션 및 클러스터링 키를 지정하는 방법은 무엇입니까?

분류에서Dev

CSV 파일의 데이터를 클러스터링 (또는 그룹화)하는 방법은 무엇입니까?

분류에서Dev

kmeans에 대해 Spark에서 MongoDB 데이터를 매핑하는 방법은 무엇입니까?

분류에서Dev

R에서 pam 클러스터링 결과를 요약하는 방법은 무엇입니까?

분류에서Dev

Kmeans 총 반복 횟수를 찾는 방법은 무엇입니까?

분류에서Dev

Gap 통계를 사용하여 계층 적 클러스터링에서 최적의 클러스터 수를 찾는 방법은 무엇입니까?

분류에서Dev

Elasticsearch 클러스터를 활용하는 방법은 무엇입니까?

분류에서Dev

개인 클러스터를 구축하는 방법은 무엇입니까?

분류에서Dev

정규화되지 않은 데이터를 사용할 때 겹치지 않는 클러스터를 얻는 동안 정규화 된 데이터를 사용할 때 kmeans에서 중첩 된 클러스터를 얻는 이유는 무엇입니까?

분류에서Dev

Spark StreamingKMeans의 클러스터 센터를 찾는 방법은 무엇입니까?

분류에서Dev

NVIDIA GPU 감속 온도를 설정하는 방법은 무엇입니까? (리눅스)

분류에서Dev

QueryOver를 사용하여 특정 클래스를 필터링하는 방법은 무엇입니까?

분류에서Dev

kmeans가 생성 한 클러스터 센터를 사용하여 새 데이터를 클러스터링하는 방법

분류에서Dev

KMeans 클러스터링 SKlearn에서 cluster_centers_의 순서 / 색인이 나타내는 것은 무엇입니까?

분류에서Dev

dendextend를 사용하여 계층 적 클러스터링 트리에서 하나의 관찰에 레이블을 지정하는 방법은 무엇입니까?

분류에서Dev

Impala를 지원하는 EMR 클러스터를 설정하는 방법은 무엇입니까?

분류에서Dev

Impala를 지원하는 EMR 클러스터를 설정하는 방법은 무엇입니까?

분류에서Dev

Google 마커 클러스터 렌더러를 사용자 정의하는 방법은 무엇입니까?

분류에서Dev

TIBCO EMS 용 클러스터를 만드는 방법은 무엇입니까?

분류에서Dev

마우스 속도 / 민감도를 변경하는 방법은 무엇입니까?

분류에서Dev

마우스 속도 / 민감도를 변경하는 방법은 무엇입니까?

분류에서Dev

"가난한 사람"의 Linux 데스크탑 클러스터를 설정하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    KMeans를 사용하여 다차원 및 알 수없는 데이터를 클러스터링하는 방법은 무엇입니까?

  2. 2

    KMeans에서 예측 한 클러스터 번호 대신 레이블이있는 이름 클러스터를 얻는 방법은 무엇입니까?

  3. 3

    sklearn.cluster.KMeans에서 클러스터 인덱스를 추출하고 매핑하는 방법은 무엇입니까?

  4. 4

    kmeans의 클러스터 중심 사이의 거리를 계산하고 파이썬에서 최소값을 선택하는 방법은 무엇입니까?

  5. 5

    Matplotlib를 사용하여 다기능 kmeans 모델에서 클러스터와 중심을 그리는 방법은 무엇입니까?

  6. 6

    고객의 선호도를 클러스터링하는 방법은 무엇입니까?

  7. 7

    R에서 Kmeans 클러스터링 플롯의 쌍별 플롯을 생성하는 방법은 무엇입니까?

  8. 8

    Kafka Connect, Cassandra Sink : 파티션 및 클러스터링 키를 지정하는 방법은 무엇입니까?

  9. 9

    CSV 파일의 데이터를 클러스터링 (또는 그룹화)하는 방법은 무엇입니까?

  10. 10

    kmeans에 대해 Spark에서 MongoDB 데이터를 매핑하는 방법은 무엇입니까?

  11. 11

    R에서 pam 클러스터링 결과를 요약하는 방법은 무엇입니까?

  12. 12

    Kmeans 총 반복 횟수를 찾는 방법은 무엇입니까?

  13. 13

    Gap 통계를 사용하여 계층 적 클러스터링에서 최적의 클러스터 수를 찾는 방법은 무엇입니까?

  14. 14

    Elasticsearch 클러스터를 활용하는 방법은 무엇입니까?

  15. 15

    개인 클러스터를 구축하는 방법은 무엇입니까?

  16. 16

    정규화되지 않은 데이터를 사용할 때 겹치지 않는 클러스터를 얻는 동안 정규화 된 데이터를 사용할 때 kmeans에서 중첩 된 클러스터를 얻는 이유는 무엇입니까?

  17. 17

    Spark StreamingKMeans의 클러스터 센터를 찾는 방법은 무엇입니까?

  18. 18

    NVIDIA GPU 감속 온도를 설정하는 방법은 무엇입니까? (리눅스)

  19. 19

    QueryOver를 사용하여 특정 클래스를 필터링하는 방법은 무엇입니까?

  20. 20

    kmeans가 생성 한 클러스터 센터를 사용하여 새 데이터를 클러스터링하는 방법

  21. 21

    KMeans 클러스터링 SKlearn에서 cluster_centers_의 순서 / 색인이 나타내는 것은 무엇입니까?

  22. 22

    dendextend를 사용하여 계층 적 클러스터링 트리에서 하나의 관찰에 레이블을 지정하는 방법은 무엇입니까?

  23. 23

    Impala를 지원하는 EMR 클러스터를 설정하는 방법은 무엇입니까?

  24. 24

    Impala를 지원하는 EMR 클러스터를 설정하는 방법은 무엇입니까?

  25. 25

    Google 마커 클러스터 렌더러를 사용자 정의하는 방법은 무엇입니까?

  26. 26

    TIBCO EMS 용 클러스터를 만드는 방법은 무엇입니까?

  27. 27

    마우스 속도 / 민감도를 변경하는 방법은 무엇입니까?

  28. 28

    마우스 속도 / 민감도를 변경하는 방법은 무엇입니까?

  29. 29

    "가난한 사람"의 Linux 데스크탑 클러스터를 설정하는 방법은 무엇입니까?

뜨겁다태그

보관