1D 데이터 클러스터링


16

데이터 세트가 있는데 하나의 변수만을 기준으로 해당 데이터에 클러스터를 만들고 싶습니다 (결측 값이 없음). 하나의 변수를 기반으로 3 개의 클러스터를 만들고 싶습니다.

어떤 클러스터링 알고리즘, k- 평균, EM, DBSCAN 등을 사용해야합니까?

내 주요 질문은 어떤 상황에서 EM보다 k- 평균을 사용하거나 k- 평균보다 EM을 사용해야합니까?


1
EM 알고리즘은 결측 데이터로 최대 가능성 추정을 수행하기위한 범용 도구입니다. "클러스터링 알고리즘"에 대해 더 구체적으로 설명 할 수 있습니까?
매크로

weka를 도구로 사용하고 있으며 클러스터링 알고리즘에서 EM이 알고리즘으로 나열됩니다. 나는 절름발이 질문에 대해 유감스럽게 생각합니다.
Ali

EM 알고리즘이 잠재 변수 모델 ( "결측 데이터"로 생각할 수 있음)에 대한 최대 가능성 추정을 수행하는 데 사용되고 잠재 변수는 종종 클러스터링을 모델링하는 데 사용됩니다. 아마도 이것이 의미하는 것입니다.
매크로

@macro : 시작 하려면 stat.washington.edu/mclust 를 확인 하십시오 .
user603

3
클러스터링의 목적은 무엇입니까? 대부분의 통계 질문과 마찬가지로 여러 가지 답변이 있으며 목적이 적절한 또는 좋은 질문을 선택하기위한 필수 가이드라는 것을 알고 있습니다.
whuber

답변:


11

K- 평균 알고리즘과 EM 알고리즘은 1D 클러스터링과 매우 유사합니다.

K- 평균에서는 평균의 위치를 ​​추측하고 각 포인트를 가장 가까운 평균으로 클러스터에 할당 한 다음 현재 할당 된 포인트를 기준으로 평균 (및 분산)을 다시 계산 한 다음 포인트의 포인트를 업데이트 한 다음 업데이트합니다. 수단 ...

EM에서는 평균이 어디에 있는지 추측 한 다음 할당의 예상 값 (실제로 각 점에 각 점이있을 확률)을 계산 한 다음 예상 값을 사용하여 추정 평균 (및 분산)을 업데이트합니다. 가중치로 계산 한 다음 새 예상 값을 계산 한 다음 새 평균을 계산합니다 ...

주요 차이점은 K-means에서 군집에 점을 할당하는 것이 전부이거나 아님입니다. 여기서 EM은 그룹 구성원의 비율 / 확률을 제공합니다 (한 점은 그룹 A에있을 확률이 80 %, 확률이 18 % 인 것으로 볼 수 있음) 그룹 B에있을 가능성이 있고 그룹 C에있을 확률이 2 %입니다. 그룹간에 많은 분리가 있다면 두 가지 방법으로 비슷한 결과를 얻을 수 있습니다. 그러나 상당한 양의 중첩이있는 경우 EM은 아마도 더 의미있는 결과를 제공 할 것입니다 (분산 / 표준 편차가 관심이있는 경우에도). 그러나 매개 변수를 신경 쓰지 않고 그룹 구성원을 할당하는 것만으로도 K 평균이 더 간단합니다.

두 가지를 모두 수행하고 답이 얼마나 다른지 보시겠습니까? 그것들이 비슷하다면 더 간단한 것을 사용하고, 다르면 그룹화를 데이터와 외부 지식과 비교하기로 결정하십시오.


고맙게도 귀하의 게시물이 도움이되었으므로 두 가지를 모두 적용했으며 EM이 k- 평균보다 더 나은 클러스터를 생성 한 것으로 보입니다. (주로 가지고있는 데이터는 연속적이며 간격이 없기 때문에 주로 생각합니다). 나는 1D 데이터 만 가지고 있기 때문에 혼란 스러울 것입니다. 데이터를 분류하기 위해 비닝을해야 할 것입니다. 어떻게 생각해? 매개 변수가 정확히 무엇을 의미합니까? 인스턴스의 속성을 참조합니까? 감사합니다 알리
알리

흠 EM만으로는 충분하지 않은 것 같습니다. 혼합물의 기본 분포 분포에 대한 가정이 필요합니다.
tomka

2

EM은 결과 측면에서 k- 평균보다 낫습니다.

그러나 K- 평균은 런타임이 더 빠릅니다.

표준 편차 / 공분산 행렬이 대략 같은 경우 유사한 결과를 생성합니다. 이것이 사실이라고 생각되면 k- 평균을 사용하십시오.

DBSCAN은 데이터가 가우시안 일 때 사용됩니다. 1 차원 데이터를 사용하는 경우 가우시안 근사가 일반적으로 1 차원에서 유효하므로 일반적으로 적용 할 수 없습니다.


0

또 다른 간단한 방법은 기본적으로 1D 배열의 정렬을 사용하는 것입니다. 즉, 각 점을 반복하고 양의 방향과 음의 방향 모두에서 최소 거리에있는 값을 가져옵니다. 예를 들면 다음과 같습니다.

data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
   print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}

줄 것이다 :

{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}

어떤 점에서 특정 점에 가까운 항목은 기본적으로 그룹 아래에 있습니다. 이 기술에서 숙고해야 할 유일한 것은 변수 k이며, 이는 클러스터의 고정 크기입니다 :-).


-2

변수가 하나만 있으면 클러스터링이 필요하지 않습니다. 변수 분포를 기반으로 관측치를 쉽게 그룹화 할 수 있습니다.

아니면 여기에 몇 가지 요점이 있습니까?


5
변수 분포를 기반으로 관측치를 그룹화하는 방법에 대한 구체적인 예를 제공 할 수 있습니까?
Ali

@ composer314 : 히스토그램?
니코

1
죄송하지만 아직 팔로우하지 않습니다. 히스토그램을 사용하여 관련 관측치를 그룹화하려면 어떻게해야합니까? (내가 묻는 질문은 실제로 어떻게 히스토그램 내에서 덩어리를 찾는가? 스펙트럼 피크 따기와 유사 할까?)
Ali

5
@composer 히스토그램이나 심지어 데이터의 커널 스무딩을 사용하는 것은 일반적 으로 클러스터하기 쉬운 방법이 아닙니다 . 이 방법으로 가고 싶다면 유한 혼합 모형 을 적합시켜야합니다 . 히스토그램의 우연한 견해가 제안하는 것을 원한다면 K- 평균 ( 지도 제작자에게 인기있는 Jenks의 방법 이라고도 함 )을 사용하십시오.
whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.