Структури от данни за прилагане на йерархично групиране

Ако трябваше да внедря алгоритъм за йерархично клъстериране, да речем в C/C++ или Java - предвид функциите за изчисляване на разстояние между& в клъстери -

1. какъв би бил моят избор (заедно с други опции) за прилагане на структурите от данни за съхраняване на резултатите от изчислените клъстери във всеки „преминаване“ от показателя за близост, който е дефиниран като n^2 по-долу.

        Corresponding Proximity matrix
   p1 p2 p3 p4 .... and hence n*n 
p1 d11 d12 d13 d14
p2 ...
p3...
p4 ...

2. Дали изборът на структури от данни ще се различава, ако използвам изграждането отгоре надолу вместо отдолу нагоре на съответните дендограми?

въведете описание на изображението тук

Пример за дендограма отдолу нагоре (източник, Wiki)

3. Тъй като проблемът с изчисляването на клъстерите и техния центроид е компютърно интензивен (Алчен алгоритъм?) - това ще стане ли по-добро с избора на структури от данни - какви са абстрактни избори, за които можете да се сетите?

4. Има ли наистина такова нещо като разредена матрица [пост, след като изчисли близостта на 2 точки, които след това нарастват, за да асимилират повече съседни точки, ще има по-малко точки , ако трябваше да съхраним нашите „нови“ разстояния в нова матрица] в този контекст? Ще се свие/нарасне ли структурата на данните спрямо тази нужда?

5. Може ли тази матрица да съществува в паметта или части от нейния клъстер - Ако не, какво трябва да заредим отново в паметта, преди да изчислим всеки следващ клъстер (агломеративен групиране или по друг начин)

+1, ако се придържате към концептуален (и надявам се интуитивен) отговор/или ме пренасочете в тази посока

PPS: Нямам нужда от функция, която да ми помогне да внедря това - просто искам да разбера това от управление на паметта и концептуална гледна точка спрямо големи набори от данни. Имам много малко познания по този въпрос, така че игнорирайте, ако това звучи твърде примитивно.


comment
Може би бихте могли 1. да сте по-конкретни 2. да посочите какво всъщност се опитвате да направите   -  person embert    schedule 21.02.2014


Отговори (1)


Бих ви предложил да погледнете статията за алгоритъма на Slink от R.Sibson, която дефинира структура от данни, наречена PointerHierarchy, използвайки която можете да изрежете дандограмата на дадено разстояние, за да стигнете до клъстери. Този алгоритъм не изисква предварително изготвяне на матрица на подобие, която би намалила отпечатъка на паметта. Документът също така дава примерна реализация във FORTRAN, която можете лесно да напишете на език по ваш избор. Използвал съм този метод в моя производствен код в java и резултатите са доста добри.

person Bankelaal    schedule 13.06.2016