클러스터 전에 데이터를 표준화해야합니까? 의 예에서 scikit learn
DBSCAN에 대한, 여기에 그들은 라인에서이 작업을 수행 :
X = StandardScaler().fit_transform(X)
그러나 왜 필요한지 이해하지 못합니다. 결국 클러스터링은 데이터의 특정 분포를 가정하지 않습니다. 감독되지 않은 학습 방법이므로 목표는 데이터를 탐색하는 것입니다.
왜 데이터를 변환해야합니까?
클러스터 전에 데이터를 표준화해야합니까? 의 예에서 scikit learn
DBSCAN에 대한, 여기에 그들은 라인에서이 작업을 수행 :
X = StandardScaler().fit_transform(X)
그러나 왜 필요한지 이해하지 못합니다. 결국 클러스터링은 데이터의 특정 분포를 가정하지 않습니다. 감독되지 않은 학습 방법이므로 목표는 데이터를 탐색하는 것입니다.
왜 데이터를 변환해야합니까?
답변:
정규화가 항상 필요한 것은 아니지만 거의 아프지 않습니다.
몇 가지 예 :
K- 평균 :
K- 평균 군집화는 모든 공간의 방향에서 "등방성"이므로 다소 길거나 길지 않은 군집을 생성하는 경향이 있습니다. 이 상황에서 분산이 동일하지 않은 것은 분산이 작은 변수에 가중치를 더하는 것과 같습니다.
Matlab의 예 :
X = [randn(100,2)+ones(100,2);...
randn(100,2)-ones(100,2)];
% Introduce denormalization
% X(:, 2) = X(:, 2) * 1000 + 500;
opts = statset('Display','final');
[idx,ctrs] = kmeans(X,2,...
'Distance','city',...
'Replicates',5,...
'Options',opts);
plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
'Location','NW')
title('K-means with normalization')
(FYI : 데이터 세트가 클러스터 또는 클러스터되지 않은지 (예 : 하나의 단일 클러스터 형성) 감지하는 방법 )
분산 클러스터링 :
비교 분석에 따르면 분산 클러스터링 결과는 정규화 절차 유형에 따라 다릅니다.
입력 변수가 MLP에서와 같이 선형으로 결합되면 최소한 이론적으로 입력을 표준화 할 필요가 거의 없습니다. 그 이유는 해당 가중치와 바이어스를 변경하여 입력 벡터의 크기 조정을 효과적으로 취소하고 이전과 동일한 출력을 유지할 수 있기 때문입니다. 그러나 입력을 표준화하면 훈련 속도가 빨라지고 지역 최적 상태에 빠질 가능성이 줄어드는 여러 가지 실용적인 이유가 있습니다. 또한 표준화 된 입력을 통해 가중치 감소 및 베이지안 추정을보다 편리하게 수행 할 수 있습니다.
데이터에 이러한 작업을 수행해야합니까? 그 대답은 다릅니다.
입력 또는 대상 변수를 표준화 하면 최적화 문제 의 수치 조건 ( ftp://ftp.sas.com/pub/neural/illcond/illcond.html 참조 )을 개선하고 다양한 기본값 을 확인함으로써 학습 프로세스를보다 잘 작동시키는 경향이 있습니다. 초기화 및 종료와 관련된 값이 적절합니다. 대상을 표준화하면 목적 함수에 영향을 줄 수도 있습니다.
사례의 표준화는 정보를 버리기 때문에주의해서 접근해야합니다. 해당 정보가 관련이없는 경우 사례를 표준화하면 도움이 될 수 있습니다. 해당 정보가 중요한 경우 사례를 표준화하는 것은 비참 할 수 있습니다.
흥미롭게도 측정 단위를 변경하면 Kaufman, Leonard 및 Peter J. Rousseeuw와 같이 매우 다른 군집 구조를 볼 수도 있습니다 . "데이터에서 그룹 찾기 : 군집 분석 소개" (2005).
일부 응용 프로그램에서 측정 단위를 변경하면 매우 다른 군집 구조를 볼 수도 있습니다. 예를 들어, 4 명의 가상 인물의 연령 (년)과 키 (센티미터)는 표 3에 나와 있으며 그림 3에 그려져 있습니다. . 반면에 높이가 피트로 표시되면 표 4와 그림 4를 얻습니다. 여기서 명백한 군집은 {A, C}와 {B, D}입니다. 각 과목마다 다른 동반자를 받았기 때문에이 파티션은 첫 번째 파티션과 완전히 다릅니다. (그림 4는 나이가 일 단위로 측정 된 경우 훨씬 더 평평했을 것입니다.)
측정 단위 선택에 대한 이러한 의존성을 피하기 위해 데이터 표준화 옵션이 있습니다. 원래 측정 값을 단위가없는 변수로 변환합니다.
Kaufman et al. 몇 가지 흥미로운 고려 사항이 계속됩니다 (11 페이지).
철학적 인 관점에서 표준화는 실제로 문제를 해결하지 못합니다. 실제로 측정 단위를 선택하면 변수의 상대적 가중치가 발생합니다. 더 작은 단위로 변수를 표현하면 해당 변수의 범위가 더 커져 결과 구조에 큰 영향을 미칩니다. 반면에 표준화를 통해 객관성을 달성하기 위해 모든 변수에 동일한 가중치를 부여하려고합니다. 따라서 사전 지식이없는 실무자가 사용할 수 있습니다. 그러나 특정 응용 분야에서 일부 변수가 본질적으로 다른 변수보다 더 중요 할 수 있으며 가중치 할당은 주제 지식에 기반해야합니다 (예 : Abrahamowicz, 1985 참조). 반면에 변수의 규모와 무관 한 군집 기법을 고안하려는 시도가 있었다 (Friedman and Rubin, 1967). Hardy and Rasson (1982)의 제안은 클러스터의 볼록 껍질의 총 부피를 최소화하는 파티션을 검색하는 것입니다. 원칙적으로 이러한 방법은 데이터의 선형 변환과 관련하여 변하지 않지만 불행히도 구현에 알고리즘이 존재하지 않습니다 (2 차원으로 제한된 근사치 제외). 따라서 표준화의 딜레마는 현재 피할 수없는 것처럼 보이며이 책에 설명 된 프로그램은 사용자에게 선택권을 부여합니다. Hardy and Rasson (1982)의 제안은 클러스터의 볼록 껍질의 총 부피를 최소화하는 파티션을 검색하는 것입니다. 원칙적으로 이러한 방법은 데이터의 선형 변환과 관련하여 변하지 않지만 불행히도 구현에 알고리즘이 존재하지 않습니다 (2 차원으로 제한된 근사치 제외). 따라서 표준화의 딜레마는 현재 피할 수없는 것처럼 보이며이 책에 설명 된 프로그램은 사용자에게 선택권을 부여합니다. Hardy and Rasson (1982)의 제안은 클러스터의 볼록 껍질의 총 부피를 최소화하는 파티션을 검색하는 것입니다. 원칙적으로 이러한 방법은 데이터의 선형 변환과 관련하여 변하지 않지만 불행히도 구현에 알고리즘이 존재하지 않습니다 (2 차원으로 제한된 근사치 제외). 따라서 표준화의 딜레마는 현재 피할 수없는 것처럼 보이며이 책에 설명 된 프로그램은 사용자에게 선택권을 남겨 둡니다.
그렇지 않으면 데이터를 클러스터링하는 방법을 결정할 때 각 기능의 값 범위가 가중치로 작용하기 때문에 데이터 표준화가 권장됩니다. 일반적으로 바람직하지 않습니다.
예를 들어 euclidean
L2 규범으로 알려진 대부분의 클러스터링 알고리즘 (sci-kit learn의 DBSCAN 포함)에 대한 표준 메트릭을 고려하십시오 . 기능 중 하나의 기능 범위가 다른 기능보다 훨씬 큰 경우 해당 기능이 클러스터링을 완전히 지배합니다. 이를 설명하기 위해 아래의 간단한 예를 살펴보십시오.
>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.metrics.pairwise import euclidean_distances
>>>
>>> X = np.array([[1,2,100],[4,3,50],[1,1,75]])
>>>
>>> print X
[[ 1 2 100]
[ 4 3 50]
[ 1 1 75]]
>>>
>>> print euclidean_distances(X)
[[ 0. 50.0999002 25.01999201]
[ 50.0999002 0. 25.25866188]
[ 25.01999201 25.25866188 0. ]]
>>> print euclidean_distances(StandardScaler().fit_transform(X))
[[ 0. 3.46410162 1.73205081]
[ 3.46410162 0. 3.46410162]
[ 1.73205081 3.46410162 0. ]]
이것으로부터 비표준 버전 사이의 유클리드 거리는 그 값의 범위가 다른 두 값보다 훨씬 크기 때문에 세 번째 열에 의해 지배되는 것을 볼 수 있습니다. 그러나 데이터가 표준화되면 더 이상 문제가되지 않으며 각 데이터 포인트 사이의 거리를 계산할 때 각 피처가 동일한 것으로 가중치가 적용됩니다.
필요한 거리 측정법에 따라 필요한지 여부에 따라 표준화 할 필요는 없습니다.
예를 들어, Mahalanobis 거리를 선택하면 분리는 표준 편차의 수를 기준으로하며 그 사이의 절대 거리가 아닙니다. 이는 스케일 불변량 메트릭이기 때문입니다.
머신 러닝의 많은 것들과 마찬가지로 단단하고 빠른 답변이 없으며 확실하게 알 수있는 유일한 방법은 데이터에 가장 적합한 결과를 제공하는 다양한 기술을 적용하는 것입니다.