Clustering


Linear Algebra


1. Scree Plots

Q . Scree Plot이란?
A . Scree Plot은 Principal component - eigenvalue의 변화를 보는 그래프이다. PCA 분석 후 PC를 선정할 때 사용한다.

  • Scree 뜻 : (산의) 자갈 비탈, 잔돌

  • x-axis : Eigenvalue
  • y-axis : PC
  • Cumulative ( 누적값 )이 70~80% 정도면 무난하다.

1.2 지도·비지도 학습

  • Supervised Learning ( 지도 학습 ) : trainging data에 label(답)이 있을 때 사용

    • Classification ( 분류 ) : 분류 알고리즘은 주어진 데이터의 카테고리(범주형) 혹은 클래스 예측을 위해 사용한다. 최빈값을 사용.

    • Regression ( 회귀 ) : 회귀 알고리즘은 continuous(연속적인)한 데이터를 바탕으로 결과를 예측 하기 위해 사용한다. 회귀, 예측이다. 평균을 사용.

    • 예시 : 당뇨가 있냐 없냐, 집 값 예측( price )

    • 단점 : 모든 데이터에 label( 당뇨 있다 등)을 해줘야 하므로 비용이 비싸다

  • Unsupervised Learning ( 비지도 학습 ) : trainging data에 label(답)이 없을 때 사용, 연관된 feature를 바탕으로 유사한 그룹을 생성한다.

    • Clustering : 데이터의 연관된 feature를 바탕으로 유사한 group을 생성한다.

    • Dimentionality Reduction ( 차원 축소 ): 높은 차원의 데이터셋을 feature selection / extraction 등을 통해 차원을 줄이는 방법

    • Association Rule Learning ( 연관 규칙 학습 ): 데이터셋의 feature들의 관계를 발견하는 방법 ( feature - feature ) feature - output(x)

  • Reinforcement Learning ( 강화학습 ) : 머신러닝의 일종이다. 기계에게 피드백을 통해 학습해 나가는 형태이다. 좋은 형태는 보상, 나쁜 형태는 처벌의 피드백을 준다.


2. Clustering

Q . Clustering의 목적?
A . 데이터들의 유사성을 판단하기 위해 쓰인다. 데이터셋을 요약, 정리하는데 있어서 매우 효율적인 방법들 중 하나이다. But, 비지도학습의 일종으로 정답이 정해져있지 않는다. 따라서, production, prediction을 위한 modeling에 쓰이기보다 EDA의 방법으로 사용된다.

  • Clustering은 상대적 거리를 통해 비슷한 애들끼리 묶는다.
  • Clustering의 종류

    • Hierarchical

      • Agglomerative : 개별 포인트에서 시작 후 점점 크게 합쳐간다.

      • Divisive : 한개의 큰 cluster에서 시작 후 점점 작은 cluster로 나눠간다.

    • Point Assignment : 시작시에 cluster 수를 정한 후, 데이터들을 하나씩 cluster에 배정시킨다.

    • Hard vs soft Clustering : 일반적으로 Hard Clustering을 Clustering이라고 한다.

      • Hard Clustering : 데이터 하나의 cluster에만 할당된다.

      • Soft Clustering : 데이터 여러 cluster에 확률을 가지고 할당된다.

  • Similarity : Euclidean, Cosine, Jaccard, Edit Distance 등...

    • Euclidean : 최단거리를 구하는 방식으로 주로 많이 쓰인다.

❗ PCA로 전처리를 하고, K-means를 메인 "머신러닝"으로 사용 하는 연습하기!

  • Hierarchical Clustering 연습코드
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt

lnk_Z = linkage(Z, method='ward')

plt.figure(figsize=(20,10))
den_Z = dendrogram(lnk_Z)

  • linkage의 method에 따라 군집의 모양이 달라진다.

    • ward : (default) 모든 cluster 내의 분산을 가장 작게 증가시키는 두 cluster를 합친다. 크기가 비슷한 cluster가 만들어진다.
    • single : cluster 포인트 사이의 최소 거리가 가장 짧은 두 cluster를 합친다.
    • complete : cluster 포인트 사이의 최대 거리가 가장 짧은 두 cluster를 합친다.
    • average : 평균 거리가 가장 짧은 두 cluster를 합친다.

2.1 K-Means Clustering

