[과제 내용]
2차원 특징 공간 상에서 다음과 같이 6개의 데이터가 주어졌을 때,
(–1, 1), (0, 0.5), (1, 1), (–1, –0.5), (0, –1), (1, –0.5)
이 데이터들을 K-means 클러스터링 알고리즘을 사용하여 2개의 클러스터로 군집화하고자 한다.
랜덤하게 초기화한 클러스터 1과 2의 중심이 각각 (–1 ,1)과 (1, –0.5) 라고 하였을 때, 다음 질문에 답하시오:
(1) 데이터들과 클러스터 중심의 초기값들을 2차원 특징 공간 상에 함께 표시하고, 각 데이터 포인트들이 어느 클러스터에 속하는지 판단하여 다음 표를 완성하시오:
일단 컴퓨터 계산
손 계산도 한번 해보겠습니다...
[0 2.5
1.118 1.414
2 1.5
1.5 2
2.236 1.118
2.5 0]인거 보면 잘 맞추네요 ㅎㅎ...
클러스터 배분은 위와 같이 되겠네요
(2) 클러스터 중심을 이동시키고 업데이트 된 클러스터 중심의 값을 구하시오.
그럼 평균값으로 클러스터를 이동하면!
( (3) 업데이트 된 클러스터 중심을 2차원 특징 공간 상에 데이터들과 함께 표시하고, 각 데이터 포인트들이 어느 클러스터에 속하는지 판단하여 다음 표를 완성하시오:
( (4) 각 클러스터 중심의 업데이트가 필요한가? 만일 필요하다면 업데이트된 클러스터 중심의 값을 구하시오. 만일 필요하지 않다면, 그 이유를 설명하시오.
필요없다! 클러스터에 속한 요소들이 변하지 않아 중심점이 이동하지 않았기 때문!
( (5) 새로운 데이터 (0, 0), (2, 0), (0, 1)이 주어졌을 때, 이 데이터들과 클러스터 중심을 2차원 특징 공간 상에 함께 표시하고, 이 데이터들이 어느 클러스터에 속하는지 판단하여 다음 표를 완성하시오:
import matplotlib.pyplot as plt
import numpy as np
# 데이터 포인트와 초기 클러스터 중심 정의
data = np.array([[-1, 1], [0, 0.5], [1, 1], [-1, -0.5], [0, -1], [1, -0.5]])
centroids = np.array([[-1, 1], [1, -0.5]])
def plot_clusters(data, centroids, clusters, iteration):
plt.figure(figsize=(8, 6))
plt.scatter(data[:, 0], data[:, 1], c=clusters, cmap='viridis', marker='o', label='Data Points')
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=100, label='Centroids')
plt.title(f'Iteration {iteration}')
plt.xlabel('$x_1$')
plt.ylabel('$x_2$')
plt.legend()
plt.grid(True)
plt.show()
def kmeans(data, centroids):
for iteration in range(1, 11): # 최대 10번의 반복
# 각 데이터 포인트와 클러스터 중심 사이의 거리 계산
distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
print("distances",distances)
# 각 데이터 포인트를 가장 가까운 클러스터에 할당
clusters = np.argmin(distances, axis=1)
print("clusters",clusters)
plot_clusters(data, centroids, clusters, iteration)
# 새로운 클러스터 중심 계산
new_centroids = np.array([data[clusters == k].mean(axis=0) for k in range(centroids.shape[0])])
print("new_centroids",new_centroids)
# 클러스터 중심이 변하지 않으면 종료
if np.all(centroids == new_centroids):
break
centroids = new_centroids
# K-means 클러스터링 수행 및 시각화
kmeans(data, centroids)
진행한 코드
'인공지능 > 공부' 카테고리의 다른 글
생성형 인공지능 입문 - 12주차 퀴즈 (1) | 2024.05.20 |
---|---|
생성형 인공지능 12주차 - 분산 기반 영상 생성 (0) | 2024.05.20 |
모두를 위한 머신러닝 12주차 퀴즈 (0) | 2024.05.20 |
모두를 위한 머신러닝 12주차 클러스터링 (0) | 2024.05.20 |
생성형 인공지능 입문 11주차 퀴즈 (0) | 2024.05.18 |