내 프로그램에서 계층 적 클러스터링 ELKI's SLINK implementation을 사용하려고합니다.사용자 지정 개체에 ELKI 사용 및 결과 이해
클러스터해야 할 개체 집합이 있습니다. 이를 위해 클러스터링을 수행하기 전에 이들을 특성 벡터로 변환합니다.
val clusterer = new SLINK(CosineDistanceFunction.STATIC, 3)
val connection = new ArrayAdapterDatabaseConnection(featureVectors)
val database = new StaticArrayDatabase(connection, null)
database.initialize()
val result = clusterer.run(database).asInstanceOf[Clustering[_ <: Model]]
지금, 결과는 유형
Model
의 요소를 포함하는
Clustering
입니다 :
이것은 내가 현재 (코드 스칼라에)가 실행하고 어떤 결과를 생성 할 수있어 방법이다. 나는 그들을 출력 할 수는 있지만,이 결과를 이해하는 방법을 모르겠다. 특히 SLINK
은 DendrogramModel
의 모델을 반환하기 때문에 매개 변수화 할 수없는 것 같다.
구체적으로 어떻게하면 결과를 원래 요소 (이전에 변수 featureVectors
을 만든 요소)에 다시 연결할 수 있습니까?
사용자 지정 모델을 만들거나 결과에서 검색하기 위해 초기화 및 알고리즘 실행을 통해 원래 요소에 대한 링크를 유지해야한다고 가정합니다. 나는 이것에 시작하기 위하여 어디에서 찾아 낼 수 없는가.
ELKI를 자체 프로그램에 삽입하는 것이 바람직하지 않음을 알고 있습니다. 그러나 ELKI를 다른 방법으로 호출하는 것은 별다른 차이가 없을 것 같습니다 : 프로그램을 실행하는 동안 결과를 다시 클러스터링하여 내 개체에 매핑해야합니다.
좋아, 그래서'getIDs()'를 사용하여 클러스터의 멤버를 얻는다. [실행중인 알고리즘에 대한 예제] (http://stackoverflow.com/questions/15326505/running-clustering-algorithms-in-elki/15334879#15334879)에서 나는'db.getRelation (TypeUtil. DOUBLE_VECTOR_FIELD)'를 호출하고 내 벡터를 get() 할 수 있습니다. 그 작업 흐름이 맞습니까? 나는 여전히 원래의 물건으로 되돌아 갈 가능성이 없다. 알고리즘을 초기화하고 실행할 때 어떻게 든 내 자신의'DoubleVector' 서브 클래스 (내 데이터에 대한 참조가 들어 있습니다)를 사용할 수 있습니까? – notan3xit
예, 원하는 유형의 관계를 가져온 다음 해당 DBID로 인스턴스를 가져옵니다. 'DBID' 객체를 만드는 것을 피하십시오. 훨씬 저렴한 iterator에서'get'을 호출 할 수 있습니다. 거리 함수가있는 모든 클래스에서 많은 알고리즘이 실행됩니다. 대부분의 거리 함수는 임의의 'NumberVector'에 대해 정의됩니다. 따라서 자신의 거리 함수 (데이터 유형에 따라)를 구현하거나 데이터 유형에 'NumberVector' 인터페이스를 구현하면 좋은 결과를 얻을 수 있습니다. –
나는 내 'DistanceFunction'을 꽂는 방법을 이해한다고 생각합니다. 그러나 나머지는 정확히 문제입니다. 어떻게 알고리즘을 사용자 정의 클래스에서 실행할 수 있습니까? 그것을 위해 내 자신의'DatabaseConnection'을 구현해야합니까? 기존의 모든 구현은 그다지 일반적이지 않습니다. – notan3xit