클러스터링하기 전에 데이터를 확장해야합니까?


44

이 튜토리얼을 찾았습니다. 클러스터링 전에 기능에서 스케일 기능을 실행해야한다고 제안합니다 (데이터가 z 점수로 변환된다고 생각합니다).

그것이 필요한지 궁금합니다. 데이터를 스케일링하지 않으면 멋진 팔꿈치 포인트가 있기 때문에 주로 묻습니다. 그러나 스케일링하면 사라집니다. :)

답변:


59

문제는 사례 사이의 거리를 잘 측정하는 것입니다.

두 가지 기능이 있는데, 하나는 케이스와 다른 것의 차이가 큰 것입니다. 전자가 거리의 유일한 동인이되도록 준비하고 있습니까?

예를 들어, 사람들을 킬로그램 단위의 키로, 높이를 미터로 묶은 경우 1kg의 차이가 1m의 차이만큼 큰가? 킬로그램 단위의 무게와 센티미터 단위의 높이에서 다른 클러스터링을 얻는 것이 중요합니까? 당신의 대답이 각각 "아니오"와 "예"라면 당신은 아마 규모를 조정해야합니다.

반면에, 동서로 거리와 북서로 거리를 기준으로 캐나다 도시를 모으는 경우 일반적으로 동서로 훨씬 더 큰 차이가 있더라도, 킬로미터 또는 마일로 스케일이없는 거리를 사용하는 것이 행복 할 수 있습니다 (땅의 곡률을 위해 경도와 위도를 조정하고 싶을 수도 있습니다).


33

다른 대답은 정확하지만 예제를 보면 문제를 직관적으로 파악하는 데 도움이 될 수 있습니다. 아래에서 두 개의 명확한 군집이있는 데이터 집합을 생성하지만 클러스터되지 않은 차원은 군집 된 차원보다 훨씬 큽니다 (축의 축척이 다름). 정규화되지 않은 데이터의 클러스터링이 실패합니다. 정규화 된 데이터에 대한 클러스터링은 매우 효과적입니다.

두 차원으로 묶인 데이터에도 동일하게 적용되지만 정규화는 덜 도움이됩니다. 이 경우 PCA를 수행 한 다음 정규화하는 데 도움이 될 수 있지만 클러스터가 선형으로 분리 가능하고 PCA 차원에서 겹치지 않는 경우에만 도움이됩니다. (이 예제는 클러스터 수가 적기 때문에 명확하게 작동합니다)

정규화 된 버전과 비정규 화 된 버전 모두에서 k- 평균 군집을 갖는 합성 군집 데이터

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

rnorm = np.random.randn

x = rnorm(1000) * 10  
y = np.concatenate([rnorm(500), rnorm(500) + 5])

fig, axes = plt.subplots(3, 1)

axes[0].scatter(x, y)
axes[0].set_title('Data (note different axes scales)')

km = KMeans(2)

clusters = km.fit_predict(np.array([x, y]).T)

axes[1].scatter(x, y, c=clusters, cmap='bwr')
axes[1].set_title('non-normalised K-means')

clusters = km.fit_predict(np.array([x / 10, y]).T)

axes[2].scatter(x, y, c=clusters, cmap='bwr')
axes[2].set_title('Normalised K-means')

17

데이터에 따라 달라집니다 .

의미가 명확한 속성이있는 경우 위도와 경도를 말하면 데이터의 크기를 조정해서는 안됩니다. 왜냐하면 왜곡이 발생하기 때문입니다. (K- 평균도 좋지 않은 선택 일 수 있습니다. 위도 / 경도를 자연스럽게 처리 할 수있는 무언가가 필요합니다)

각 속성이 완전히 다른 (예 : 신발 크기 및 무게) 수치 단위를 혼합 한 경우 다른 단위 (lb, t, m, kg ...)가 부착 된 경우 이러한 값은 실제로 비교할 수 없습니다. z 표준화는 동일한 가중치를 부여하는 것이 가장 좋습니다.

이진 값, 이산 속성 또는 범주 속성이있는 경우 k- 평균을 멀리하십시오. K-수단의 요구를 계산하는 방법을 , 평균 값은 이러한 종류의 데이터에 의미가 없습니다.


5

백서 에서 설명한 것처럼 k- 평균은 뉴턴 알고리즘, 즉 그래디언트 기반 최적화 알고리즘을 사용하여 오류 함수를 최소화합니다. 데이터를 정규화하면 이러한 알고리즘의 수렴이 향상됩니다. 이에 대한 자세한 내용은 여기 를 참조 하십시오 .

아이디어는 서로 다른 데이터 구성 요소 (기능)가 다른 스케일을 가지면 파생 상품이 더 높은 분산으로 방향을 따라 정렬되는 경향이있어 수렴이 더 느리고 느려진다는 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.