상세 컨텐츠

본문 제목

머신러닝과 딥러닝(9)_KMeans

카테고리 없음

by teminam 2023. 6. 14. 16:38

본문

 

1. Clusters

sns.scatterplot(x=X[0], y=X[1], hue=pred)
# 센터점이 어디 찍히냐에 따라 그 거리에 해당하는 값이 여러개라면 색깔이 다양하게 나올 수 있음

 

    `sns.scatterplot(x=X[0], y=X[1], hue=pred)`에서 점의 색깔은 클러스터 예측값
    `pred`에 따라 구분되는데, 그 위치가 그때 그때 달라지는 이유는 K-Means
    알고리즘이 초기 중심(centroid)의 위치에 따라 클러스터링 결과가 달라지기
    때문입니다.

    K-Means 알고리즘은 초기 중심의 위치에 따라 클러스터링 결과가 영향을
    받습니다. 알고리즘이 시작할 때 각 클러스터의 중심을 임의의 위치로
    설정하는데, 이러한 초기 중심의 위치에 따라 각 데이터 포인트의 할당과
    클러스터 중심의 업데이트가 달라지게 됩니다.

    따라서 코드를 여러 번 실행하거나 초기 중심의 위치를 다르게 설정하면,
    클러스터링 결과가 달라질 수 있습니다. 이로 인해 같은 데이터에 대해 실행할
    때마다 점의 색깔 군집의 위치가 조금씩 달라질 수 있습니다.

    또한, K-Means 알고리즘은 무작위 초기화에 의존하기 때문에 결과가 수렴하는
    지점이 다를 수 있습니다. 알고리즘이 수렴하는 지점에 도달하면 결과는
    일정해지고 변하지 않게 됩니다.

    따라서 K-Means 알고리즘을 실행할 때마다 다른 초기 중심의 위치와
    무작위성으로 인해 클러스터링 결과가 달라지는 것입니다. 이러한 이유로 점의
    색깔 군집의 위치가 그때 그때 달라질 수 있습니다.

sns.lineplot(x=range(2, 11), y=inertia_list)
# 최적의 k 값은 꺾여진 부분(엘보우)

2. Marketing data 확인하기

    `sns.lineplot(x=range(2, 11), y=inertia_list)`의 그래프에서 꺾이는 부분은
    엘보우(elbow) 메서드로 알려진 개념을 나타냅니다. 이 그래프는 클러스터 개수
    (K)에 따른 이너셔(inertia) 값의 변화를 보여줍니다.

    이너셔(inertia)는 클러스터 내의 데이터 포인트와 해당 클러스터의 중심 사이의
    거리의 합으로, 클러스터 내의 응집도를 나타내는 지표입니다. 클러스터의 개수
    (K)가 증가함에 따라 이너셔 값은 보통 감소하게 됩니다. 이는 클러스터 개수가
    많을수록 각 데이터 포인트가 더 가까운 클러스터 중심에 할당될 가능성이 높아지기 때문입니다.

    꺾이는 부분은 클러스터 개수(K)에 대한 이너셔 값의 변화가 급격히 감소하는
    지점을 의미합니다. 이 지점은 클러스터 개수가 늘어나도 이너셔 값의 변화가
    미미해지는 지점으로, 데이터의 구조를 잘 설명하면서도 불필요한 복잡성을
    추가하지 않는 적절한 클러스터 개수를 나타냅니다.

    엘보우 메서드는 클러스터 개수(K)를 결정하는 데 도움을 줍니다. 그래프에서
    꺾이는 부분을 기준으로 적절한 클러스터 개수를 선택할 수 있습니다.
    일반적으로 꺾이는 지점 이후의 클러스터 개수를 선택하여 적절한 군집화를
    수행합니다. 그러나 이 부분의 판단은 주관적인 요소도 포함되므로, 비즈니스
    도메인 지식과 목적에 따라 최종 결정을 내려야 합니다.

