거대한 이진 데이터 집합을 몇 가지 범주로 클러스터링하려면 어떤 알고리즘을 사용해야합니까?


11

바이너리 데이터 (0-1 항목 만)의 큰 (650K 행 * 62 열) 행렬이 있습니다. 매트릭스는 대부분 희박합니다. 약 8 %가 채워집니다.

1에서 5로 명명 된 5 개의 그룹으로 클러스터링하고 싶습니다. 계층 적 클러스터링을 시도했지만 크기를 처리 할 수 ​​없었습니다. 또한 길이 62의 650K 비트 벡터를 고려하여 해밍 거리 기반 k- 평균 군집 알고리즘을 사용했습니다.이 중 적절한 결과를 얻지 못했습니다.

도와주세요.


내 1 담당자의 b / c를 주석 처리 할 수 ​​없으므로 이것을 답변으로 입력해야했습니다. Jaccard 유사성을 살펴볼 수 있습니다. 나는 파이썬 scipy가 그것을 구현했다고 생각합니다. Jaccard ...
gobrewers14

데이터가 최소한 어느 정도 자연스럽게 5 개 그룹으로 분류 될 것으로 추정되는 이유가 있습니까? 행 클러스터링에 정말로 관심이 있습니까, 아니면 비트 벡터로 인코딩 된 62 개의 특성 간의 관계에 관심이 있습니까? 후자의 경우 다른 기술이 더 적합합니다.
micans

답변:


4

당신은 잘못된 질문을하고 있습니다.

"어떤 알고리즘"을 묻는 대신 " 응용 프로그램에서 의미있는 범주 / 클러스터 란 무엇입니까"를 묻어 야합니다 .

위의 알고리즘이 작동하지 않았다는 사실에 놀라지 않습니다. 매우 다른 사용 사례를 위해 설계되었습니다. k- 평균은 임의의 다른 거리 에서는 작동 하지 않습니다 . 해밍 거리와 함께 사용하지 마십시오. 이 K-라고 이유가 수단 경우에만 사용하는 것이 합리적, 산술 평균은 (는 바이너리 데이터를하지 않은) 의미가 있습니다.

대신 k-mode를 시도하고 싶을 수도 있습니다. IIRC 이것은 실제로 범주 형 데이터와 함께 사용되는 변형이며 이진 데이터는 다소 범주 형입니다 (그러나 희소성은 여전히 ​​죽일 수 있습니다).

그러나 우선, 데이터를 단순화하기 위해 중복 을 제거하고 예를 들어 고유 / 빈 열을 제거 했습니까?

아마도 APRIORI 또는 ​​유사한 접근 방식이 문제에 더 의미가있을 수 있습니다.

어느 쪽이든 먼저 필요한 것을 파악한 다음 어떤 알고리즘이이 문제를 해결할 수 있습니까? 무작위 알고리즘을 시도하지 않고 데이터 중심으로 작업하십시오 .


"해밍 거리와 함께 사용하지 않는 이유"를 설명해 주시겠습니까? Matlab에서 제공되는 모든 것이 합리적 일 수 있습니다.
Dror Atariah

평균 때문에. 산술 평균은 해밍 거리 또는 이진 데이터에서 의미가 없습니다. 사용 모드메도 이드 대신.
Anony - 무스 - 종료 될

Matlab은 해밍 메트릭과 함께 k- 평균을 사용할 때 중심을 업데이트 할 때 산술 평균을 사용합니다. 맞습니까? MATLAB에서이 측정 항목을 사용하는 올바른 방법은 무엇입니까?
Dror Atariah

k- 평균은 평균을 사용하기 때문에 k- 평균 이라고합니다. 그렇지 않으면 k- 메도 이드, k- 모드 등이라고합니다. 평균은 L2에 적합합니다-제곱 편차의 합입니다.
종료-익명-무스

따라서 matlab은 해밍 메트릭과 함께 k- 수단 을 사용합니다. 이것은별로 이해가되지 않습니다.
Dr. Atariah

3

어쩌면 나는 대답에 약간 늦었을지 모르지만, 아마도 그것은 미래의 몸에 도움이 될 것입니다.

적응 공명 이론은 이진 분류 문제에 대한 좋은 알고리즘입니다. ART 1에 대한 점검 1. 더 많은 정보는 19 장의 무료 Neural Network Design 책에서 볼 수 있습니다 .

이 네트워크는 훌륭한 생물학적 아이디어와 우수한 수학 구현을 결합합니다. 또한이 알고리즘은 쉽게 구현할 수 있으며이 책에서이 분류기를 작성하는 방법에 대한 단계별 지침을 찾을 수도 있습니다.


2

이진 데이터 클러스터링을위한 클래식 알고리즘은 Bernoulli Mixture 모델입니다. 모델은 베이지안 방법을 사용하여 적합 할 수 있고 EM (예상 최대화)을 사용하여 적합 할 수 있습니다. GitHub 전체에서 샘플 파이썬 코드를 찾을 수 있지만 전자는 더 강력하지만 더 어렵습니다. GitHub에 모델의 C # 구현이 있습니다 (제한적 라이센스가있는 Infer.NET 사용).

모델은 매우 간단합니다. 먼저 데이터 포인트가 속한 클러스터를 샘플링하십시오. 그런 다음 데이터 집합의 차원을 가진만큼 많은 Bernoullis에서 독립적으로 샘플링하십시오. 이것은 클러스터에 주어진 이진 값의 조건부 독립성을 의미합니다!

베이지안 설정에서 이전의 초과 클러스터 할당은 Dirichlet 배포입니다. 일부 클러스터가 다른 클러스터보다 크다고 생각되면 우선 순위를 정하십시오. 각 클러스터에 대해 각 Bernoulli 배포에 대해 베타 배포를 먼저 지정해야합니다. 일반적으로이 사전은 Beta (1,1) 또는 균일입니다. 마지막으로, 데이터가 제공 될 때 클러스터 할당을 무작위로 초기화하는 것을 잊지 마십시오. 대칭이 깨지고 샘플러가 멈추지 않습니다.

베이지안 설정에는 BMM 모델의 몇 가지 멋진 기능이 있습니다.

  1. 온라인 클러스터링 (데이터가 스트림으로 도착할 수 있음)

  2. 모델을 사용하여 누락 된 치수를 유추 할 수 있습니다

첫 번째는 데이터 세트가 매우 커서 머신의 RAM에 맞지 않을 때 매우 편리합니다. 두 번째는 모든 종류의 누락 된 데이터 대치 작업에 사용될 수 있습니다. 이진 MNIST 이미지의 누락 된 절반을 대치합니다.

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