Q . K-means Clustering이란?
A . 주어진 데이터를 k개( number of centroids )의 cluster로 묶는 알고리즘이다. 각 cluster와 거리 차이의 variance(분산)을 minimize하는 방식으로 동작한다. K-means는 centroid-based clustering 알고리즘이라고도 불린다.

  • Clustering은 Origin을 찾는 과정이다.
  • K-means Clustering은 data balance를 해주는 과정이다.
    • Ex . 1000 vs 5 에서 balance해주기 위해 5 vs 5로 만들고 싶다고 할때 clustering을 통해 비슷한 feature들로 balance를 맞춘다.
  • 비즈니스 인사이트에서는 PCA 과정을 하지 않고 Clustering만 한다.

2.1.1 K-Means Clustering 과정

  • n차원( n개의 feature ) 데이터에 대해서,
    ★★ 1. k개의 랜덤한 데이터를 cluster의 중심점으로 assign. 면접에서 많이 물어본다
    2. 해당 cluster에 근접해 있는 데이터를 cluster로 할당. 가까운 centroid에 데이터 포인터를 assign
    3. 변경된 cluster에 대해서 centroid(중심점)을 새로 계산. centroid를 assign이 된 데이터 포인트들의 평균으로 다시 재배치
    👉 cluster에 유의미한 변화가 없을 때까지 2~3회 반복( iteration )
    👉 변화가 없다 = optimized

👉 혹은 scikit-learn을 사용한다.

2.1.2 K-means에서 K를 결정하는 방법

1. The Eyeball Method : 사람이 눈으로 보고 판단하여 임의로 지정하는 방법

2. Metrics : 객관적인 지표( elbow method )를 통해 최적화된 k를 선택하는 방법

2.2 Centroid

Q . Centroid란?
A . 주어진 Cluster 내부에 있는 모든 점들의 중심부분에 위치한 가상의 점

  • 1번. Randomly assign centroids
    이 과정이 중요한 이유는 무작위로 centroid를 하기 때문에 centroid가 가깝게 배치 될 수 있다.
    따라서, 이 경우, 1번 과정을 다시 설정하여 적절한 위치의 centroid를 정해준다.

  • 2번. Cluster의 과정

  • 3번. 중심점을 새로 계산 및 포인트들의 평균으로 다시 재배치

2.2.1 Scikit-learn을 통해 Centroid 설정

# Scikit-learn을 통해 Centroid 설정

from sklearn.cluster import KMeans 

kmeans = KMeans(n_clusters = 3)
kmeans.fit(x)
labels = kmeans.labels_
# print(labels)

new_series = pd.Series(labels)
df['clusters'] = new_series.values
# df.head()

def plot_clusters(df, column_header, centroids):
  colors = {0 : 'red', 1 : 'cyan', 2 : 'yellow'}
  fig, ax = plt.subplots()
  ax.plot(centroids.iloc[0].x, centroids.iloc[0].y, "ok") # 기존 중심점
  ax.plot(centroids.iloc[1].x, centroids.iloc[1].y, "ok")
  ax.plot(centroids.iloc[2].x, centroids.iloc[2].y, "ok")
  grouped = df.groupby(column_header)
  for key, group in grouped:
      group.plot(ax = ax, kind = 'scatter', x = 'x', y = 'y', label = key, color = colors[key])
  plt.show()

def get_centroids(df, column_header):
  new_centroids = df.groupby(column_header).mean()
  return new_centroids

centroids = get_centroids(df, 'clusters')
plot_clusters(df, 'clusters', centroids)

2.3 Elbow methods

  • Elbow method를 통하여 k값을 확인할 수 있다.
sum_of_squared_distances = []
K = range(1, 15)
for k in K:
    km = KMeans(n_clusters = k)
    km = km.fit(points)
    sum_of_squared_distances.append(km.inertia_)
    
plt.plot(K, sum_of_squared_distances, 'bx-')
plt.xlabel('k')
plt.ylabel('Sum_of_squared_distances')
plt.title('Elbow Method For Optimal k')
plt.show()

  • k = 3 이후의 지점에서 유의미한 변화가 없으므로 cluster는 3이 적합하다.

연구 ❗ 완벽한 방법은 없다. 항상 각각의 장단점이 존재한다. 더 많은 방법들을 시도하여 더 좋은 결과를 도출할 수 있도록 연구해야 된다.

지식 ❗ 다양한 방법들을 선택하는 최선의 기준은 데이터의 특성이다. 데이터의 이해가 가장 필수적이다. 도메인에 대한 지식이 필요한 이유이다!



👉 과정 한눈에 보기

profile
I believe I can fly

0개의 댓글