2014-10-22 2 views
1

같은 객체의 클러스터를 찾으려고합니다. I는 각 객체에 대한 객체의 비교 값을 계산 형태의 매트릭스 만들었다 : 주어진 예에서Python 어피 니티 매트릭스에서 클러스터링

matrix = np.array(matrix) 
cluster = AffinityPropagation(preference="precomputed") 
cls = cluster.fit_predict(matrix) 

: I가 sklearn 선호도 전파 모듈 매트릭스를 통과

header = [1, 2, 3, 4, 5] 
matrix = [[0, 100, 0, 0, 0] 
      [100, 0, 0, 0, 0] 
      [0, 0, 0, 0, 0] 
      [0, 0, 0, 0, 0] 
      [0, 0, 0, 0, 0]] 

을 , 나는 1-2/2-1은 100이고, 다른 모든 값은 0이므로 1과 2가 클러스터 될 것으로 기대합니다. 그러나 CLS 배열이 반영되지 않습니다 :

cls = [0 0 0 0 1] 

1, 2, 3, 4는 하나 개의 클러스터 있음을 나타냅니다, 5는 별도의 클러스터된다.

값의 크기 (예 : 0-1 부 0-100) 등을 변경하여 오른쪽 위 삼각 행렬을 전달하려고 시도했지만 예상대로 클러스터되지 않습니다.

제가 누락 된 부분에 대한 생각?

정보 2014년 10월 24일 추가 :

나는 각 개체마다 서로 관련이 얼마나 잘 나타내는 번호를 생성하는 것이 내 객체의 페어의 비교를 수행하고,에서하고

. 이러한 객체의 대부분은 전혀 관련이 없으므로 "0"값을 갖습니다.

이렇게하면 n-by-n 행렬이 생성됩니다. 여기서 n은 10 ~ 100s 정도의 개체입니다.

시각적으로 더 자세한 분석을 위해 이러한 개체를 "클러스터링"하는 것은 쉽지 않습니다. 아래의 경우 1은 2와 관련이 있고 2는 3과 관련이 있지만 1과 3은 직접 관련이 없습니다. 1, 2, 3으로 처리를 계속하고 4와 5는 무시합니다. (실제 데이터에서 단일 매트릭스 내에 유효한 클러스터가 여러 개있을 수 있습니다).

header = [1, 2, 3, 4, 5] 
matrix = [[0, 100, 0, 0, 0] 
      [100, 0, 96, 0, 0] 
      [0, 96, 0, 0, 0] 
      [0, 0, 0, 0, 0] 
      [0, 0, 0, 0, 0]] 

내 연구 선호도 전파가 스파 스 매트릭스에서 클러스터를 찾는 좋은 것을 나타내고, 내 짝 비교 효과적으로 "미리 계산"선호도 행렬을 생성한다.

이러한 클러스터를 시각적으로 쉽게 찾을 수 있지만 자동화하기 위해 전후에 제공되는 코드와 통합 할 수 있습니다. 그러나 원본 게시물에서 알 수 있듯이 의미있는 클러스터를 생성하지는 않습니다.

질문 :

내가 기술 한 매트릭스의 종류로 시작하는 의미있는 클러스터를 생성하는 데 필요한 처리의 일종인가?

나는 클러스터를 찾지 못하는 등의 단계를 무시하거나 알고리즘에 오류를 삽입하고 있습니까?

이러한 종류의 데이터에 대해 다른 클러스터링 방법 (DBSCAN, k-means 등)을 사용해야합니까?

답변

1

0은 마법 "연결하지 않음"값이 아닙니다.

개체 3과 개체 4의 친화도가 과 같으므로에서 1,2 또는 5로 같기 때문에 할당 된 위치는 중요하지 않습니다. 그들은 모두 대략 같은 품질입니다.

1과 2의 강한 응집력은 3과 4를 할당하는 것이 더 바람직 할 수 있습니다. 한 번 이상 클러스터를 생성하려는 욕구는 5가 별개로 남을 수있다. 그러나 그것은 단지 무작위 일 수도 있으며, 객체 3과 4는 최상의 친 화성의 첫 번째 표본에 할당됩니다 (클러스터 1,2에서 오는 것). 물체 (5)는 적어도 두 개의 성분을 가지기 위해 분리되어 유지된다.

손으로 만든 친화력이 아닌 실제 데이터를 사용하십시오.

+0

"연결하지 않음"을 나타내는 값이 있어야합니다. (실제로 "링크가 매우 약합니다.")이 데이터를보고있는 사람은 1-2의 클러스터와 3-4-5의 클러스터를 쉽게 찾습니다. 알고리즘이 그것을 놓친다는 것은 내가 잘못 사용하고 있음을 의미합니다. – codeMonkey

+0

어쩌면 3-4-5에 0보다 높은 친화도를 부여해야 할 것입니다. –

+0

나는 0으로 대체하려고 시도 : 0.1, 10, 90. 세 시도는 모두 cls = [0 0 0 0 1] 생산. 내 (기본) 연구에서 스파 스 행렬 (연결이없는 많은 경우)이 있고 AP가 그러한 행렬에 효율적이기 때문에 선호도 전파 방법으로 나를 지적했습니다. – codeMonkey

관련 문제