입력에서 사용자 정의 거리 행렬을 사용한 k- 평균 구현 취할 수있는 k- 평균 구현을

누구든지 입력에서 거리 행렬을 취할 수있는 k- 평균 구현을 지적 할 수 있습니까? 표준 MATLAB 구현에는 입력에 관찰 행렬이 필요하며 유사성 측정 값을 사용자 정의로 변경할 수 없습니다.



답변

k- 평균 은 군집하려는 점의 여러 하위 집합의 평균 을 찾을 수 있어야 하므로 거리 행렬을 입력으로 사용하는 k- 평균 버전을 요청하는 것은 의미가 없습니다.

대신 k-medoids 를 사용해보십시오 . 있습니다 어떤 matlab에 구현 가능.


답변

거리 행렬을 원시 데이터로 변환하고이를 K- 평균 군집화에 입력 할 수 있습니다. 단계는 다음과 같습니다.

1) N 점 사이의 거리는 유클리드의 제곱이어야합니다. 행렬의 ” 이중 중심화 “를 수행합니다 . 각 요소의 행 평균 빼기; 결과에서 각 요소의 빼기 열 평균; 결과적으로 각 요소에 행렬 평균을 추가하십시오. 빼기 2로 나눕니다. 이제 가지고있는 행렬은 점 사이의 SSCP (제곱합과 교차 곱) 행렬입니다. 여기서 원점은 N 점 구름의 기하학적 중심에 놓입니다. (이중 센터링에 대한 설명은 여기를 참조하십시오 .)

2) 해당 매트릭스에서 PCA (Principal Component Analysis)를 수행하고 NxN 컴포넌트 로딩 매트릭스를 얻습니다 . 마지막 열 중 일부는 모두 0 일 가능성이 있으므로 잘라냅니다. 지금 당신이 유지하는 것은 실제로 주성분 점수, 즉 구름을 통해 축으로 통과하는 주성분에 대한 N 점의 좌표입니다. 이 데이터는 K- 평균 입력에 적합한 원시 데이터로 처리 될 수 있습니다.

PS 거리가 기하학적으로 올바른 제곱 유클리드 거리가 아닌 경우 문제가 발생할 수 있습니다. SSCP 매트릭스는 양 (반) 정확하지 않을 수 있습니다. 이 문제는 여러 가지 방법으로 해결할 수 있지만 정밀도가 떨어집니다.


답변

내 지인 중 한 사람이 작성한이 기사를 참조하십시오.)

http://arxiv.org/abs/1304.6899

이것은 임의의 거리 행렬을 입력으로 취하는 일반화 된 k- 평균 구현에 관한 것입니다. 대각선이 0 인 대칭 비음 수 행렬 일 수 있습니다. 이상한 거리 행렬에 대해서는 합리적인 결과를 얻지 못할 수 있습니다. 이 프로그램은 C #으로 작성되었습니다.

위의 링크를 방문한 후 기타 형식을 클릭하고 소스 다운로드를 클릭하면 소스 코드를 얻을 수 있습니다. 그런 다음 Program.cs가 포함 된 .tar.gz를 얻게됩니다. 또는 소스 코드를 PDF에서 복사 할 수도 있습니다.


답변

Java Machine Learning Library를 사용할 수 있습니다. 그들은 K-Means 구현을 가지고 있습니다. 생성자 중 하나가 세 개의 인수를 허용합니다.

  1. K 가치.
  2. 그 객체는 DistanceMeasure 클래스 의 인스턴스입니다 .
  3. 반복 횟수

원하는 결과를 얻기 위해 DistanceMeasure 클래스를 쉽게 확장 할 수 있습니다. 아이디어는이 클래스의 measure (Instance x, Instance y) 메소드에서 사용자 정의 거리 행렬의 값을 반환하는 것입니다.

K-Means는 거리 메트릭의 특정 속성을 가정하여 수렴하도록 조정됩니다. 유클리드 거리, 맨하탄 거리 또는 기타 표준 메트릭이 이러한 가정을 충족시킵니다. 사용자 정의 거리 메트릭은 이러한 가정을 충족하지 않을 수 있으므로 생성자에는 클러스터 러를 빌드하기 위해 실행할 반복 횟수를 지정하는 세 번째 매개 변수가 있습니다.