더북(TheBook)

연속형 데이터의 모든 특성에 동일하게 중요성을 부여하기 위해 스케일링(scaling)을 적용합니다. 이는 데이터 범위가 다르기 때문에 범위에 따라 중요도가 달라질 수 있는 것(예를 들어 1000원과 1억 원이 있을 때 1000원의 데이터는 무시)을 방지하기 위함입니다. 일정한 범위를 유지하도록 사이킷런의 MinMaxScaler() 메서드를 사용합니다.

코드 3-32 데이터 전처리(스케일링 적용)

mms = MinMaxScaler()
mms.fit(data)
data_transformed = mms.transform(data)

데이터에 대한 전처리가 완료되었기 때문에 우리가 원하는 적당한 K 값을 알아보겠습니다.

코드 3-33 적당한 K 값 추출

Sum_of_squared_distances = [] ------ ①
K = range(1, 15) ------ K에 1부터 15까지 적용해 봅니다.
for k in K:
    km = KMeans(n_clusters=k) ------ 1~15의 K 값 적용
    km = km.fit(data_transformed) ------ KMeans 모델 훈련
    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('Optimal k')
plt.show()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.