# 마지막으로 가입된 사람을 기준으로 가입 날짜(달) 구하기
mkt_df['pass_month'] = (mkt_df['Dt_Customer'].max().year * 12 + mkt_df['Dt_Customer'].max().month) - (mkt_df['Dt_Customer'].dt.year * 12 + mkt_df['Dt_Customer'].dt.month)

3. 스케일링(Scaling)

  • 데이터를 특정한 스케일로 통일하는 것
  • 데이터를 모델링하기 전에 거치는 것이 좋음
  • 다차원의 값들을 비교 분석하기 쉽게 만들어주며, 자료의 오버플로우나 언더플로우를 방지하여 최적화 과정에서의 안정성 및 수렴속도를 향상
 

3-1. 스케일링의 종류

  • StandardScaler: 평균과 표준편차를 사용
  • MinMaxScaler: 최대/최소값이 각각 1과 0이 되도록 스케일링
  • RobusScaler: 중앙값과 IQR 사용. 아웃라이어의 영향을 최소화

 

    MinMaxScaler는 데이터를 최소값과 최대값 사이의 범위로 조정하는 스케일링
    방법 중 하나입니다. 주어진 데이터의 최소값을 0으로, 최대값을 1로 설정하여
    데이터를 변환합니다. 이를 통해 데이터의 분포를 [0, 1] 사이로 조정하고, 각
    변수의 상대적인 크기 비교를 가능하게 합니다.

    MinMaxScaler는 다음과 같은 공식을 사용하여 데이터를 변환합니다:

    ```
    X_scaled = (X - X_min) / (X_max - X_min)
    ```

    여기서, X는 원래 데이터, X_min은 변수의 최소값, X_max는 변수의 최대값을
    나타냅니다. 이 공식을 통해 변수의 범위가 [0, 1]로 조정되고, 각 데이터
    포인트는 원래 값과 최소값 및 최대값의 비율에 따라 변환됩니다.

    MinMaxScaler는 다양한 머신러닝 알고리즘에서 데이터 스케일링에 자주
    사용됩니다. 예를 들어, 신경망(neural network) 알고리즘에서는 입력 데이터의
    스케일을 조정하는 데에 유용하게 적용될 수 있습니다. 또한, 일부 알고리즘은
    변수의 범위에 민감하게 반응하는데, 이런 경우 MinMaxScaler를 사용하여
    데이터를 일정한 범위로 조정함으로써 모델의 성능을 개선할 수 있습니다.

    사이킷런(Scikit-learn) 라이브러리에서는 MinMaxScaler를 제공하며, 사용하기
    쉽고 다양한 데이터셋에 적용할 수 있습니다.

3-2. 스케일링 적용하기

 

4. KMeans

  • KMeans 클러스터링 알고리즘은 n개의 중심점을 찍은 후에, 이 중심점에서 각 점간의 거리의 합이 가장 최소화가 되는 중심점 n의 위치를 찾고, 이 중심점에서 가까운 점들을 중심점을 기준으로 묶는 알고리즘
  • 중심점은 각 군집의 데이터의 평균값을 위치로 가지게 됨
  • 클러스터의 수를 정해줘야 함
  • 중심점을 측정할 때, 처음에 랜덤으로 중심점의 위치를 찾기 때문에 잘못하면 중심점의 점간의 거리가 Global Optimum인 최소 값을 찾는게 아니라, 중심점이 Local Optimum에 수렴하여 잘못된 분류를 할 수 있음.

5. 실루엣 스코어

  • 각 군집 간의 거리가 얼마나 효율적으로 분리 돼 있는지를 나타냄
  • 다른 군집과의 거리는 떨어져 있고, 동일 군집끼리의 데이터는 서로 가깝게 잘 뭉쳐 있다는 의미
  • 실루엣 분석은 실루엣 개수를 기반으로 하는데, 실루엣 계수는 개별 데이터가 가지는 군집화 지표