IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Иерархическая кластеризация., Немного DataMining на С++
Andrewshkovskii
сообщение 24.11.2009 17:59
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Вершины – объекты
минимального остовного дерева группируются в кластеры.
Выбираются два объекта, которым соответствует минимальное ребро minjdj,
где j=1, n-1. Далее эти объекты стягиваются в один кластер (класс, таксон, страту) и
процедура шага 2 повторяется до тех пор, пока на n-1 этапе группирования не будет
сформирован один кластер, объединяющий все объекты. STOP.

Прикрепленное изображение

На рис. представлена последовательность группировки объектов в
кластеры для заданного на рис.1 примера минимального остовного дерева.
Порядок объединения объектов в кластеры отображён на рёбрах, которые
связывают объединяемые объекты .Таким образом, первыми
объединяются объекты X4 и Х5,которые в МОД связывает минимальное ребро d4
с весом 2. Вторыми объединяются объекты X2и X3, связанные ребром d2
с весом 3 , и так далее, пока на шестом этапе группирования ранее связанные объекты (X1,X2,X3,X4,X5,X6)
не будут объединены с объектом X7 ребром с весом 7.

И так , перейдем к описанию алгоритма кластеризации на примере :
Ребра МОД :
Цитата
(ИЗ--ВЕС-->В);
1. Е--2328-->Ом
2. В--2732-->И
3. Е--4667-->П
4. Л--5161-->Ом
5. О--6588-->И
7. П--14946-->В
И образуемые кластера :
(Шаг. №кластера)
1. 1.Е + ОМ значение кластера 2328
2. 1.
2. В + И 2732
3. 1. кластер поглощает вершину П, новый кластер Е+Ом+П 4667
2.
4. 1. поглощает вершину Л, новый кластер Е+Ом+П+Л 5161
2.
5. 1.
2. поглощает вершину О, новый кластер В + И + О 6588
6. 1 поглошает 2 и получается Л+Е+О+П+В+И+Ом 14946


Надеюсь понятно..вот как я понял этот алгоритм вербально :
Цикл от i=0 до n-1
Цикл от j=0 до n-1
Если множество вершин ребра/кластераi при пересечении с множеством вершин ребра/кластераj образует не пустое множество
если значение ребра/кластераj >=значению ребра/кластераi
ТОГДА образуется кластер соединением множества вершин ребра/кластераj и множества вершин ребра/кластераi
ИНАЧЕ наше ребро и есть кластер.

Правильно ли я понял алгоритм?
Вот так его можно описать в коде..
//ribs это объект класса реализующего :
// QSet<int> - множество вершин ребра/кластера, возвращается путем вызова метода items()
// свойство value, которое возвращает вес ребра/кластера
//считать, что операции &, &= - пересечение
// += - слияние.
for(int i=0;i<ribs.size();++i)
for(int j=0;j<ribs.size();++j)
if (ribs.at(j)!=ribs.at(i))//не сравниваем сами с собой..
if ( (!(ribs.at(i)->items() & ribs.at(j)->items()).empty()))
//если пересечение не образует пустое множество
if (ribs.at(j)->value() >= ribs.at(i)->value())
//если значение j ребра/кластера меньше i
{
ribs.at(j)->items()+=ribs.at(i)->items();//соединяем j и i ребро/кластера
}
else
{
// ребро и есть кластер
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Andrewshkovskii
сообщение 2.12.2009 1:07
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Ну макс. длина у меня вычисляется, это я предусмотрел.
Спасибо за такую огромную помощь, даже не знаю как и отблагодарить.Сейчас буду тестировать...

Добавлено через 13 мин.
Ну..я не знаю, какая у тебя версия qt, но когда я расширяю сцену, то у меня при больших значениях я вообще практически ничего не вижу..вот так вот :
Прикрепленное изображение
Значит, надо брать какой-то процент, либо делить на сотые части значение biggest_edge..

Добавлено через 8 мин.
Ох..с вот с последней закладкой вообще цирк smile.gif)
Прикрепленное изображение
Исправил путем умножения cut и biggest_edge на 150 при условии, что они меньше 10..

Добавлено через 15 мин.
нашел значения, при которых "уплывает" дендрограмма
Цитата
7984
14946
24266
28933
2080
1080
920
873
607

