데이터 세트가 있는데 하나의 변수만을 기준으로 해당 데이터에 클러스터를 만들고 싶습니다 (결측 값이 없음). 하나의 변수를 기반으로 3 개의 클러스터를 만들고 싶습니다.
어떤 클러스터링 알고리즘, k- 평균, EM, DBSCAN 등을 사용해야합니까?
내 주요 질문은 어떤 상황에서 EM보다 k- 평균을 사용하거나 k- 평균보다 EM을 사용해야합니까?
데이터 세트가 있는데 하나의 변수만을 기준으로 해당 데이터에 클러스터를 만들고 싶습니다 (결측 값이 없음). 하나의 변수를 기반으로 3 개의 클러스터를 만들고 싶습니다.
어떤 클러스터링 알고리즘, k- 평균, EM, DBSCAN 등을 사용해야합니까?
내 주요 질문은 어떤 상황에서 EM보다 k- 평균을 사용하거나 k- 평균보다 EM을 사용해야합니까?
답변:
K- 평균 알고리즘과 EM 알고리즘은 1D 클러스터링과 매우 유사합니다.
K- 평균에서는 평균의 위치를 추측하고 각 포인트를 가장 가까운 평균으로 클러스터에 할당 한 다음 현재 할당 된 포인트를 기준으로 평균 (및 분산)을 다시 계산 한 다음 포인트의 포인트를 업데이트 한 다음 업데이트합니다. 수단 ...
EM에서는 평균이 어디에 있는지 추측 한 다음 할당의 예상 값 (실제로 각 점에 각 점이있을 확률)을 계산 한 다음 예상 값을 사용하여 추정 평균 (및 분산)을 업데이트합니다. 가중치로 계산 한 다음 새 예상 값을 계산 한 다음 새 평균을 계산합니다 ...
주요 차이점은 K-means에서 군집에 점을 할당하는 것이 전부이거나 아님입니다. 여기서 EM은 그룹 구성원의 비율 / 확률을 제공합니다 (한 점은 그룹 A에있을 확률이 80 %, 확률이 18 % 인 것으로 볼 수 있음) 그룹 B에있을 가능성이 있고 그룹 C에있을 확률이 2 %입니다. 그룹간에 많은 분리가 있다면 두 가지 방법으로 비슷한 결과를 얻을 수 있습니다. 그러나 상당한 양의 중첩이있는 경우 EM은 아마도 더 의미있는 결과를 제공 할 것입니다 (분산 / 표준 편차가 관심이있는 경우에도). 그러나 매개 변수를 신경 쓰지 않고 그룹 구성원을 할당하는 것만으로도 K 평균이 더 간단합니다.
두 가지를 모두 수행하고 답이 얼마나 다른지 보시겠습니까? 그것들이 비슷하다면 더 간단한 것을 사용하고, 다르면 그룹화를 데이터와 외부 지식과 비교하기로 결정하십시오.
또 다른 간단한 방법은 기본적으로 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이며, 이는 클러스터의 고정 크기입니다 :-).