Q . Scree Plot이란?
A . Scree Plot은 Principal component - eigenvalue의 변화를 보는 그래프이다. PCA 분석 후 PC를 선정할 때 사용한다.
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 ( 강화학습 ) : 머신러닝의 일종이다. 기계에게 피드백을 통해 학습해 나가는 형태이다. 좋은 형태는 보상, 나쁜 형태는 처벌의 피드백을 준다.
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 등...
❗ PCA로 전처리를 하고, K-means를 메인 "머신러닝"으로 사용 하는 연습하기!
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에 따라 군집의 모양이 달라진다.
Q . K-means Clustering이란?
A . 주어진 데이터를 k개( number of centroids )의 cluster로 묶는 알고리즘이다. 각 cluster와 거리 차이의 variance(분산)을 minimize하는 방식으로 동작한다. K-means는 centroid-based 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을 사용한다.
1. The Eyeball Method : 사람이 눈으로 보고 판단하여 임의로 지정하는 방법
2. Metrics : 객관적인 지표( elbow method )를 통해 최적화된 k를 선택하는 방법
Q . Centroid란?
A . 주어진 Cluster 내부에 있는 모든 점들의 중심부분에 위치한 가상의 점
1번. Randomly assign centroids
이 과정이 중요한 이유는 무작위로 centroid를 하기 때문에 centroid가 가깝게 배치 될 수 있다.
따라서, 이 경우, 1번 과정을 다시 설정하여 적절한 위치의 centroid를 정해준다.
2번. Cluster의 과정
3번. 중심점을 새로 계산 및 포인트들의 평균으로 다시 재배치
# 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)
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()
연구 ❗ 완벽한 방법은 없다. 항상 각각의 장단점이 존재한다. 더 많은 방법들을 시도하여 더 좋은 결과를 도출할 수 있도록 연구해야 된다.
지식 ❗ 다양한 방법들을 선택하는 최선의 기준은 데이터의 특성이다. 데이터의 이해가 가장 필수적이다. 도메인에 대한 지식이 필요한 이유이다!