0

많은 수의 개체 사이에서 계산 한 유사도 행렬을 가지고 있으며 각 개체는 다른 개체와 0이 아닌 유사성을 가질 수 있습니다. 이 행렬을 다른 작업을 위해 생성 했으므로 이제이를 새로운 분석을 위해 클러스터링하려고합니다.Scikit의 스펙트럼 클러스터링에서 사전 계산 된 선호도 행렬을 사용할 때 KNN?

사전 계산 된 선호도 행렬을 전달할 수 있기 때문에 scikit's spectral clustering 메소드가 적합 할 수 있습니다. 또한 스펙트럼 클러 스팅은 일반적으로 친화 행렬을 만들 때 가장 가까운 이웃들을 사용하며, 유사성 행렬에는 동일한 제약 조건이 없다는 것을 알고 있습니다.

어피 니티 매트릭스에서 노드 사이의 임의의 수의 에지를 허용하는 매트릭스를 통과 시키면 각 노드가 가장 가까운 이웃 수만 갖는 것으로 제한됩니다. 그렇지 않다면 미리 계산 된 친화도 행렬을 변경해야 할 것입니다.

답변

1

스펙트럼 클러스터링을 수행하기 위해 선호도를 직접 계산할 필요가 없습니다. sklearn이 대신 해드립니다.

sc = SpectralClustering()을 호출하면 affinity 매개 변수를 사용하여 선호도 행렬을 계산하는 데 사용되는 커널을 선택할 수 있습니다. rbf은 기본적으로 커널 인 것처럼 보이며 특정 수의 가장 가까운 이웃을 사용하지 않습니다. 그러나 다른 커널을 선택하기로 한 경우 n_neighbours 매개 변수를 사용하여 그 번호를 지정할 수 있습니다. 그러면 sc.fit_predict(your_matrix)을 사용하여 클러스터를 계산할 수 있습니다.

+0

그러나 scikit의 기준 (유사점은 양수이고 대칭이며 정사각형입니다)을 충족하는 유사성 매트릭스가 이미 있으며 affinity = 'precomputed'옵션을 사용하고 있습니다. 미리 계산 된 어피 니티 매트릭스를 기반으로 새로운 어피 니티 매트릭스를 계산할 것을 제안합니까? – neelshiv

+0

만약 당신이 원한다면 당신의 친화도 행렬을 계산할 수 있지만 유사 행렬을 사용하는 것만으로 충분할 것입니다 (유사 행렬 또한 suqare, positive 및 symmetrical 임). 입력 데이터가 유사도 행렬 인 경우 Sklearn이 작업을 수행하게하려면 자체적으로 선호도 행렬을 계산합니다. –

+0

아, 알았어. 다른 리소스를 많이 사용하는 프로세스의 결과이기 때문에 미리 계산 된 선호도 행렬을 사용하고 있습니다. 나는 단지 이전 프로세스가 이미 삽입 한 작업에서 새로운 것을 만들 수 있는지 알아보기 위해 노력하고 있습니다. 작업하기 위해 넘겨주는 어피 니티 행렬은 만들 때 사용한 입력보다 훨씬 작습니다. – neelshiv

1

스펙트럼 클러스터링에는 스파 스화 된 매트릭스가 필요하지 않습니다.

그러나 내가 잘못 생각하지 않는다면 조밀 한 매트릭스가 아닌 희소 한 매트릭스의 가장 작지 않은 0이 아닌 고유 벡터를 찾는 것이 더 빠릅니다. 최악의 경우는 O (n^3)로 남아 있을지도 모르지만 - 스펙트럼 클러스터링은 가장 느린 방법 중 하나입니다.

+0

잘 고맙습니다. – neelshiv