Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Горизонтальная кластеризация точек


Автор: BarmoleY 4.5.2012, 15:45
Добрый день!
Сразу перейду к теме, которая во многом и заставила меня зарегистрироваться на этом форуме.
Дано некоторое (достаточно большое) количество точек в 3-мерном пространстве. Кроме основных параметров точки (X,Y,Z), дан параметр T. Не вдаваясь в подробности, скажу, что это - время, в которое была зафиксирована данная точка. Необходимо произвести кластеризацию точек.
Проблема заключается в том, что все методы, которые я перепробовал (иерархическая кластеризация, k-means, FCM) кластеризуют точки по вертикали. А мне нужно выделить "слои" по горизонтали. Здесь-то я и зашел в тупик. Боюсь, придется писать алгоритм самому, но дабы не изобретать велосипед, прошу совета - вдруг подобные методы уже существуют?
Заранее благодарен всем откликнувшимся.

Автор: mrgloom 4.5.2012, 16:15
что значит по вертикали\горизонтали? я так понял у вас вектор признаков состоит из 4 параметров (x,y,z,t).

Автор: BarmoleY 4.5.2012, 16:27
Цитата(mrgloom @ 4.5.2012,  16:15)
что значит по вертикали\горизонтали? я так понял у вас вектор признаков состоит из 4 параметров (x,y,z,t).

Верно. По сути параметр времени (T) на данном этапе не столько интересен. Сначала разобраться бы с кластеризацией в 3-мерном пространстве.
Что значит по горизонтали... Сейчас приведу пример.

На данный момент практически все алгоритмы выдают следующий результат (два кластера, точки обозначены синим и красным):
http://s2.ipicture.ru/

Мне бы хотелось, чтобы было так:
http://s2.ipicture.ru/

На самом деле график трехмерный, просто в этой проекции выглядит более показательно.

Автор: mrgloom 4.5.2012, 16:35
ну алгоритмы скорее всего не хотят вам специально навредить, в пику делая кластеризацию по вертикали, а скорее просто делают это просто правильно.

вроде есть такое понятие как разделяющая плоскость, вот там есть картинки например 
http://habrahabr.ru/post/105220/
вот вам как то наверно надо наложить ограничение на эту разделяющую плоскость.


и еще можно повернуть точки на 90 градусов smile 
 

Автор: BarmoleY 4.5.2012, 16:43
Цитата(mrgloom @ 4.5.2012,  16:35)
ну алгоритмы скорее всего не хотят вам специально навредить, в пику делая кластеризацию по вертикали, а скорее просто делают это просто правильно.

вроде есть такое понятие как разделяющая плоскость, вот там есть картинки например 
http://habrahabr.ru/post/105220/
вот вам как то наверно надо наложить ограничение на эту разделяющую плоскость.


и еще можно повернуть точки на 90 градусов smile

Поворачивать нельзя, там с особенностями предметной области связано...
А вот разделяющие плоскости - это уже ближе!
Спасибо за совет, буду разбираться!smile

Автор: BarmoleY 4.5.2012, 17:03
А на "конвейер" такой алгоритм (с разделяющими плоскостями) не поставишь... Мне нужно программно оработать много таких пространственных "кубов" как тот, что я привел выше. Нужно другое решение...

Автор: ksnk 4.5.2012, 17:12
Может, дело в неправильной метрике? Алгоритмы кластеризации вычисляют некий набор кластеров, по расстоянию между точками кластера. Так что если поменять метрику и считать, что "длина" по оси Y в несколько раз больше, чем по оси X, то можно откорректировать алгоритм.

Автор: BarmoleY 4.5.2012, 20:15
Цитата(ksnk @ 4.5.2012,  17:12)
Может, дело в неправильной метрике? Алгоритмы кластеризации вычисляют некий набор кластеров, по расстоянию между точками кластера. Так что если поменять метрику и считать, что "длина" по оси Y в несколько раз больше, чем по оси X, то можно откорректировать алгоритм.

Спасибо, попробую с метрикой поэкспериментировать.

Автор: BarmoleY 5.5.2012, 12:18
Цитата

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


Взято http://portal.tpu.ru/departments/kafedra/vt/Disciplines_VT/Data_storehouses/FilesTab/lections%20data%20mining.pdf.
Только вот как это работает - я так и не понял. Каким образом задаются эти веса?.. Если кто-то работал с этим, приведите, пожалуйста, примеры.

Автор: Mirkes 8.5.2012, 19:57
Цитата(BarmoleY @ 5.5.2012,  12:18)
Цитата

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


Взято http://portal.tpu.ru/departments/kafedra/vt/Disciplines_VT/Data_storehouses/FilesTab/lections%20data%20mining.pdf.
Только вот как это работает - я так и не понял. Каким образом задаются эти веса?.. Если кто-то работал с этим, приведите, пожалуйста, примеры.

Например так. Пусть важность X=20, Y=100, Z=50, T=1
Тогда в качестве квадрата расстояния вычисляется следующая величина 20(x-xn)^2+100(y-yn)^2+50(z-zn)^2+(t-tn)^2
Через маленькие буквы обозначил координаты точек, через буквы с добавкой n - координаты ядра (центроида) класса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)