буд думать как из резать, калечить, убивать.. mad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Andrewshkovskii   Иерархическая кластеризация.   24.11.2009 17:59
volvo   Можно уточнить, в результате ты что хочешь получит...   24.11.2009 18:15
Andrewshkovskii   http://el-niko.ru/lab/1/ Вот тут пример , это прог...   24.11.2009 18:34
volvo   Шо-то мне не очень понятно, что там твой согруппни...   24.11.2009 20:46
Andrewshkovskii   Что-то ты нагромоздил кода, хотя просто я использу...   24.11.2009 23:48
volvo   У меня в принципе то же самое вот до этого момента...   25.11.2009 0:38
Andrewshkovskii   На 0 этапе добавил Лянгасово куда-то?Ну про код пр...   25.11.2009 0:52
volvo   Так... До Qt я вчера так и не добрался, сегодня ве...   25.11.2009 13:04
Andrewshkovskii   Да, результат более понятно,сейчас в коде по-разби...   25.11.2009 13:18
Andrewshkovskii   Вот такой вот результат,из-за одинковых значений...   25.11.2009 14:41
volvo   В общем, вот чего у меня получилось после полной п...   26.11.2009 1:44
Andrewshkovskii   Мда, мне далекова-то до твоих мозгов, Владимир..Сп...   26.11.2009 2:42
volvo   Это вряд ли... В Qt очень сокращенная версия STL-я...   26.11.2009 2:59
volvo   В первом приближении - вот так (тут очень многое д...   26.11.2009 18:41
Andrewshkovskii   Ох, только добрался до компа, весь день в институт...   27.11.2009 0:04
Andrewshkovskii   Ну в общем я попробовал разобраться, все в исходни...   27.11.2009 13:44
volvo   Ты точно нужный исходник присоединил? А то по-моем...   27.11.2009 13:53
Andrewshkovskii   Упс, исходник вот. Насчет длины вектора так и дума...   27.11.2009 13:55
volvo   Вот ответы: :) (я оставил твои комментарии, ниже д...   27.11.2009 14:55
Andrewshkovskii   Так, слегка проникся кодом, и даже что-то понял:) ...   27.11.2009 17:10
volvo   Написал код для визуализации на VCL (Билдер). Вот ...   29.11.2009 18:21
Andrewshkovskii   Привет!:)спасибо за огромную помощь..но я поше...   30.11.2009 1:26
volvo   Блин, у меня оказывается на скрине не было видно с...   30.11.2009 1:48
Andrewshkovskii   Ну я проект скину перед сном, если надо, посмотриш...   30.11.2009 1:50
Гость   В общем проблема такая...надо как-то зафиксировать...   30.11.2009 20:34
-Volvo-   Что значит "как нибудь"? Устанавливаешь ...   30.11.2009 21:12
Andrewshkovskii   Там надо минимум в 0 устанавливать, таково требова...   1.12.2009 0:27
volvo   В таком случае у тебя нет другого варианта, кроме ...   1.12.2009 2:04
Andrewshkovskii   Была такая мысль у меня о фиксации каждого кластер...   1.12.2009 2:19
Andrewshkovskii   Перечитал методичку..в общем-то можно и вовсе без ...   1.12.2009 2:52
Andrewshkovskii   В общем вот что вышло у меня. осталась одна пробле...   1.12.2009 16:41
Andrewshkovskii   С этой проблема ещё связано с отрисовкой кластеров...   1.12.2009 17:42
Andrewshkovskii   outCanvas->MoveTo(visLabelWidth + 30 + cluste...   1.12.2009 18:08
Andrewshkovskii   Понятно..   1.12.2009 18:57
volvo   :blink: А расскажи мне (ты свою модель лучше знаеш...   1.12.2009 21:51
Andrewshkovskii   Изменяется она потому, что она при первичной отрис...   1.12.2009 22:38
volvo   Угу... Именно: // Это у тебя было ... ...   1.12.2009 23:12
Andrewshkovskii   Ну макс. длина у меня вычисляется, это я предусмот...   2.12.2009 1:07
volvo   Ну, это вообще не проблема... Делаем в drawClamp(...   2.12.2009 1:58
Andrewshkovskii   хм..действительно.. Над не забыть только biggest_e...   2.12.2009 2:06
Andrewshkovskii   С 2ой проблемой разобрался, а вот что делать с 1ой...   2.12.2009 13:49
Andrewshkovskii   Ну в общем дописал..нашел правда один мемори лик, ...   3.12.2009 0:14


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:26
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"