2012-12-21 4 views
5

각 10 개의 XY 좌표를 포함하는 더 작은 데이터 세트가 있습니다. 나는 Centroid를 얻기 위해 Matlab (R2012a)와 k-means를 사용하고 있습니다. 일부 클러스터 (아래 그림 참조)에서 극한의 점을 볼 수 있습니다. 내 데이터 집합은 그대로 유지하고 하나의 아웃 라이너는 내 중심 점의 값을 파괴합니다. 이 점들을 제외시키는 쉬운 방법이 있습니까? 아마도 Matlab에는 '특이점 제외'기능이 있지만 도구 메뉴의 아무 곳에서나 볼 수는 없습니다. 도움을 주셔서 감사합니다! (그래 나는이 :-)에 새로운 오전k- 평균 클러스터에서 특이점 제거

enter image description here

+2

당신이 찾고있는 단어가 Outlier (Outener)가 아니라 Outlier (http://en.wikipedia.org/wiki/Outlier)라고 생각합니다. 어쩌면이 방법을 통해보다 쉽게 ​​솔루션을 찾을 수 있습니다. – Medo42

+1

사용중인 소프트웨어를 언급하고 이에 따라 태그를 지정하는 것도 좋은 생각입니다. – kotekzot

+0

죄송합니다, 실수로 outliners 썼다; (내가 검색의 공정한 비트를 했어,하지만 난 matlab에 초급이고 지금까지 내가 만난 코드는 꽤 무거워.) ORC와 ODIN에서 보았지만 matlab 도움말 기능에 따르면 도구 모음에서 'outlier 제외'라는 항목이 있어야하지만 찾을 수 없습니다. R2012a를 사용하고 있습니다. – carro

답변

1

k-means는 데이터 세트의 특이점에 매우 민감 할 수 있습니다. 그 이유는 k-means가 제곱합의 최적화를 시도하기 때문입니다. 따라서 큰 편차 (이상 값과 같은)가 많은 무게를 갖습니다.

이상치가있는 데이터 세트가있는 경우 DBSCAN (Density-Based Spatial Clustering of Applications with Noise)과 같은 특수 노이즈 처리 알고리즘을 사용하는 것이 좋습니다. "N"은 머리 글자 어에 유의하십시오. k-means뿐만 아니라 많은 다른 클러스터링 알고리즘을 사용하면 DBSCAN은 밀도가 낮은 영역에있는 클러스터 객체가 아닌 으로 결정할 수 있습니다.

0

당신은 "이상치 제거"와 같은 뭔가를 찾고 다른 사람은 위의 링크대로,의 "를 구성하는 것에 대한 더 엄격한 수학적 정의가없는 것 이상한 "- http://en.wikipedia.org/wiki/Outlier#Identifying_outliers.

감독자가 아닌 클러스터를 수행 할 때 외부인 검색은 클러스터가 무엇인지 배우려고하고 "아니오"클러스터에 해당하는 데이터 포인트가 무엇인지 알기 때문에 더욱 어려워집니다.

하나의 간단한 정의는 다른 모든 데이터 포인트에서 "멀리 떨어져있는"모든 데이터 포인트를 이상치로 간주하는 것입니다. 예를 들어, 당신은 다른 지점으로 최대 최소 거리와 지점을 제거하는 것이 좋습니다 :

x = randn(100,2); 
x(101,:) = [10 10]; %a clear outlier 
nSamples = size(x,1); 

pointToPointDistVec = pdist(x); 
pointToPointDist = squareform(pointToPointDistVec); 
pointToPointDist = pointToPointDist + diag(inf(nSamples,1)); %remove self-distances; set to inf 

smallestDist = min(pointToPointDist,[],2); 
[maxSmallestDist,outlierInd] = max(smallestDist); 

당신은 몇 번 위가 반복적으로 점을 제거하기 위해 반복 할 수 있습니다. 이렇게하면 인접한 이웃이 적어도 하나 이상있는 일은 제거되지 않습니다. WIKI 페이지를 읽고 더 도움이 될만한 알고리즘을 보았다면이를 시도하고 구현하여 구체적인 접근 방법에 대해 물어보십시오.

관련 문제