2011-11-19 5 views
0

100 개 이상의 차원 (때로는 1000 개)으로 데이터를 클러스터링하는 데 사용할 최적의 클러스터링 알고리즘은 무엇입니까? C, C++ 또는 특히 C#의 구현을 알고 있으면 감사하겠습니다.고차원 데이터 클러스터링

+1

데이터 포인트의 수는 몇 개입니까? 어떤 점에서 수업 레이블을 알고 있습니까? 클러스터는 어떻게 사용됩니까? 이러한 엄청난 가능성을위한 "최고의 알고리즘"은 없습니다. 아마도 [클러스터 분석] (http://en.wikipedia.org/wiki/Cluster_analysis)의 상단 부분을 읽고 다시 질문하십시오. – denis

답변

3

귀하의 데이터에 크게 의존합니다. 공통적 인 문제에 대해서는차원의 저주를 참조하십시오. 최근의 연구 (Houle et al.)는 당신이 그 수를 지나칠 수 없다는 것을 보여주었습니다. 수천 개의 차원과 데이터 클러스터가있을 수 있으며 클러스터되지 않는 1 차원 데이터조차 존재합니다. 대부분 신호 대 잡음의 문제입니다. 이것은 예를 들어 TF-IDF 벡터의 클러스터링이 특히 코사인 거리에서 잘 작동하는 이유입니다.

그러나 요점은 입니다. 먼저은 데이터의 성격을 이해해야합니다. 그런 다음 적절한 거리 함수, 가중치, 매개 변수 및 알고리즘을 선택할 수 있습니다.

특히이 어떤 클러스터를 구성하는지 알아야합니다. 특히 고차원 데이터의 경우 많은 정의가 있습니다. 그것들은 부분 공간에있을 수도 있고, 임의로 회전 될 수도 있고 그렇지 않을 수도 있으며, 겹칠 수도 있고 그렇지 않을 수도 있습니다 (예를 들어, 겹침 또는 부분 공간을 허용하지 않습니다).

0

저는 벡터 양자화 (quantization)라는 것을 알고 있습니다. 그 알고리즘은 stuf를 다양한 차원으로 클러스터링하는 좋은 알고리즘입니다.

0

저는 100 차원의 데이터에 k-means를 사용했기 때문에 매우 일반적입니다. 따라서 어떤 언어로든 구현이 가능합니다. 최악의 시나리오 - 자신이 구현하기가 쉽습니다.

0

클러스터링을 시도하기 전에 Principle Component Analysis 또는 자동 연관 신경망과 같은 차원 감소 기술을 시험해 보는 것도 가치가 있습니다. 거대한 문제를 훨씬 작은 문제로 만들 수 있습니다.

그 후에 k-means 또는 gaussians의 혼합으로 이동하십시오.

+0

신경망 접근에 대한 정보를 좀 주시겠습니까? 하지만 훈련을 받아야한다고 생각하니? –

+0

이것은 아마 오래되고 죽은 것입니다. 그러나 저는 이것을 보았습니다. 네, 어떤 네트와도 같이 훈련시켜야합니다. 아이디어는 N << Dims가있는 N 노드의 내부 레이어를 사용한 다음 출력 노드에서 입력 데이터를 재생하도록 교육하는 것입니다. 그렇게함으로써, 당신은 그물의 일부 데이터를 버리도록 강요하고 있습니다. 입력과 출력의 차이를 최소화하면 가장 유익한 데이터가 유지됩니다. 예 : 입력 (엄마의 키, 아빠의 키, 아빠의 아이 컬러); 출력 (자녀의 키), 내부 노드 2. 교육 중에 눈 색깔에 대한 가중치는 0이됩니다. –

0

LMW-tree 프로젝트의 EM 트리 및 K 트리 알고리즘은 이와 같이 높은 차원의 문제를 집중시킬 수 있습니다. C++로 구현되었으며 다양한 표현을 지원합니다.

우리는 LSH/Random Projections에 의해 생성 된 바이너리 벡터를 클러스터링하는 새로운 알고리즘을 가지고 있거나 유사성을 위해 해밍 거리를 통해 비교할 수있는 바이너리 벡터를 방출하는 다른 알고리즘을 가지고 있습니다.