| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Горизонтальная кластеризация точек |
| Автор: 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 | ||
Верно. По сути параметр времени (T) на данном этапе не столько интересен. Сначала разобраться бы с кластеризацией в 3-мерном пространстве. Что значит по горизонтали... Сейчас приведу пример. На данный момент практически все алгоритмы выдают следующий результат (два кластера, точки обозначены синим и красным): http://s2.ipicture.ru/ Мне бы хотелось, чтобы было так: http://s2.ipicture.ru/ На самом деле график трехмерный, просто в этой проекции выглядит более показательно. |
| Автор: mrgloom 4.5.2012, 16:35 |
| ну алгоритмы скорее всего не хотят вам специально навредить, в пику делая кластеризацию по вертикали, а скорее просто делают это просто правильно. вроде есть такое понятие как разделяющая плоскость, вот там есть картинки например http://habrahabr.ru/post/105220/ вот вам как то наверно надо наложить ограничение на эту разделяющую плоскость. и еще можно повернуть точки на 90 градусов |
| Автор: BarmoleY 4.5.2012, 16:43 | ||
Поворачивать нельзя, там с особенностями предметной области связано... А вот разделяющие плоскости - это уже ближе! Спасибо за совет, буду разбираться! |
| Автор: BarmoleY 4.5.2012, 17:03 |
| А на "конвейер" такой алгоритм (с разделяющими плоскостями) не поставишь... Мне нужно программно оработать много таких пространственных "кубов" как тот, что я привел выше. Нужно другое решение... |
| Автор: ksnk 4.5.2012, 17:12 |
| Может, дело в неправильной метрике? Алгоритмы кластеризации вычисляют некий набор кластеров, по расстоянию между точками кластера. Так что если поменять метрику и считать, что "длина" по оси Y в несколько раз больше, чем по оси X, то можно откорректировать алгоритм. |
| Автор: BarmoleY 4.5.2012, 20:15 | ||
Спасибо, попробую с метрикой поэкспериментировать. |
| Автор: 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 | ||||
Например так. Пусть важность X=20, Y=100, Z=50, T=1 Тогда в качестве квадрата расстояния вычисляется следующая величина 20(x-xn)^2+100(y-yn)^2+50(z-zn)^2+(t-tn)^2 Через маленькие буквы обозначил координаты точек, через буквы с добавкой n - координаты ядра (центроида) класса. |